Openlayers-转换时LonLat不正确



我试图获得一个点的LatitudeLongitude。但是在转换时,它并没有返回正确的LonLat。这是一个很大的数字,肯定不是lonlat点。

我尝试了一些解决方案,但没有得到结果。还有什么可能会失败?

JS代码我尝试过

map = createMap("deviceMap");
var fromProjection = new OpenLayers.Projection("EPSG:4326"); 
var toProjection = new OpenLayers.Projection("EPSG:900913"); 
map.events.register('click', map, function handleMapClick(e) {
          lonLat = self.map.getLonLatFromViewPortPx(e.xy).
          transform(map.getProjectionObject(), toProjection);
          prompt("",lonLat);
});

最终得到答案

map.events.register('click', map, function handleMapClick(e) {
                var toProjection = new OpenLayers.Projection("EPSG:4326");
                var lonLat = map.getLonLatFromPixel(e.xy).
                             transform(map.getProjectionObject(), toProjection);
    });
  • EPSG:4326
    • 应参考WGS 84
    • 具有十进制度数值
  • EPSG:90913
    • 参考WGS84网络墨卡托
    • 具有公制值,它是x/y轴坐标系,因此需要"高数字"

如果我理解得对的话,你应该在变量lonLat中有一个很高的数字。

OpenLayers中的"LonLat"并不意味着,它将只是经度/纬度,请参阅此处的文档:

  • lon{Number}以地图为单位的x轴坐标。如果您的地图位于地理投影,这将是经度。否则,它将是以地图单位表示的地图位置的x坐标。

  • lat{Number}以地图为单位的y轴坐标。如果您的地图位于地理投影,这将是纬度。否则,它将是地图单位中地图位置的y坐标。

因此,如果你想获得一个真正的LonLat坐标,你不应该转换它(并使用EPSG:4326)或将它转换到其他坐标系,而不是EPSG:90913。

顺便说一句,OpenLayers开始使用900918(数字相当于GOOGlE),它是由Christopher Schmidt先生定义的,最初它没有被欧洲石油调查集团(EPSG)接受。然后EPSG改变了主意,给了他们号码:3857-WGS84伪墨卡托。

最新更新