转换OpenLayers的GPS坐标

时间:2014-05-02 12:26:26

标签: javascript google-maps gps geolocation openlayers

我正在使用OpenLayers和OpenStreetMap层构建JavaScript项目。

我有坐标" 48.3185005,14.2853003" (来自奥地利林茨的协调),我从navigator.geolocation.getCurrentPosition()或Google Maps Geocoding API获得。 现在我想在地图上显示这一点。

地图显示正确位置需要哪些转换,以及如何使用OpenLayers进行这些转换? 目前,我总是在非洲以东的某个地方。

3 个答案:

答案 0 :(得分:3)

这是因为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(lat / lon)之间的转换已内置于OpenLayers中。

答案 1 :(得分:2)

只是你正在混合价值,Point(14.2853003,48.3185005)在也门,而Point(48.3185005,14.2853003)在奥地利。所以检查文件是否纬度&经度值的排列顺序与您想象的不同

答案 2 :(得分:1)

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

  

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

您只需要知道输入坐标参考并使用getProjectObject函数来获取目标参考。