如何在 OpenLayers 中将“正常”坐标转换为 OSM 坐标

Posted

技术标签:

【中文标题】如何在 OpenLayers 中将“正常”坐标转换为 OSM 坐标【英文标题】:How to convert "normal" coordinates to OSM coordinates in OpenLayers 【发布时间】:2014-05-09 14:56:07 【问题描述】:

我对 OpenLayers 还很陌生,并且已经遇到了我的第一个问题。我正在尝试将“正常”坐标转换为我从谷歌地图复制到 OSM 的坐标,以将我的地图居中到某个区域。 现在据我了解,“正常”坐标系 EPSG:4326 和 OSM 坐标系是 EPSG:3857 或 EPSG:900913,它们是相同的。所以我的 javascript 代码是:

map.setCenter(new OpenLayers.LonLat(53.537460, 9.953227).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:3857")), 5);

但这中心完全不同的位置。我错过了什么?

【问题讨论】:

如果您将转换位排除在外,它是否正确居中? 不,它解决了另一个(“错误”)位置 它应该在哪里设置中心? 我不确定我是否会使用正常这个词。 4326 表示纬度和经度(或更准确地说是经度/纬度,正如 scai 指出的那样),而 3857 是球形墨卡托,以米为单位。 【参考方案1】:

Google Maps 和 OSM 显示完全相同的位置。其他一切都会很奇怪。

但是,您将 latlon 混为一谈。 OpenLayers.LonLat() 首先接受 lon,然后接受 lat,因为名称已经告诉您。但是你是先通过lat,然后是lon,这当然会导致完全不同的位置。

【讨论】:

谢谢!你拯救了一天【参考方案2】:

您的位置是在 Steinwerder(汉堡港)还是在非洲之角附近?我假设第一个,所以纬度是北纬 53 度,经度是西纬 9 度。

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

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

只需要知道输入坐标参考,使用getProjectObject函数就可以得到目标参考。

【讨论】:

以上是关于如何在 OpenLayers 中将“正常”坐标转换为 OSM 坐标的主要内容,如果未能解决你的问题,请参考以下文章

openlayers5之ol.proj坐标转换

为 OpenLayers 转换 GPS 坐标

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

OpenLayers自定义投影,转换OpenLayers中加载的OSM的默认投影坐标

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

OpenLayers学习笔记2——坐标转换问题