Skip to content

行政区域查询,根据经纬度快速地查找特定的行政区域信息、省市区信息、中国省市区数据。Administrative region query: to quickly find specific administrative region information based on latitude and longitude provincial information urban China data

License

Notifications You must be signed in to change notification settings

wuwenrufeng/amap

Repository files navigation

🌐 amap 根据经纬度快速查询全国行政区域信息、省市区信息

行政区域查询,根据经纬度快速地查找特定的省市区、行政区域信息。 https://wuwenrufeng.github.io/amap/

Features

  • 免费,免费,免费
  • 打破官方请求量限制,一次生产,终生使用
  • 数据源可靠,数据源来自高德地图开放的HTTP接口
  • 手把手教你自建全国行政区域信息库
  • 手把手教你实现行政区域信息查询算法
  • 快速地查找特定的行政区域信息
  • APi接口调用

项目由来

官方服务有请求限制,又不想升级plus

配置环境

运行环境:需要运行在 python 3.7.4+

1. 安装依赖

git clone https://github.com/wuwenrufeng/amap.git

pip install -r requirements.txt

快速开始

1. 下载数据库文件cn_area.sql,并导入到mysql中

链接:https://pan.baidu.com/s/1zJZTccPjrY4RD_TgAUh84A 提取码:cmuv

2. 数据库访问配置

文件地址:amap/utils/settings.py

# mysql
MYSQL_PARAM = {
    'provider': 'mysql',
    'host': 'localhost',
    'port': 3306,
    'user': 'admin',
    'passwd': '123456',
    'db': 'cn_area'
}

3. 开启api查询服务

   python amapSearchApi.py

4. 开始查询

URL: http://127.0.0.1/search?point=117.195907,39.118327

使用手册

第一步:高德地图-初始化出各省级(有边界信息)、市级和区级的初始信息

   python amapInit.py

第二步:高德地图-补充市、区的边界信息 (ps: 高德不提供有关街道的边界顶点信息)

   python amapPopulate.py

第三步:计算出province, city, district表中的最大最小边界经纬度,并填充到数据库中

   python amapMaxMin.py

第四步:开启服务,查询给定坐标点所属的行政区域信息

   python amapSearchApi.py

点在区域内的判定算法

使用外包矩形+闭合路径包含算法

一级过滤:外包矩形算法

   def in_box(point, maxP, minP):
    """
    判断点是否在多边形的外包矩形中 
    point: 待判定的坐标点 
    maxP: 最大坐标点 
    minP: 最小坐标点 
    """
    return (minP.x <= point.x <= maxP.x) and (minP.y <= point.y <= maxP.y)

二级过滤:闭合路径包含算法

   def in_polyline(point, polyline):
    """
    根据经纬度,判断是否在区域内 
    point: 待判定的坐标点 
    polyline: 边界坐标
    """
    lats = []
    lngs = []
    for pol in polyline:
        lats.append(pol.x)
        lngs.append(pol.y)
    xc = np.array(lats)
    yc = np.array(lngs)
    xycrop=np.vstack((xc,yc)).T
    pth=Path(xycrop,closed=False)
    mask=pth.contains_points([[point.x,point.y]])
    if mask:
        return True
    return False

测试结果

测试环境:个人PC

1.查询耗时

2.查询准确率

PS: 准确率测试是使用区级center进行查询的,所得准确率应该是100%,丢失的准确率是因为官方将center标记错误了!
比如抚顺县的实际地理区域是不包含抚顺县的,但官方的center却标到了抚顺县。

😜

后续更新。。。

GPS坐标、mapbar坐标、baidu坐标转换成高德坐标

逆地址地理信息解析

交流 & 讨论

如果您对amap有任何疑问,欢迎添加作者微信(微信号:wuwenrufeng)来交流讨论。或者,您可以扫下方二维码给作者打赏去升级其他地图api套件或买一杯咖啡哈🥰。

About

行政区域查询,根据经纬度快速地查找特定的行政区域信息、省市区信息、中国省市区数据。Administrative region query: to quickly find specific administrative region information based on latitude and longitude provincial information urban China data

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages