from osgeo import ogr, gdal import os import argparse def shp_to_geojson(shp_path, geojson_path): # 设置编码选项 gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES") gdal.SetConfigOption("SHAPE_ENCODING", "GBK") # 打开Shapefile src_ds = ogr.Open(shp_path) src_layer = src_ds.GetLayer(0) # 创建输出GeoJSON driver = ogr.GetDriverByName('GeoJSON') if os.path.exists(geojson_path): driver.DeleteDataSource(geojson_path) dst_ds = driver.CreateDataSource(geojson_path) dst_layer = dst_ds.CreateLayer('output', src_layer.GetSpatialRef()) # 复制字段定义 dst_layer.CreateFields(src_layer.schema) # 复制要素 for feature in src_layer: dst_feature = ogr.Feature(dst_layer.GetLayerDefn()) dst_feature.SetGeometry(feature.GetGeometryRef()) for j in range(feature.GetFieldCount()): dst_feature.SetField(j, feature.GetField(j)) dst_layer.CreateFeature(dst_feature) # 清理 dst_ds = None src_ds = None print("转换完成") def getParams(): parser = argparse.ArgumentParser() parser.add_argument('-i','--infile',default=r'F:\天仪SAR卫星数据集\德清院-测试-天仪提供数据\bc2-sp-org-vv-20250210t160723-022200-000120-0056b8-01_石佳宁.shp', help='输入shapefile文件') parser.add_argument('-o', '--outfile',default=r'F:\天仪SAR卫星数据集\德清院-测试-天仪提供数据\bc2-sp-org-vv-20250210t160723-022200-000120-0056b8-01_石佳宁.json', help='输出geojson文件') args = parser.parse_args() return args if __name__ == '__main__': parser = getParams() inFilePath=parser.infile outpath=parser.outfile print('infile=',inFilePath) print('outfile=',outpath) shp_to_geojson(inFilePath, outpath)