简单获取geojson格式的方法:
1.arcmap10.6版本及以上,矢量数据可以直接导出标准的geojson格式数据;
2.arcgispro右键要素可以知道导出为标准的geojson格式数据;
3.发布 Feature Service 后,浏览器直接访问:
https://<server>/arcgis/rest/services/<name>/FeatureServer/0/query
?where=1=1
&outFields=*
&f=geojson
返回即是 标准 GeoJSON ,可 wget
或 axios
拉取。
如果是arcmap10.6版本以下怎么办?矢量数据不能直接导出标准的geojson格式数据,方法如下:
1.先导出为Esri FeatureSet JSON 格式,导出方法如下图所示:

这时候你会得到一个.json文件,把.json文件放到一个文件夹里面命名为'raw',如果是多个也可以直接放到该文件夹下面,最后使用python进行数据转换,python代码如下:
python
#!/usr/bin/env python3
"""
esri2geojson.py
批量把 Esri FeatureSet JSON 转成标准 GeoJSON
用法:
python esri2geojson.py -i 原始文件夹 -o 输出文件夹
示例:
python esri2geojson.py -i raw -o geojson
"""
import json, pathlib, argparse, sys
def esri_featureset_to_geojson(esri: dict) -> dict:
"""将单个 Esri FeatureSet 转换为 GeoJSON FeatureCollection
Args:
esri (dict): 包含 Esri FeatureSet 数据的字典
Returns:
dict: 符合 GeoJSON 标准的 FeatureCollection 字典
"""
# 构造 GeoJSON FeatureCollection 结构
return {
"type": "FeatureCollection", # GeoJSON 类型标识
"features": [ # 要素集合
{
"type": "Feature", # 单个要素类型标识
"geometry": { # 几何信息
"type": "Polygon", # 几何类型,这里固定为多边形
"coordinates": f["geometry"]["rings"] # 从 Esri 数据中提取坐标环
},
"properties": f["attributes"] # 从 Esri 数据中提取属性信息
}
# 遍历所有要素进行转换
for f in esri.get("features", [])
]
}
def convert_file(src: pathlib.Path, dst: pathlib.Path):
"""转换单个文件从 Esri FeatureSet 格式到 GeoJSON 格式
Args:
src (pathlib.Path): 源文件路径(Esri FeatureSet JSON)
dst (pathlib.Path): 目标文件路径(GeoJSON)
"""
try:
# 以 UTF-8 编码打开源文件
with src.open(encoding="utf-8") as f:
esri = json.load(f) # 加载 Esri JSON 数据
# 调用转换函数将 Esri 数据转换为 GeoJSON 格式
geojson = esri_featureset_to_geojson(esri)
# 确保目标文件的父目录存在,如果不存在则创建
dst.parent.mkdir(parents=True, exist_ok=True)
# 以 UTF-8 编码写入目标文件
with dst.open("w", encoding="utf-8") as f:
# 将 GeoJSON 数据以格式化方式写入文件
json.dump(geojson, f, ensure_ascii=False, indent=2)
# 打印成功信息
print(f"✅ 已转换:{src.name} -> {dst}")
except Exception as e:
# 捕获并打印错误信息
print(f"❌ 失败:{src.name} {e}", file=sys.stderr)
def main():
"""主函数,处理命令行参数并执行批量转换"""
# 创建命令行参数解析器
parser = argparse.ArgumentParser(description="批量 Esri FeatureSet -> GeoJSON")
# 添加必需的输入目录参数
parser.add_argument("-i", "--input", required=True, help="输入文件夹")
# 添加必需的输出目录参数
parser.add_argument("-o", "--output", required=True, help="输出文件夹")
# 解析命令行参数
args = parser.parse_args()
# 获取并解析输入和输出目录路径
in_dir = pathlib.Path(args.input).expanduser().resolve()
out_dir = pathlib.Path(args.output).expanduser().resolve()
# 检查输入路径是否为有效目录
if not in_dir.is_dir():
sys.exit("输入路径不是文件夹")
# 查找输入目录下所有 JSON 文件
json_files = list(in_dir.glob("*.json"))
# 如果没有找到 JSON 文件则退出
if not json_files:
sys.exit("目录下未找到 *.json 文件")
# 遍历所有 JSON 文件并进行转换
for json_file in json_files:
# 构造目标文件路径,保持相同文件名但扩展名改为 .geojson
geo_file = out_dir / (json_file.stem + ".geojson")
# 调用单文件转换函数
convert_file(json_file, geo_file)
# 打印完成信息
print("全部完成!")
if __name__ == "__main__":
main()
python代码文件命名为'esri2geojson.py',和raw文件夹所在的文件夹放一起,假设都在'abc'文件夹下面,则直接在abc文件夹下面的地址栏输入cmd,输入如下命令:
python
python esri2geojson.py -i raw -ogeojson


其中raw是存放需要进行数据转换.json文件所在的文件夹,geojson是转换完成之后的数据文件夹,执行完之后会发现在abc文件夹下面多了一个子文件夹'geojson',里面存放的是转换之后对应的.geosjon数据。
注意:在cesium中加载的数据坐标系是wgs84的格式,所以在转换为geojson数据之前需确保原始矢量数据的坐标系已经转换为wgs84。