为 OpenLayers 转换 GPS 坐标

Posted

技术标签:

【中文标题】为 OpenLayers 转换 GPS 坐标【英文标题】:Transforming GPS coordinates for OpenLayers 【发布时间】:2014-05-02 12:26:25 【问题描述】:

我正在使用带有 OpenStreetMap 图层的 OpenLayers 使用 javascript 构建一个项目。

我从 navigator.geolocation.getCurrentPosition() 或 Google Maps Geocoding API 获得坐标“48.3185005, 14.2853003”(奥地利林茨的坐标)。 现在我想在地图上显示这个点。

地图显示正确位置需要哪些转换?如何使用 OpenLayers 进行这些转换? 目前,我总能在非洲东部取得一些进展。

【问题讨论】:

【参考方案1】:

这是因为 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 的官方名称,OpenLayers 内置了它与 4326(纬度/经度)之间的转换。

【讨论】:

东非是当我尝试一些我在网上找到的转换时。没有变化,它就是大西洋。谢谢,现在可以了。【参考方案2】:

是否仅仅是您混合了这些值,Point (14.2853003, 48.3185005) 在也门,Point (48.3185005, 14.2853003) 在奥地利..所以请检查文档是否以不同的方式给出纬度和经度值比你想象的要好

【讨论】:

不,如果我不转换坐标,我总是在大西洋(非洲附近)几乎同一个地方,即使我交换坐标。因此,似乎有必要进行某种转变。【参考方案3】:

这应该将您的地图设置在正确的位置。

map.setCenter(新 OpenLayers.LonLat(14.2853003, 48.3185005).transform('EPSG:4326', map.getProjectionObject()), 5);

只需要知道输入坐标参考,使用getProjectObject函数获取目标参考即可。

【讨论】:

嗯,它已经可以工作了,但是出于维护原因,该功能确实很好。

以上是关于为 OpenLayers 转换 GPS 坐标的主要内容,如果未能解决你的问题,请参考以下文章

openlayers5之ol.proj坐标转换

openlayers3怎么与各地图的坐标转换

webgis地图发布需要转换坐标吗

OpenLayers开发Gis地图

android编程怎么把GPS坐标转换为百度地图坐标

android编程怎么把GPS坐标转换为百度地图坐标