Tìm kiếm tập lệnh Python để tạo tệp .mxd?


11

Tôi chưa quen với cả ArcGIS và Python. Yêu cầu của tôi là tự động hóa quy trình MANUAL dưới đây:

  1. Tạo một lớp trong ArcGIS cho Máy tính để bàn. Để đặt nó trong một từ khác, tạo một tài liệu ArcMap (.mxd).
  2. Xuất bản tài liệu ArcMap đã tạo (ở Bước 1) dưới dạng dịch vụ cho ArcGIS Server.

Hiện tại chúng tôi đang làm điều này bằng tay. Tôi đã xem qua các tập lệnh để tự động hóa bước 2 bằng Python.

Làm cách nào để tự động hóa bước 1 và bước 2?

Câu trả lời:


16

Đây thực sự không phải là một câu trả lời độc lập, thêm vào câu trả lời của @ PolyGeo vì nó giải quyết việc tạo mxd từ đầu 'trong vấn đề trăn.

Bạn có thể tạo MXD từ đầu trong python nếu bạn truy cập ArcObjects . Bạn sẽ cần gói comtypes và nếu sử dụng ArcGIS 10.1, bạn cần thực hiện một thay đổi nhỏ automation.py. Xem ArcObjects + comtypes tại 10.1

Dưới đây là một số mã để tạo MXD từ đầu trong python:

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

Mã mẫu để tạo một lớp trong ArcGIS cho máy tính để bàn nằm trên Trợ giúp trực tuyến cho AddLayer (arcpy.micking) .

Các bước để Xuất bản tài liệu ArcMap dưới dạng dịch vụ cho ArcGIS cho Máy chủ nằm trong Trợ giúp Trực tuyến để Xuất bản dịch vụ bản đồ với Python .

Lưu ý rằng không thể tạo MXD bằng ArcPy - bạn cần phải có MXD hiện có để bạn có thể thêm các lớp. Quyết định thiết kế đó được mô tả trong Hướng dẫn trợ giúp trực tuyến về Arcpy.micking , nhưng việc có thể tạo Tài liệu bản đồ mới từ không có gì trong ArcPy là một ý tưởng ArcGIS mà tôi muốn thấy được triển khai.

Xem câu trả lời của @ Luke cho phương pháp Python và ArcObjects nâng cao mà tôi chưa thử nghiệm nhưng có thể cung cấp cho bạn một cách giải quyết để tạo MXD từ tập lệnh Python mà ArcPy có thể tiếp tục thao tác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.