回覆列表
  • 1 # 徽常完美1

    將arcgispro的.aprx專案包中gdb的資料來源路徑更換為sde資料來源路徑。

    演示過程:

    方式一:指令碼中指定好相關引數設定

    import arcpy

    import json

    import sys

    import os

    import argparse

    import re

    result = ""

    jsontext = {"success": {}, "msg": ""}

    def checkSavedAprxDatasource(output_aprx_path, mapName, targetDb):

    check_result = True

    desc = arcpy.Describe(targetDb)

    saved_aprx = arcpy.mp.ArcGISProject(output_aprx_path)

    for saved_map in saved_aprx.listMaps():

    if saved_map.name == mapName:

    for lyr in saved_map.listLayers():

    if lyr.isFeatureLayer:

    # print(lyr.connectionProperties)

    if lyr.connectionProperties["workspace_factory"].upper() == "SDE".upper(

    ) and lyr.connectionProperties["connection_info"]["instance"] == desc.connectionProperties.instance:

    pass

    else:

    check_result = False

    return check_result

    if __name__ == "__main__":

    try:

    # linux

    # aprxPath = str(sys.argv[1])

    # mapName = str(sys.argv[2])

    # sourceDb = str(sys.argv[3])

    # targetDb = str(sys.argv[4])

    # output_aprx_path = str(sys.argv[5])

    # local pc

    aprxPath = r"D:\rvt\testaprx\testaprx.aprx"

    mapName = "Map"

    sourceDb = r"D:\rvt\testaprx\Data.gdb"

    targetDb = r"D:\rvt\testaprx\testsde.sde"

    output_aprx_path = r"D:\rvt\testaprx\output\export5.aprx"

    aprx = arcpy.mp.ArcGISProject(aprxPath)

    for m in aprx.listMaps():

    if m.name == mapName:

    m.updateConnectionProperties(sourceDb, targetDb)

    if os.path.exists(output_aprx_path):

    os.remove(output_aprx_path)

    aprx.saveACopy(output_aprx_path)

    checkResult = checkSavedAprxDatasource(

    output_aprx_path, mapName, targetDb)

    if checkResult:

    jsontext["success"] = True

    result = json.dumps(jsontext)

    sys.stdout.write(result)

    else:

    jsontext["success"] = False

    jsontext["msg"] = "Failed to replace data source"

    result = json.dumps(jsontext)

    sys.stdout.write(result)

    except Exception as e:

    jsontext["success"] = False

    jsontext["msg"] = e.args

    result = json.dumps(jsontext)

    sys.stdout.write(result)

    方式二:使用sys.argv[ ]的形式設定相關引數

    (arcgispro-py3) D:\rvt\testaprx>python test.py D:\rvt\testaprx\testaprx.aprx Map D:\rvt\testaprx\Data.gdb D:\rvt\testaprx\testsde.sde D:\rvt\testaprx\output\export5.aprx

    import arcpy

    import json

    import sys

    import os

    import argparse

    import re

    result = ""

    jsontext = {"success": {}, "msg": ""}

    def checkSavedAprxDatasource(output_aprx_path, mapName, targetDb):

    check_result = True

    desc = arcpy.Describe(targetDb)

    saved_aprx = arcpy.mp.ArcGISProject(output_aprx_path)

    for saved_map in saved_aprx.listMaps():

    if saved_map.name == mapName:

    for lyr in saved_map.listLayers():

    if lyr.isFeatureLayer:

    # print(lyr.connectionProperties)

    if lyr.connectionProperties["workspace_factory"].upper() == "SDE".upper(

    ) and lyr.connectionProperties["connection_info"]["instance"] == desc.connectionProperties.instance:

    pass

    else:

    check_result = False

    return check_result

    if __name__ == "__main__":

    try:

    # linux

    aprxPath = str(sys.argv[1])

    mapName = str(sys.argv[2])

    sourceDb = str(sys.argv[3])

    targetDb = str(sys.argv[4])

    output_aprx_path = str(sys.argv[5])

    print("aprx路徑: "+aprxPath)

    print("地圖檢視的名稱: "+mapName)

    print("當前的資料來源路徑: "+sourceDb)

    print("目標資料來源路徑: "+targetDb)

    print("aprx另存為路徑: "+output_aprx_path)

    # local pc

    # aprxPath = r"D:\rvt\testaprx\testaprx.aprx"

    # mapName = "Map"

    # sourceDb = r"D:\rvt\testaprx\Data.gdb"

    # targetDb = r"D:\rvt\testaprx\testsde.sde"

    # output_aprx_path = r"D:\rvt\testaprx\output\export5.aprx"

    aprx = arcpy.mp.ArcGISProject(aprxPath)

    for m in aprx.listMaps():

    if m.name == mapName:

    m.updateConnectionProperties(sourceDb, targetDb)

    if os.path.exists(output_aprx_path):

    os.remove(output_aprx_path)

    aprx.saveACopy(output_aprx_path)

    checkResult = checkSavedAprxDatasource(

    output_aprx_path, mapName, targetDb)

    if checkResult:

    jsontext["success"] = True

    result = json.dumps(jsontext)

    sys.stdout.write(result)

    else:

    jsontext["success"] = False

    jsontext["msg"] = "Failed to replace data source"

    result = json.dumps(jsontext)

    sys.stdout.write(result)

    except Exception as e:

    jsontext["success"] = False

    jsontext["msg"] = e.args

    result = json.dumps(jsontext)

    sys.stdout.write(result)

  • 中秋節和大豐收的關聯?
  • 哪個寄宿考研學校的條件好一些?