基于高德离线地图数据实现GPS经纬度逆解析城市信息

一、获取离线数据:
       如果你只是想实现逆解析功能,那该步骤可以跳过,因为地图数据已经收集打包好了。直接文末找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

 

 

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值