0

我试图通过在带有 ArcGIS baseMap 的 Openlayers 地图上绘制来获取具有某些坐标的 gpx 文件。

当我绘制折线并创建 gpx 时,如果我在 Google 地球上打开它,我看到的不是我之前绘制的,这条线与原来的完全不同,并且不在我绘制它的位置。我知道这是一个投影问题,我尝试将几何对象从墨卡托转换为地理,也直接从地图坐标中获取地理坐标,但没有。我尝试将“spatialReference”设置为 4362,然后设置为 3857,但没有任何变化。

我将在 gps 设备上使用那个 .gpx(下周我将去斯瓦尔巴群岛,我需要一些 gps 轨道才能乘坐雪地摩托在朗伊尔城转转,城外没有任何生命迹象,所以我必须做好准备),当我在那里时,我会为他们租给我的设备调整输出,但现在我需要在 .gpx 文件中保存几乎正确的坐标。

我从地图上得到这些坐标:纬度:61.22582068741976 经度:4.684820015391338,而我期待的是 78. lat 和 15. lon 左右。

这是我用来创建地图的一些代码(我没有粘贴我知道它与我的问题无关的代码):

    var initialExtent = new esri.geometry.Extent({"xmin":505615.5801124362,"ymin":8678955.717187276,"xmax":525935.6207525175,"ymax":8689168.654279819,"spatialReference":{"wkid":32633,"latestWkid":32633}});

    map = map = new esri.Map("map", {extent: initialExtent, logo : false});
    basemapURL = "http://geodata.npolar.no/ArcGIS/rest/services/inspire1/NP_TopoSvalbard_U33_CHL/MapServer/";
    map.addLayer(new esri.layers.ArcGISTiledMapServiceLayer(basemapURL));

在这里,我使用的是 wkid 32633,这是该地图的默认值,尝试使用已知的进行更改,但没有发生任何事情。

现在我用来获取坐标的代码:

        dojo.connect(tb, "onDrawEnd", getCoords);
        function getCoords(geo) {
            var r=confirm("Salvare tracciato?");
            if (r==true) {
                geo = esri.geometry.webMercatorToGeographic(geo);   
                for ( var path = 0; path < geo.paths.length; path ++ ) {                   
                    for ( var pt = 0; pt < geo.paths[path].length; pt++ ) {
                        tra += '<wpt lat="'+geo.paths[path][pt][1]+'" lon="'+geo.paths[path][pt][0]+'"></wpt>';
                    }   
                }
            }
        }

“tra”是一个变量,用于存储我将使用其他函数插入到 gpx 文件中的所有代码。“webMercatorToGeographic”函数将地图坐标转换为地理坐标。

4

1 回答 1

0

感谢 GIS.stackexchange 上的 Devdatta Tengshe 我得到了我需要的东西:

在您的应用程序中使用 proj4js 库。为此,请按照下列步骤操作:

从https://github.com/proj4js/proj4js/releases下载最新的库 在您的 HTML 文件中使用 您需要先定义投影,然后才能使用它。您可以使用以下代码行来执行此操作: var UTM33N= "+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"; var GCS84="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs";

当需要变换时,可以使用以下行: var mapped=proj4(UTM33N,GCS84,[x,y]); 其中 x & y 是给定投影中的坐标。作为输出,您将获得一个包含两个元素的数组,即经度和纬度

那工作得很好。

于 2014-02-07T16:11:14.483 回答