admin管理员组

文章数量:1565807

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 = sys.argv[1]
    dwg_file = r'D:\file\production\Py\data\dwg\testdwg.dwg'
    sr = arcpy.SpatialReference(4326)
    dwg2geojson(dwg_file, tmp_path, sr)

output

本文标签: 格式数据软件Arcpycad