ค้นหา Python script เพื่อสร้างไฟล์. mdd หรือไม่


11

ฉันใหม่สำหรับทั้ง ArcGIS และ Python ความต้องการของฉันคือการดำเนินการด้วยตนเองด้านล่างโดยอัตโนมัติ:

  1. การสร้างเลเยอร์ใน ArcGIS สำหรับเดสก์ท็อป หากต้องการใส่ไว้ในคำอื่นให้สร้างเอกสาร ArcMap (.mxd)
  2. เผยแพร่เอกสาร ArcMap ที่สร้างขึ้น (ในขั้นตอนที่ 1) เป็นบริการไปยัง ArcGIS Server

ขณะนี้เรากำลังดำเนินการด้วยตนเอง ฉันเจอสคริปต์เพื่อทำให้ขั้นตอนที่ 2 ใช้ Python โดยอัตโนมัติ

ฉันจะทำให้ขั้นตอนที่ 1 และขั้นตอนที่ 2 เป็นอัตโนมัติได้อย่างไร

คำตอบ:


16

นี่ไม่ใช่คำตอบแบบสแตนด์อโลนจริง ๆ เพิ่มเติมจากคำตอบของ@ PolyGeoเนื่องจากมันระบุถึง 'การสร้าง mxd ตั้งแต่เริ่มต้น' ในปัญหางูหลาม

คุณสามารถสร้าง MXD จากรอยขีดข่วนในหลามถ้าคุณเข้าถึง ArcObjects คุณจะต้องมีแพ็คเกจcomtypesและหากใช้ ArcGIS 10.1 คุณจะต้องทำการเปลี่ยนแปลงautomation.pyเล็กน้อย ดูArcObjects + comtypes ที่ 10.1

ด้านล่างเป็นรหัสบางอย่างเพื่อสร้าง MXD ตั้งแต่เริ่มต้นในหลาม:

import arcpy
import comtypes,os

def CreateMXD(path):
    GetModule('esriCarto.olb')
    import comtypes.gen.esriCarto as esriCarto
    pMapDocument = CreateObject(esriCarto.MapDocument, esriCarto.IMapDocument)
    pMapDocument.New(path)
    pMapDocument.Save() #probably not required...

def GetLibPath():
    """ Get the ArcObjects library path

        It would be nice to just load the module directly instead of needing the path,
        they are registered after all... But I just don't know enough about COM to do this

    """
    compath=os.path.join(arcpy.GetInstallInfo()['InstallDir'],'com')
    return compath

def GetModule(sModuleName):
    """ Generate (if not already done) wrappers for COM modules
    """
    from comtypes.client import GetModule
    sLibPath = GetLibPath()
    GetModule(os.path.join(sLibPath,sModuleName))

def CreateObject(COMClass, COMInterface):
    """ Creates a new comtypes POINTER object where
        COMClass is the class to be instantiated,
        COMInterface is the interface to be assigned
    """
    ptr = comtypes.client.CreateObject(COMClass, interface=COMInterface)
    return ptr

if __name__=='__main__':
    #testing...
    arcpy.SetProduct('arcview')
    filepath='c:/temp/testing123.mxd'
    if os.path.exists(filepath):os.unlink(filepath)
    CreateMXD(filepath)

14

โค้ดตัวอย่างการสร้างชั้นใน ArcGIS สำหรับเดสก์ท็อยู่บนความช่วยเหลือแบบออนไลน์สำหรับAddLayer (arcpy.mapping)

ขั้นตอนในการเผยแพร่เอกสาร ArcMap เป็นบริการให้กับ ArcGIS สำหรับเซิร์ฟเวอร์อยู่ในความช่วยเหลือออนไลน์สำหรับสิ่งพิมพ์บริการแผนที่กับงูหลาม

โปรดทราบว่ามันเป็นไปไม่ได้ที่จะสร้าง MXD โดยใช้ ArcPy - คุณต้องมี MXD ที่มีอยู่ซึ่งคุณสามารถเพิ่มเลเยอร์ได้ การตัดสินใจออกแบบนั้นอธิบายไว้ในวิธีใช้ออนไลน์สำหรับแนวทางในการ arcpy.mappingแต่ความสามารถในการสร้างเอกสารแผนที่ใหม่จากอะไรใน ArcPy เป็นแนวคิด ArcGISที่ฉันต้องการที่จะเห็นการใช้งาน

ดูคำตอบของ @ Lukeสำหรับวิธี Python และ ArcObjects ขั้นสูงที่ฉันยังไม่ได้ทดสอบ แต่อาจให้วิธีการแก้ปัญหาสำหรับการสร้าง MXD จากสคริปต์ Python ที่ ArcPy สามารถดำเนินการได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.