如何爬取ArcGIS地图多边形并转为可导入Google Maps的格式?
获取ArcGIS图层多边形数据及格式转换方案
一、先定位目标图层的REST API地址
打开目标网页,按F12调出开发者工具,切换到「网络」面板,过滤FeatureServer或query关键词的请求,找到“rencana detail tata ruang”对应的图层服务地址,格式一般是https://xxx/arcgis/rest/services/xxx/FeatureServer/[图层ID]。
二、构造正确的API请求参数(避开PBF格式)
直接在请求里指定返回格式为JSON或GeoJSON,不用碰PBF。关键参数设置:
where: 填1=1即可获取所有要素outFields: 填*获取全部字段f: 设为json或geojson,直接拿到结构化数据returnGeometry: 设为true才能获取多边形几何信息resultOffset和resultRecordCount: 处理分页(大部分ArcGIS服务默认一次最多返回1000条)
Python示例代码:
import requests import json # 替换成你找到的图层query接口地址 layer_query_url = "https://xxx/arcgis/rest/services/xxx/FeatureServer/0/query" params = { "where": "1=1", "outFields": "*", "f": "geojson", "returnGeometry": "true", "resultOffset": 0, "resultRecordCount": 1000 } all_features = [] while True: res = requests.get(layer_query_url, params=params) geojson_data = res.json() if not geojson_data["features"]: break all_features.extend(geojson_data["features"]) params["resultOffset"] += params["resultRecordCount"] # 保存为GeoJSON文件 with open("rencana_detail_tata_ruang.geojson", "w", encoding="utf-8") as f: json.dump({"type": "FeatureCollection", "features": all_features}, f, ensure_ascii=False)
三、如果必须处理PBF格式数据
如果服务强制返回PBF,用protobuf和pyshp库解析转换:
- 先安装依赖:
pip install protobuf pyshp - 从ArcGIS官方文档下载对应的PBF proto定义文件,用
protoc编译成Python类 - 解析转换代码示例:
import requests import shapefile # 替换成你编译后的PBF解析类 from arcgis_pbf import FeatureCollection pbf_url = layer_query_url params = {"where": "1=1", "outFields": "*", "f": "pbf", "returnGeometry": "true"} res = requests.get(pbf_url, params=params) pbf_content = res.content # 解析PBF数据 feature_collection = FeatureCollection.FromString(pbf_content) # 写入Shapefile writer = shapefile.Writer("rencana_detail_tata_ruang.shp") # 添加字段(根据图层实际字段调整) for field in feature_collection.fields: writer.field(field.name, field.type) # 逐个写入要素 for feat in feature_collection.features: # 解析多边形几何 rings = [ring.points for ring in feat.geometry.polygon.rings] writer.poly(rings) # 写入属性 writer.record(*[attr.value for attr in feat.attributes]) writer.close()
四、注意事项
- 部分服务需要token验证,检查请求头或参数里有没有
token字段需要补充 - 确认服务支持的返回格式,有些服务可能限制
f参数的可选值 - 分页时注意服务允许的最大
resultRecordCount,别设太大导致请求失败
内容的提问来源于stack exchange,提问作者Halim stack
相关产品推荐
相关产品推荐

