Arcpy读取CAD软件dwg、dxf等格式数据,转换geojson
code
import os
import sys
import uuid
import arcpy
def getScriptDirectory():
script_path = os.path.abspath(__file__)
script_directory = os.path.dirname(script_path)
script_directory = script_directory.replace('\\', '/')
c= script_directory[-1]
if script_directory[-1] != '/':
script_directory += '/'
return script_directory
def checkDir(dir):
if not os.path.exists(dir):
os.makedirs(dir)
ws = getScriptDirectory()
uid = str(uuid.uuid4())
tmp_path = ws + 'tmp/' + uid + '/'
checkDir(tmp_path)
out_gdb_name = 'out.gdb'
out_gdb_path = tmp_path + out_gdb_name
def dwg2gdb(input_dwg_file, out_gdb_path, spatial_reference):
arcpy.CreateFileGDB_management(tmp_path, out_gdb_name)
ds = arcpy.conversion.CADToGeodatabase(input_dwg_file, out_gdb_path, 'out_ds', 1000, spatial_reference)
return str(ds).replace('\\', '/')
def filter_layer(dataset, out_gdb):
polygon_classes = dataset + '/Polygon'
f1 = 'Layer = \'拆迁房屋\''
f2 = 'Layer = \'临迁房屋\''
f3 = 'Layer = \'临时借地\''
f4 = 'Layer = \'永久征地\''
out_f1 = 'chai_qian_fang_wu'
out_f2 = 'lin_qian_fang_wu'
out_f3 = 'lin_shi_jie_di'
out_f4 = 'yong_jiu_zheng_di'
arcpy.conversion.FeatureClassToFeatureClass(polygon_classes, out_gdb, out_f1, f1)
arcpy.conversion.FeatureClassToFeatureClass(polygon_classes, out_gdb, out_f2, f2)
arcpy.conversion.FeatureClassToFeatureClass(polygon_classes, out_gdb, out_f3, f3)
arcpy.conversion.FeatureClassToFeatureClass(polygon_classes, out_gdb, out_f4, f4)
out_classes = [
out_gdb + '/' + out_f1,
out_gdb + '/' + out_f2,
out_gdb + '/' + out_f3,
out_gdb + '/' + out_f4,
]
return out_classes
def dwg2geojson(input_dwg_file, out_path, dwg_sr):
ds = dwg2gdb(input_dwg_file, out_gdb_path, dwg_sr)
out_classes = filter_layer(ds, out_gdb_path)
checkDir(out_path)
all_success = True
for fc in out_classes:
fc_name = os.path.basename(fc)
out_json_file = out_path + fc_name + '.geojson'
try:
arcpy.conversion.FeaturesToJSON(fc, out_json_file, 'FORMATTED', 'NO_Z_VALUES', 'NO_M_VALUES', 'GEOJSON', 'KEEP_INPUT_SR', 'USE_FIELD_NAME')
print(out_json_file)
except Exception as ex:
all_success = False
print('fail:' + str(ex))
if all_success:
print('complete')
else:
print('error')
if __name__ == "__main__":
dwg_file = r'D:\file\production\Py\data\dwg\testdwg.dwg'
sr = arcpy.SpatialReference(4326)
dwg2geojson(dwg_file, tmp_path, sr)
output
![image-20240409112203457](https://i-blog.csdnimg.cn/blog_migrate/59c04b6c8f54e6a97b07491062472480.png)