用来将微软/GlobalMLBuildingFootprints数据集转换为shp面文件。
import os
import pandas as pd
import geopandas as gpd
from pathlib import Path
from shapely.geometry import shape
import json
def convert_geojsonl_to_shp(input_folder, output_folder):
# 创建输出文件夹
Path(output_folder).mkdir(parents=True, exist_ok=True)
# 获取输入文件夹中所有的 GeoJSONL 文件
geojsonl_files = [f for f in os.listdir(input_folder) if f.endswith('.geojsonl')]
for geojsonl_file in geojsonl_files:
input_path = os.path.join(input_folder, geojsonl_file)
output_name = os.path.splitext(geojsonl_file)[0] # 移除扩展名
output_path = os.path.join(output_folder, f"{output_name}.shp")
# 使用 pandas 读取 GeoJSONL 文件并构建 GeoDataFrame
data = []
with open(input_path, 'r', encoding='utf-8') as file:
for line in file:
geojson = json.loads(line)
geometry = shape(geojson['geometry'])
properties = geojson.get('properties', {})
data.append({'geometry': geometry, **properties})
# 转换为 GeoDataFrame 并设置坐标系统
gdf = gpd.GeoDataFrame(data, crs="EPSG:4326") # 在创建 GeoDataFrame 时设置 CRS
# 将数据保存为 Shapefile
gdf.to_file(output_path, driver='ESRI Shapefile')
print(f"转换成功:{geojsonl_file} -> {output_name}.shp")
# 使用示例
input_folder = 'C:/Users/.../python/geojsonToshp/geo' # 替换为包含 GeoJSONL 文件的文件夹路径
output_folder = 'C:/Users/.../python/geojsonToshp/shp' # 替换为输出 Shapefile 的文件夹路径
convert_geojsonl_to_shp(input_folder, output_folder)
结果在arcmap中打开的效果如下图