You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何爬取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库解析转换:

  1. 先安装依赖:pip install protobuf pyshp
  2. 从ArcGIS官方文档下载对应的PBF proto定义文件,用protoc编译成Python类
  3. 解析转换代码示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:10:48