1. 为什么需要城市编码与经纬度数据库?
在实际开发中,地理信息数据是很多项目的基础需求。比如做物流路径规划时,需要知道各个城市的精确位置;开发天气预报应用时,需要匹配城市编码;做商业分析时,可能需要按地域统计销售数据。这些场景都离不开一个准确、完整的城市编码与经纬度数据库。
我去年做过一个全国连锁店的选址分析系统,就深刻体会到这类数据的重要性。当时试过几个公开数据集,要么城市编码不统一,要么经纬度偏差太大,导致分析结果完全不可用。最后不得不自己动手,用高德API重新构建了一套数据库。
高德地图的Web服务API提供了非常完善的地理编码服务,数据更新及时且准确度高。通过它的地理编码接口,我们可以获取到标准化的城市编码、规范的行政区划名称,以及高精度的经纬度坐标。这些数据经过适当处理后,就能成为项目中的基础数据资产。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高德API准备与配置
2.1 申请开发者密钥
使用高德API的第一步是申请Key。打开高德开放平台官网,注册开发者账号后,进入"控制台"-"应用管理"创建新应用。选择"Web服务"类型,提交后就能获取到API Key。
这里有个小技巧:建议同时申请多个Key(个人开发者最多可以申请5个),因为高德API有每日调用限额。如果数据量很大,可以轮换使用多个Key来提高采集效率。
2.2 了解地理编码API
高德的地理编码API主要有两个接口特别有用:
- 地理编码:把文字地址转换成经纬度
- 逆地理编码:把经纬度转换成文字地址
我们主要使用地理编码接口,它的基本请求格式如下:
python复制https://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区&output=JSON&key=你的Key
返回的数据包含省市区三级行政区划信息、城市编码、经纬度等关键数据。一个典型的响应如下:
json复制{
"status": "1",
"info": "OK",
"count": "1",
"geocodes": [
{
"formatted_address": "北京市朝阳区",
"country": "中国",
"province": "北京市",
"citycode": "010",
"city": "北京市",
"district": "朝阳区",
"location": "116.486409,39.921489",
"level": "区县"
}
]
}
2.3 设置开发环境
建议使用Python 3.7+版本,主要需要以下几个库:
python复制import requests # 调用API
import pandas as pd # 数据处理
import sqlite3 # 数据库存储
import time # 控制请求频率
可以用pip一键安装:
bash复制pip install requests pandas
3. 数据采集实战
3.1 构建城市列表
首先需要准备要查询的城市列表。高德API支持到区县级别的查询,我们可以分几个层次采集:
- 省级行政区(23个省、5个自治区、4个直辖市、2个特别行政区)
- 地级市(约330个)
- 市辖区、县级市(约3000个)
我建议先从省级开始,逐步细化。这里提供一个简单的省级列表:
python复制provinces = [
"北京市", "天津市", "河北省", "山西省", "内蒙古自治区",
"辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省",
"浙江省", "安徽省", "福建省", "江西省", "山东省",
"河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区",
"海南省", "重庆市", "四川省", "贵州省", "云南省",
"西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区",
"新疆维吾尔自治区", "台湾省", "香港特别行政区", "澳门特别行政区"
]
3.2 编写采集脚本
下面是核心的采集函数,它会处理单个城市的查询:
python复制def get_geo_info(address, api_key):
base_url = "https://restapi.amap.com/v3/geocode/geo"
params = {
"address": address,
"output": "json",
"key": api_key
}
try:
response = requests.get(base_url, params=params)
data = response.json()
if data
