在地理信息系统(GIS)领域,获取准确的村级点位数据(包括社区)对于研究和应用非常重要。本文将介绍一种利用国家地名信息库API服务获取全国村级点位矢量数据的方法,并分析这种数据来源的可靠性。
村级点位矢量数据是GIS应用中常用的数据类型,涵盖了全国范围内的村庄、社区等基础地理单元。由于地理数据的获取通常受到法律和数据开放性的限制,找到一个公开且可靠的数据源是关键。就和之前这篇省市县的行政区范围一样→如何获取最权威的行政区划矢量数据
国家地名信息库提供了一个开放的API服务,用户可以通过该服务访问地名相关的公开数据。本文将介绍如何使用该服务获取全国村级点位矢量数据,包括社区点位数据。
数据来源:
国家地名信息库由民政部负责维护和更新,是地名信息的权威来源。其数据库涵盖全国的行政区划、地名、自然地理和人文地理信息,数据全面且及时更新。
数据公开性:
国家地名信息库提供了一个开放的API接口,允许开发者和研究人员访问地名信息。这种开放性使得数据获取更加便捷,同时也符合数据开放的政策。
数据质量:
由于数据来自国家权威机构,其准确性和权威性得到了保证。此外,该库使用了2000国家大地坐标系(CGCS2000),这使得数据在精度上有保障,适用于各种精细化的地理分析。
基于以上几点,可以认为国家地名信息库是一个可信的数据来源,其API接口为获取村级点位数据提供了便捷的途径。
为了获取村级点位矢量数据,包括社区数据,我们可以使用Python编程语言调用国家地名信息库的API。以下是具体的操作步骤:
准备工作:
首先,确保你已经安装了必要的Python库,例如requests和openpyxl,用于发送HTTP请求和处理Excel文件。
pip install openpyxl pandas
API服务功能:
国家地名信息库的API接口提供了多种功能,包括行政区划搜索、地名搜索、地名详情获取等。在这里,我们主要使用“地名搜索”接口来获取村级和社区点位数据。
示例代码:
以下是一个使用Python获取村级点位数据的示例代码:
import requests
import pandas as pd
from openpyxl import Workbook, load_workbook
# 地名搜索接口URL
url = "https://dmfw.mca.gov.cn/9095/stname/listPub"
# 初始化请求参数
params = {
"page": 1,
"size": 100, # 每页的记录数(仿佛最大就是100)
"code": "610404", # 行政区划代码可以是2、4、6位,分别对应省、市、县,我建议是一个一个县获取不然会非常非常慢,主要是摸不清这个api的响应机制
"stName": "委员会" # 查询名称包含“委员会”的地名(因为我发现村和社区后缀实际都包含委员会三个字)
}
# 初始化Excel文件
excel_filename = '地名信息.xlsx'
wb = Workbook()
ws = wb.active
ws.title = "地名信息"
ws.append(['类型', '名称', '坐标X', '坐标Y']) # 写入标题行
wb.save(excel_filename)
while True:
# 发送GET请求
response = requests.get(url, params=params)
# 检查响应状态
if response.status_code == 200:
try:
# 解析JSON数据
result = response.json()
records = result['records']
# 如果没有更多记录,则停止循环
if not records:
break
# 创建一个临时列表来存储当前页的数据
page_data = []
# 提取地名类型、名称和坐标
for record in records:
place_type = record.get('place_type')
standard_name = record.get('standard_name')
gdm = record.get('gdm')
# 过滤出类型为“社区”或“行政村”的记录
if place_type in ['社区', '行政村']:
# 解析GeoJSON坐标
if gdm and 'coordinates' in gdm:
coords = gdm['coordinates']
if isinstance(coords[0], list): # 检查是否是多维列表
x, y = coords[0][:2] # 只取第一个点的坐标
else:
x, y = coords[:2]
else:
x, y = None, None
# 添加数据到临时列表
page_data.append([place_type, standard_name, x, y])
# 将当前页的数据追加到Excel文件
if page_data:
wb = load_workbook(excel_filename)
ws = wb.active
for row in page_data:
ws.append(row)
wb.save(excel_filename)
# 增加页码以请求下一页
params["page"] += 1
except ValueError:
print("无法解析响应为JSON格式。响应内容:")
print(response.text)
break
else:
print(f"请求失败,状态码:{response.status_code}")
print("响应内容:", response.text)
break
print("所有数据已成功保存到'地名信息.xlsx'文件中。")
请求数据:代码通过GET请求获取地名信息。
解析数据:处理返回的JSON数据,提取地名类型(如“社区”或“行政村”)和地理坐标。
保存数据:将提取的结果保存到Excel文件中,方便后续使用和分析。
通过使用国家地名信息库的API服务,用户可以方便地获取全国范围内的村级和社区点位矢量数据。国家地名信息库的数据来源权威、开放性好,数据质量高,是一个可靠的数据获取途径。希望本文能帮助到有需要的读者有效获取村级点位数据,为各类地理信息分析和应用提供支持。如果需要写好的py文件可以在后台回复“村级点位”获取!