Veel

GetParti skripti (ArcPy) vs väljakalkulaatori (Python Parser) käitumine ArcGIS for Desktopis?

GetParti skripti (ArcPy) vs väljakalkulaatori (Python Parser) käitumine ArcGIS for Desktopis?


Aeg-ajalt pean pääsema geomeetria väljale ja segama selles olevaid punkte. Protsess on lihtne:

  1. Saage kuju
  2. Saage see osa
  3. Korduvad osa punktide kaudu

Nii näeb see skriptis välja

impordi arcpy fc = r'd:  scratch  line.shp 'koos arcpy.da.SearchCursor (fc, "Shape @") kursoriga: kursori rea jaoks: shp = rida [0] part = shp.getPart (0 ) p-le osaliselt: printige pX

Kui proovin samasugust asja teha väljakalkulaatori abil:

def plineM (shp): part = shp.getPart (0) p-le osaliselt: tagastage p.X plineM (! Shape!)

Sain 999999 vea.

Selle toimimiseks olen sunnitud a) määratlema massiivi pikkuse ja b) kasutama punkti saamiseks meetodit getObject ():

def plineM (shp): part = shp.getPart (0) n = len (part) i jaoks x-vahemikus (n): p = part.getObject (i) tagastab p.X

Küsimus: miks töötab lihtne massiivi iteraator skriptis ja ei tööta välikalkulaatoris?


Kursorite ja"SHAPE @"märgiks tagastatakse geomeetriline objekt. ThegetPart ()meetod tagastab massiivi, mis sisaldab kõiki selle konkreetse osa punkte.

Huvitav on see, et väljakalkulaator tagastab ka geomeetriaobjekti, kuidgetPart ()ei näi massiivi tagastavat, kuigi see on midagi sarnast. Võib-olla pakkimata massiiv?

Õnneks pääseb arcpy-le väljakalkulaatori sisse, nii et see on lihtne kõnearcpy.Array ():

def plineM (shp): osaliselt arcpy.Array (shp.getPart (0)): p jaoks osaliselt: tagastama Puudub, kui p on Puudub muu p.X plineM (! Kuju!)

Tundub, et see töötab skriptis, kuna saate selgesõnaliselt selleKuju @valdkonnas.

Kui satute nullkujulise funktsiooniga, proovib teie esimene väljakalkulaator selle lahti pakkida ja ilmneb tõrge.