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。

相关推荐
郝学胜-神的一滴4 小时前
Python中的鸭子类型:理解动态类型的力量
开发语言·python·程序人生·软件工程
2401_841495644 小时前
【计算机视觉】霍夫变换函数的参数调整
人工智能·python·算法·计算机视觉·霍夫变换·直线检测·调整策略
猫头虎4 小时前
如何解决 pip install -r requirements.txt extras 语法 ‘package[extra’ 缺少 ‘]’ 解析失败问题
开发语言·python·开源·beautifulsoup·virtualenv·pandas·pip
eqwaak05 小时前
动态图表导出与视频生成:精通Matplotlib Animation与FFmpeg
开发语言·python·ffmpeg·音视频·matplotlib
AndrewHZ5 小时前
【图像处理基石】GIS图像处理入门:4个核心算法与Python实现(附完整代码)
图像处理·python·算法·计算机视觉·gis·cv·地理信息系统
帮帮志6 小时前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
二王一个今7 小时前
Python打包成exe(windows)或者app(mac)
开发语言·python·macos
一勺菠萝丶7 小时前
Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
java·python·macos
C嘎嘎嵌入式开发11 小时前
(2)100天python从入门到拿捏
开发语言·python