这是《地图时空大数据爬取》第6章的内容,这篇博客主要是抓取一下行政区划数据,最小是能抓到区县的行政区划数据。然后书里是用arcpy和arcgis再加上python一起来处理的,有些麻烦,我统一用python来处理了,改写了下代码,因为很简单,就不多说了,直接放代码。
import basics import geopandas as gpd import pandas as pd import numpy as np import matplotlib.pyplot as plt import json import urllib from urllib.parse import quote import string from shapely.geometry import Point from shapely.geometry import Polygon from shapely.geometry import LineString import pyproj
讯享网
讯享网# 功能:采集行政区域边界 # 返回保存边界信息的BoundryWithAttr对象 def getDistrictBoundry(ak,citycode): districtBoundryUrl = "http://restapi.amap.com/v3/config/district?key="+ak+"&keywords="+citycode+"&subdistrict=0&extensions=all" print(districtBoundryUrl) districtBoundryUrl = quote(districtBoundryUrl, safe=string.printable) json_obj = urllib.request.urlopen(districtBoundryUrl) # json_obj = response.read().decode('utf-8','ignore').replace(u'\xa9', u'') json_data=json.load(json_obj) districts=json_data['districts'] try: polyline = districts[0]['polyline'] centerLon=districts[0]['center'].split(',')[0] centerLat=districts[0]['center'].split(',')[1] except Exception as e: print("error!") pointscoords=polyline.split(';') point=basics.PointWithAttr(0,centerLon,centerLat,"行政区域",citycode) districtBoundry=basics.BoundryWithAttr(point,pointscoords) return districtBoundry
ak = "放上你的ak就行" citycodes={
'上城区':'','下城区':'','江干区':'',"拱墅区":'',"西湖区":'','滨江区':'', '萧山区':'','余杭区':'','富阳区':'','临安区':'','桐庐县':'','淳安县':'', '建德市':''} polygon_list = [] centerX_list = [] centerY_list = [] for citycode in citycodes.keys(): districtBoundry = getDistrictBoundry(ak,citycode) tmp = districtBoundry.boundrycoords for i in range(len(tmp)): tmp[i] = [float(tmp[i].split(',')[0]) , float(tmp[i].split(',')[1])] tmp = Polygon(tmp) polygon_list.append(tmp) centerX_list.append(districtBoundry.point.lon) centerY_list.append(districtBoundry.point.lat)
讯享网# 将爬取得到的杭州市行政区保存为shp文件 gdf = {
'geometry':polygon_list , 'centerLon':centerX_list , 'centerLat':centerY_list , 'name':citycodes.keys(),'adacode':citycodes.values()} gdf = gpd.GeoDataFrame(gdf , crs = None) gdf

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126359.html