在整高德导航的快捷指令时遇到的问题

2021-03-25 06:03:25 +08:00
 gavindexu

翻了挺多教程,都是给下面的 url,通过快捷指令,来直接实现目的地的导航。

iosamap://navi?sourceApplication=applicationName&poiname=fangheng&poiid=BGVIS&lat=36.547901&lon=104.258354&dev=1&style=2

但我从高德拾取的经纬度直接套回去,却出现了位置的偏移。

(拾取经纬度 https://lbs.amap.com/console/show/picker

◡ ヽ(`Д´)ノ ┻━┻ 自己一点一点改了若干位的小数点,最后试到了想要的接近位置。

但刚刚突然睡醒的我,在想为啥偷懒没看每个参数是干什么的……

就去看了下开发指南,发现 dev 指示了“国测加密”。

(开发指南: https://developer.amap.com/api/amap-mobile/guide/ios/navi

把 1 改为 0 后,通过拾取器获得的经纬度就不会出现那个“偏移”。

╭(°A°`)╮ 可为啥经历了这一步偏移……? 使用谷歌或 CarPlay 的时候,偏移会不会也是受了这个影响?

1816 次点击
所在节点    iOS
8 条回复
wd
2021-03-25 06:10:08 +08:00
因为坐标其实有几个标准,可以搜搜火星坐标系..
gavindexu
2021-03-25 06:14:01 +08:00
@wd #1 有搜到这个坐标系。
但在高德拾取的坐标,用来导航的时候还配置国测加密为 1,那是不是经过了 2 次偏移?
imtyz001
2021-03-25 09:22:22 +08:00
@gavindexu 我感觉是这样的:
设某地 WGS84 坐标(x,y) GCJ02 坐标为(x1,y1)
通过高的拾取的坐标应该已经是 GCJ02 坐标了(即(x1,y1))
所以传入参数的时候应该是(x1,y1,dev=1)
iPhone 指南针上的经纬度应该是 WGS84, 可以测试一下用这个坐标搭配 dev=0
imtyz001
2021-03-25 09:27:56 +08:00
#3 最后两行说反了, dev=0:lat 和 lon 是已经加密后的,不需要国测加密; dev=1:需要国测加密
所以传入参数的时候应该是(x1,y1,dev=0)
iPhone 指南针上的经纬度应该是 WGS84, 可以测试一下用这个坐标搭配 dev=1
imtyz001
2021-03-25 09:30:09 +08:00
@gavindexu #2
所以应该如你所说 确实是经过了两次偏移
gavindexu
2021-03-25 09:52:39 +08:00
@imtyz001 #5
刚刚有看开发手册,最后更新时间: 2020 年 12 月 15 日
(・_・; 不知道会不会有高德的大佬看到
如果这个属实的话,可以更新下手册里的示例
imtyz001
2021-03-25 10:00:34 +08:00
我自己测试了一下
iPhone 指南针上显示的 WGS84 经纬度(x,y)搭配参数 dev=1
和(x,y)通过转换工具( https://tool.lu/coordinate/) 后生成的 GCJ02 经纬度(x1,y1)搭配参数 dev=0
导航效果是一样的
imtyz001
2021-03-25 10:03:59 +08:00
我感觉这个手册的示例没什么大问题 因为 iOS 上通过 CLLocationCoordinate2D( https://developer.apple.com/documentation/corelocation/cllocationcoordinate2d)获取定位信息时,获取的经纬度坐标系是 WGS84 地球坐标

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764837

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX