⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createlinkvectors.py

📁 AdvPythonTechWS 是esri公司提供的一种编程实现语言,本程序是其中的一个小例子!
💻 PY
字号:
import string, os, sys, traceback
import win32com.client
gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
gp.overwriteoutput = 1

skipmessage = "No corresponding point for link value %s"

def AddPrintMessage(msg, severity):
    print msg
    if severity == 0: gp.AddMessage(msg)
    elif severity == 1: gp.AddWarning(msg)
    elif severity == 2: gp.AddError(msg)

def GetFieldWrapper(desc):
    if desc.DataType == "ShapeFile":
        lb = '"'; rb = '"'
    elif desc.DataType == "FeatureClass":
        lb = "["; rb = "]"
    elif desc.DataType == "FeatureLayer":
        lb, rb = GetFieldWrapper(gp.describe(desc.CatalogPath))
    else:
        lb = ""; rb = ""
    return lb, rb

def CreatePoint(x, y):
    pnt = gp.CreateObject("Point")
    pnt.x = x
    pnt.y = y
    return pnt

try:
    #Input Data
    fromFC = gp.GetParameterAsText(0)
    fromLnkFld = gp.GetParameterAsText(1)
    toFC = gp.GetParameterAsText(2)
    toLnkFld = gp.GetParameterAsText(3)
    outputFC = gp.GetParameterAsText(4)

    fromDesc = gp.describe(fromFC)
    toDesc = gp.describe(toFC)
    lb, rb = GetFieldWrapper(toDesc)

    FClist = fromFC + ';' + toFC
    outSR = gp.CreateSpatialReference("#", fromFC, "#", "#", "#", FClist, 100)
    gp.CreateFeatureclass(os.path.split(outputFC)[0], os.path.split(outputFC)[1], "POLYLINE", "#", "ENABLED", "ENABLED", outSR)

    outDesc = gp.describe(outputFC)
    outRows = gp.insertcursor(outputFC)

    fromRows = gp.searchcursor(fromFC)
    fromRow = fromRows.next()

    pointArray = gp.CreateObject("Array")
    partArray = gp.CreateObject("Array")

    while fromRow:
        fromFeat = fromRow.GetValue(fromDesc.Shapefieldname)
        fromX, fromY = map(lambda x: float(x), fromFeat.centroid.split(" "))
        fromPnt = CreatePoint(fromX, fromY)
        
        lnkValue = fromRow.GetValue(fromLnkFld)
        queryStr = "%s%s%s = %s" % (lb, toLnkFld, rb, lnkValue)
        
        toRows = gp.searchcursor(toFC, queryStr)
        toRow = toRows.next()

        matchcount = 0

        while toRow:
            toFeat = toRow.GetValue(toDesc.Shapefieldname)
            toX, toY = map(lambda x: float(x), toFeat.centroid.split(" "))
            toPnt = CreatePoint(toX, toY)
            
            pointArray.add(fromPnt)
            pointArray.add(toPnt)
            partArray.add(pointArray)

            outRow = outRows.newrow()
            outRow.SetValue(outDesc.shapefieldname, partArray)
            outRows.InsertRow(outRow)
            
            pointArray.removeall()
            partArray.removeall()
            toRow = toRows.next()
            matchcount+=1
            
        if matchcount == 0:
            AddPrintMessage(skipmessage % lnkValue, 1)

        del toRow
        del toRows
        fromRow = fromRows.next()

    del outRow
    del outRows
    del fromRow
    del fromRows

except:
    tb = sys.exc_info()[2]
    tbinfo = traceback.format_tb(tb)[0]
    pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n    " + \
            str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
    AddPrintMessage(pymsg, 2)
    
    msgs = "GP ERRORS:\n" + gp.GetMessages(2) + "\n"
    AddPrintMessage(msgs, 2)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -