首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌地图是否坐标映射到百度地图中的同一位置?

谷歌地图是否坐标映射到百度地图中的同一位置?
EN

Stack Overflow用户
提问于 2015-04-04 09:31:06
回答 4查看 7.6K关注 0票数 4

我正在实现一个地图视图在百度地图(中国的主要地图服务)使用纬度和经度源自谷歌地图。我发现我的位置(主要是上海周围)一直“离”大约1公里!

通过线性调整,百度的位置大致出现在(+-几米)正确的位置:

代码语言:javascript
复制
//Declaring my Baidu map marker's properties
...
lat : gm_location.lat + 0.00575,
lng : gm_location.lng + 0.00668,
...

虽然这将满足我的特殊需要,但我不喜欢这些神奇的数字。有谁能洞察这种抵消是从何而来?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-08 11:02:22

你使用哪个谷歌地图,google.com/map还是google.cn/map?卫星还是街景?在所有情况下,答案都是无坐标不符合百度地图POI,但原因略有不同。

首先,从除了中国,百度没有提供任何有用的地图开始,让我们关注这个问题,

谷歌地图是否在中国内部进行坐标,映射到百度地图的同一位置?

答案是否定的。百度地图使用自己的BD-09坐标系。,而Google则使用中国的GCJ-02标准( google.com /map或.cn上的街头地图),或者使用WGS-84表示google.com卫星视图地图上的卫星图像。

GPS坐标(WGS-84)和Google坐标(GCJ-02)并不像这个片段演示了一样映射到百度地图上的相同位置(我没有在答案中包含代码片段,因为它不工作,因为它包含脚本--但您可以在这个我给出的另一个答案中看到代码)。

在上海附近使用线性修正可能会奏效,但在中国的其他地区,这一数值将发生变化。

如何补偿偏移量

将Google坐标转换为百度地图坐标的官方方法是使用百度地图API进行转换。

API有两个版本:

  1. 据称在http://developer.baidu.com/map/changeposition.htm上记录的“服务器”版本需要获取应用程序密钥
  2. http://api.map.baidu.com/ag/coord/convert的一个版本,百度地图坐标转换演示通过http://developer.baidu.com/map/jsdemo/demo/convertor.js使用,不需要应用程序密钥。

让我们把上海人民英雄纪念碑的谷歌街道地图(GCJ-02)坐标转换成百度地图坐标:

代码语言:javascript
复制
curl "http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x=121.4914&y=31.2423"

威尔输出

代码语言:javascript
复制
{"error":0,"x":"MTIxLjQ5Nzk5OTg3MzM4","y":"MzEuMjQ3OTc1ODQwMTk2"}

坐标是base64 64编码的,并解码到

代码语言:javascript
复制
121.49799987338, 31.247975840196

如果map.baidu.com允许您输入lat/lon坐标,您将在人民英雄纪念碑着陆。

百度的API只提供到BD-09的转换。

转换也可以脱机运行,公式可以找到中国博客。GCJ-02、WGS-84和B-09之间的转换可以使用geoChina逆变换之类的库来执行。

票数 12
EN

Stack Overflow用户

发布于 2015-04-04 10:21:06

法律规定,中国的公司不得出口地图数据,不得通过抵消来伪装外国公司。有关更多详细信息,请参阅https://help.openstreetmap.org/questions/37560/map-offset-in-china

从maps.google.com获得的坐标可能是错误的,而百度中的坐标可能是正确的。

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 21:42:56

百度地图API有一个服务,将谷歌地图坐标转换为百度地图坐标,但我认为它只对中国区域内的位置是准确的。其他地方还没开呢

看一下官方的演示

1

但请注意,在返回已转换的坐标之前,会有很大的延迟。

代码语言:javascript
复制
var x = 116.32715863448607;
var y = 39.990912172420714;
var ggPoint = new BMap.Point(x,y); // step 1 - create a Baidu map point from Google Maps coordinate


translateCallback = function (data){
  if(data.status === 0) {
    var marker = new BMap.Marker(data.points[0]);  // step 3 - u get the offset coordinate here
    bm.addOverlay(marker);
    bm.setCenter(data.points[0]);
  }
}

setTimeout(function(){
  var convertor = new BMap.Convertor();
  var pointArr = [];
  pointArr.push(ggPoint);
  convertor.translate(pointArr, 3, 5, translateCallback); // step 2 - pass the point as an array to the translate service
}, 1000);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29444803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档