arcgis矢量数据转为标准geojson格式

简单获取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 ,可 wgetaxios 拉取。

如果是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。

相关推荐
007php0073 小时前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
景彡先生3 小时前
Python pandas数据透视表(pivot_table)详解:从入门到实战,多维数据分析利器
python·数据分析·pandas
Blossom.1184 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
爱喝水的小周4 小时前
《UniApp 页面配置文件pages.json》
前端·uni-app·json
极客数模5 小时前
2025年(第六届)“大湾区杯”粤港澳金融数学建模竞赛准备!严格遵循要求,拿下大奖!
大数据·python·数学建模·金融·分类·图论·boosting
倔强青铜三5 小时前
苦练Python第73天:玩转对象持久化,pickle模块极速入门
人工智能·python·面试
程序员三藏5 小时前
Postman持久化保存/设置断言详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
java1234_小锋5 小时前
PyTorch2 Python深度学习 - 卷积神经网络(CNN)介绍实例 - 使用MNIST识别手写数字示例
python·深度学习·cnn·pytorch2
雍凉明月夜5 小时前
人工智能学习中深度学习之python基础之迭代器、生成器、文件处理和模块等
python·深度学习·学习·pycharm