RT,同样的经纬度,显示位置有偏差,为什么?
请问显示位置的偏差是只出现在经度方向?纬度方向?还是完全偏离?可否提供一下截图?
另外,mapbox的地图(俯视状态下)需要提供地图中心点的经纬度和zoom level,不确定百度地图和mapbox指定地图显示区域的API是否类似。
Long story short, it is because different latlng system.
Almost all latlng outside of China is using WGS84 coords system, but in China due to regulations, they are all applied with non-linear transformation into GCJ02 system, and on top of that, baidu has its own BD09 system.
@esrever001 Thanks for the insight. I just check the Baidu map API, http://developer.baidu.com/map/reference/, and it uses a similar API (centerAndZoom) as Mapbox. So I guess it is due to the coords system, will add BD09 & GCJ02 support into roadmap discussion.
@gnavvy 百度地图的缩放级别和deckgl的缩放级别不能对应,我只是手动调试成相近大小。。
@esrever001 我也看到类似的文章说不仅仅坐标体系不一样,哪怕同样是墨卡托投影,投影参数不一样,位置也会有区别,那这样的话,国内哪个地图跟mapbox是一样的,可以代替mapbox的?
@zhangzn3 高德地图, 腾讯地图, 天地图墨卡托版都是用的墨卡托投影 (EPSG:3857), 应该都能用在deck.gl上
@fuzhenn 多谢,我试试高德看看
@gnavvy deckgl的zoom怎么设置成跟其他的地图zoom一样? 怎么换算的?
我之前测试时, mapbox-gl(deckgl)的zoom比一般的3857 zoom要小1级
比如15级时, mapbox-gl是14级
@fuzhenn 多谢 高德地图跟mapbox对比截图
同样的经纬度,我把高德的zoom缩小一级,显示还是稍微有点差距,可以接受,可能zoom还需要调吧
注:上面的是高德,下面的是mapbox
这是因为高德地图的坐标系和mapbox不同, 高德用的是gcj02(火星坐标), mapbox是真实经纬度.
总结一下:
可以试试把有偏差的坐标做一下转化(从真实经纬度转成火星坐标),应该就能准确叠加了. 转化算法可以搜github.
顺便提一下, 天地图用的坐标系是cgcs2000坐标, 和真实经纬度基本没有偏差, 和mapbox应该能准确叠加 (天朝的地图服务搞的真复杂.. 😂 )
多谢 @esrever001 @fuzhenn
@zhangzn3 WGS84转GCJ02参考前面那个简书的链接
@fuzhenn @shaojingli 有个困惑请教下啊 #deckgl-overlay这个层是怎么触发地图层的onChangeViewport事件的啊? 我看dom结构 deckgl-overlay层完全覆盖了地图层了啊?
About support for non-Web Mercator projections:
projectionMode: COORDINATE_SYSTEM.MERCATOR_WORLD) where layers would accept pre-projected web-mercator world coordinates (tile 0 coordinates) as positions.@zhangzn3 当deckgl和basemap一起使用的时候,我们通过react-map-gl的MapGL component控制地图的viewport和触发onChangeViewport
Most helpful comment
这是因为高德地图的坐标系和mapbox不同, 高德用的是gcj02(火星坐标), mapbox是真实经纬度.
总结一下:
可以试试把有偏差的坐标做一下转化(从真实经纬度转成火星坐标),应该就能准确叠加了. 转化算法可以搜github.
顺便提一下, 天地图用的坐标系是cgcs2000坐标, 和真实经纬度基本没有偏差, 和mapbox应该能准确叠加 (天朝的地图服务搞的真复杂.. 😂 )