一、获取离线数据:
如果你只是想实现逆解析功能,那该步骤可以跳过,因为地图数据已经收集打包好了。直接文末找git路径就好了。
准备工作:python numpy h5py openpyxl cython
申请高德key,参考:https://blog.csdn.net/qq_32444825/article/details/79441900
key 填入 getRegions.py amap_key变量中
import h5py
import urllib
import numpy as np
import json
import openpyxl
amap_key = '' #填入这里
class CgetRegionsXls():
运行getRegions.py ,需要一段时间,可以生成离线地图数据,大约120M
二、离线逆解析经纬度信息:
使用射线法判断,参考https://blog.csdn.net/qq_27161673/article/details/52973866
核心算法并不复杂,主要做了两重优化:
1、先用每个区域的经纬度上下限进行粗筛,
2、使用cython对算法进行加速,如果采用python计算,光省级边界判断需要10s以上
在 isInPolygen目录下,执行python setup.py build_ext --inplace 命令即可
3、回到maps目录,运行 posToCity.py验证逆解析效果 实测解析速度
[root@centos-7 map]# time python posToCity.py
{'county': u'\u5357\u5eb7\u533a', 'prov': u'\u6c5f\u897f\u7701', 'city': u'\u8d63\u5dde\u5e02'} # 江西省 赣州市 南康区
{'county': u'\u4e91\u5ca9\u533a', 'prov': u'\u8d35\u5dde\u7701', 'city': u'\u8d35\u9633\u5e02'} # 贵州省 贵阳市 云岩区
{'county': u'\u6e05\u9547\u5e02', 'prov': u'\u8d35\u5dde\u7701', 'city': u'\u8d35\u9633\u5e02'} # 贵州省 贵阳市 清镇市
{'county': u'\u897f\u79c0\u533a', 'prov': u'\u8d35\u5dde\u7701', 'city': u'\u5b89\u987a\u5e02'} # 贵州省 安顺市 西秀区
{'county': u'\u897f\u79c0\u533a', 'prov': u'\u8d35\u5dde\u7701', 'city': u'\u5b89\u987a\u5e02'} # 贵州省 安顺市 西秀区
{'county': u'\u9ed4\u897f\u5e02', 'prov': u'\u8d35\u5dde\u7701', 'city': u'\u6bd5\u8282\u5e02'} # 贵州省 毕节市 黔西市
real 0m0.526s
user 0m0.508s
sys 0m0.087s
4.应用方法
from posToCity import CposToCity
p = CposToCity('regions.h5')
print p.toCity(106.668744, 26.567335)
……
git链接 https://gitee.com/chuyansz/gps2city/tree/master