友友们, 遇到一个问题, 系统需要根据一串客户地址来获取经纬度, 偏差不能太大
例如: 输入 北京市密云区十里堡镇十里堡村富民路 20 号, 系统需要解析这串地址, 然后输出对应的经纬度
输入的地址不一定是什么样子, 有可能是 青岛市市南区 xx 大厦放门口快递柜, 青岛市市北区 xx 小区尾号 xxxx 等等.
目前我使用的方案是:
1 先调用阿里云的快递地址解析接口, 尝试解析出标准地址结构 2 拼接解析出的地址结构调用百度地图的 POI 搜索接口 3 获取搜索到的第一个 POI, 获取该 POI 的经纬度
但是目前来看, 许多地址的准确度还是堪忧, 有人能出出招吗?
PS: 不能输出多个地址让用户手动选, 因为做的是批量导入解析
1
concernedz 39 天前
|
2
zhuang0718 39 天前 via iPhone
精准度取决于 1⃣️调用接口匹配结果精度,2⃣️不同接口返回的经纬度不一定是一个坐标系,需要对结果在批量进行坐标转换(转换成你最终要用的坐标系)
|
3
davin 39 天前
百度和高德地图都提供地理编码 API 服务,可以试试他们的结构化地址与经纬度之间相互转换功能。
对于输入地址,可以先提前过滤一遍,比如去掉“放门口快递柜”和“尾号 xxxxx”这种。然后多家 API 交叉比对,提高地址判断的准确性。 最后,可以转换下思路: 1. 看看国内几达几通、顺风或者京东有没有提供快递地址相关的 API ,说不定比客户自己输入的地址更加准确。 2. 优化地址输入方式,和地图 API 进行关联,输入关键字时,同时给出下拉列表让用户自己选取。 |
4
perbugwei 39 天前
高德和百度的坐标系不是一个,要看你要用到哪里。而且我试过百度和高德的,不一定能获取到你想要的,因为原始的地址数据都不准确。最后的最后解决办法就是人工校验。
|
5
635925926 39 天前
逆地理编码不需要格式化
|
6
PositionZero 39 天前 via Android
不需要用 POI 搜索,直接用地理编码
|
7
liplushe 39 天前
你需要了解一些 GIS 坐标系统的知识,标准的经纬度坐标系统包括 WGS84/CGCS2000 ,但是由于合规性要求的存在,互联网地图都对准确坐标做了非线性加密,这个坐标系统叫做 GCJ02 (国测局 02 坐标系,又叫火星坐标系),目前高德地图和腾讯地图用的都是 GCJ02 ,而百度地图在 GCJ02 基础上又做了一次非线性加密,因此你通过不同地理编码服务得到的经纬度坐标是不同的。
|
8
kgloveyou 39 天前
百度地图 API 返回的火星坐标系,是有偏移的,这是地图合规的要求
|