我试图通过在带有 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”函数将地图坐标转换为地理坐标。