понедельник, 17 января 2011 г.

Отображение текущих координат в градусах широты и долготы в веб-приложениях ArcGIS Server

Существует некоторое веб-приложение, созданное мастером ArcGIS Server Manager. В нём используется некоторый картографический сервис с применением некоторой пользовательской проекции. Единицы измерения: метры. При перемещении указателя мыши в строке статуса браузера отображаются текущие координаты в метрах. Это выглядит так:

Пользователь выразил желание текущие координаты видеть в градусах широты и долготы. Далее по шагам описывается решение данной задачи.
1. Загрузить файл http://trac.osgeo.org/proj4js/attachment/wiki/Download/proj4js-1.0.1.zip и извлечь из него файл proj4js-combined.js, который лежит в папке lib.
2. Поместить файл proj4js-combined.js в папку c:\inetpub\wwwroot\WEBAPP\JavaScript, где WEBAPP - наше веб-приложение.
3. В файле c:\inetpub\wwwroot\WEBAPP\Default.aspx перед строкой
<script language="javascript" type="text/javascript" src="javascript/WebMapApp.js"></script>
поместить строку
<script language="javascript" type="text/javascript" src="javascript/proj4js-combined.js"></script>
4. В файле c:\inetpub\wwwroot\WEBAPP\WebMapApp.js вместо фрагмента
function MapCoordsMouseMove(sender, args) {
    var coords = args.coordinate;
    var coordsSeparator = (webMapAppDecimalDelimiter == ",") ? "  " : ", ";
    var roundFactor = Math.pow(10, arcgisWebApp.CoordsDecimals);
    var xstring = (Math.round(coords.get_x() * roundFactor) / roundFactor).toString();
    var ystring = (Math.round(coords.get_y() * roundFactor) / roundFactor).toString();
    if (webMapAppDecimalDelimiter == ",") {
        xstring = xstring.replace(/\./g, webMapAppDecimalDelimiter);
        ystring = ystring.replace(/\./g, webMapAppDecimalDelimiter);
    }
    window.status = xstring + coordsSeparator + ystring;
}

вставить фрагмент
Proj4js.defs["EPSG:100001"] = "+proj=tmerc +lat_0=55.667 +lon_0=37.5 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs";
var src = new Proj4js.Proj("EPSG:100001");
var dst = new Proj4js.Proj("WGS84");

function MapCoordsMouseMove(sender, args) {
    var coords = args.coordinate;
    var coordsSeparator = (webMapAppDecimalDelimiter == ",") ? "  " : ", ";
    var roundFactor = Math.pow(10, arcgisWebApp.CoordsDecimals);
    var p = new Proj4js.Point(coords.get_x(), coords.get_y());
    Proj4js.transform(src, dst, p);
    var xstring = (Math.round(p.x * roundFactor) / roundFactor).toString();
    var ystring = (Math.round(p.y * roundFactor) / roundFactor).toString();
    if (webMapAppDecimalDelimiter == ",") {
        xstring = xstring.replace(/\./g, webMapAppDecimalDelimiter);
        ystring = ystring.replace(/\./g, webMapAppDecimalDelimiter);
    }
    window.status = xstring + coordsSeparator + ystring;
}
Всё! Результат получен. В строке статуса можно увидеть координаты в градусах широты и долготы:

Комментариев нет:

Отправить комментарий