我试图获得一个点的Latitude
和Longitude
。但是在转换时,它并没有返回正确的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伪墨卡托。