[英]Transforming GPS coordinates for OpenLayers
我正在用JavaScript构建一个项目,该项目将OpenLayers与OpenStreetMap图层一起使用。
我具有从navigator.geolocation.getCurrentPosition()或Google Maps Geocoding API获得的坐标“ 48.3185005,14.2853003”(奥地利林茨的坐标)。 现在,我想在地图上显示这一点。
为了使地图显示正确的位置,必须进行哪些转换?如何使用OpenLayers进行这些转换? 目前,我总是能在非洲东部取得一些进展。
这是因为OpenStreetMap数据是投影坐标系,称为Web Mercator,即,以米为单位,而GPS数据以经/纬度为单位。 这就是为什么所有点似乎都在非洲西海岸以外的海域中的原因,因为在以米为单位的覆盖整个地球的坐标系中,任何180,180到-90,90范围内的坐标似乎都在该小范围内加纳海岸。 我在您的原始帖子中注意到您说的是非洲东部,但是在评论中,您说的是大西洋,我假设您的意思是西,这与我的解释是一致的。 这个对吗?
您可以在地图构造函数中通过指定其他地图投影和显示投影来处理此问题:请参阅http://docs.openlayers.org/library/spherical_mercator.html
您需要以下方面的东西:
var map = new OpenLayers.Map("map", {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
});
EPSG:3857(最初为900913)是Spherical Mercator的正式名称,它与4326(经纬度)之间的转换内置于OpenLayers中。
仅仅是因为您正在混合这些值,Point(14.2853003,48.3185005)在也门,而Point(48.3185005,14.2853003)在奥地利。因此,请检查文档是否以与您不同的顺序给出了纬度和经度值考虑到
这应该将您的地图设置在正确的位置。
map.setCenter(new OpenLayers.LonLat(14.2853003,48.3185005).transform('EPSG:4326',map.getProjectionObject()),5);
您只需要知道输入坐标参考并使用getProjectObject函数即可获取目标参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.