Vairāk

Piekļūt ģeometrijai ar SearchCursor ArcPy?

Piekļūt ģeometrijai ar SearchCursor ArcPy?


Es mēģinu uzrakstīt skriptu, kurā tiek apkopotas visas iezīmju klasesfcListpēc secīgām klipa funkcijas rindām. Es izmantoju arcpy ar ArcGIS 10.0

Problēma ir tā, ka man jāpārbauda, ​​vai pašreizējaisfcnofcListpārklājas ar pašreizējo klipu rindu rindu. Šeit ir kods (es komentēju rindas ar savām šaubām, jautājumiem, piezīmēm):

importēt arcpy, os arcpy.env.workspace = r'Z:  Documents  SIG  tests  synthese_tocorrect.gdb 'fcList = arcpy.ListFeatureClasses () # iezīmju klase, kas jāapgriež katram klipa slāņa daudzstūrim pochoir = r'Z:  Documents  SIG  tests  decoupe.shp '# klipa slānis ar vairākiem daudzstūriem = rows = arcpy.SearchCursor (pochoir) count = 0 outFolder = r'Z:  Documents  SIG  tests  sorties' fc in fcList: rindām rindās: p = rinda. Forma # Es mēģinu iegūt tikai pašreizējās rindas ģeometriju, bet es domāju, ka tā nedarbojas arcpy.MakeFeatureLayer_management (p, "ptmp") # ... izeja ir tukša, kamēr tam vajadzētu būt pirmajam daudzstūrim, kas atbilst klipa slāņa pirmajai rindai. arcpy.SelectLayerByLocation_management ("ptmp", "INTERSECT", fc) arcpy.CopyFeatures_management ("ptmp", "ptmpselect") nbrow = arcpy.GetCount_management ("ptmpselect"), ja nbrow> 0: secteur = integer no katra klipa slāņa daudzstūra out_poly = (outFolder, fc + "_" + str (secteur) + "_" + virkne (skaits)) arcpy.ClipAnalysis (fc, "ptmpselect", out_poly) arcpy.DeleteManagement ("ptmp ") arcpy.DeleteManagement (" ptmpselect ") count = skaits + 1 cits: secteur = row.secteur # Es zinu, ka atkārtoju sevi. Vai ir kāda ideja no tā izvairīties? out_poly = (outFolder, fc + "_" + str (secteur) + "_" + string (count)) del rinda, rindas, pochoir, count, outFolder, fc, fcList

Izveidojot slāņa failu klipa shapefilei un izmantojot atlasi, es varētu paveikt šo uzdevumu. Atcerieties, ka, lietojot ģeogrāfiskās apstrādes rīku, process tiks veikts tikai ar atlasītajām funkcijām. Zemāk esošajā skriptā es vispirms izveidoju funkciju slāni no klipa shapefile, lai ļautu to atlasīt. Pēc tam es atkārtoju katru iezīmējamo klasi, kuru vēlaties apgriezt. Katrā atkārtojumā es atkārtoju katru elementu klipa slāņa failā. Es izvēlos katru funkciju, pamatojoties uz OID, un pēc tam veicu savu klipu. Izejas nosaukšanas kārtība atšķiras no jūsu skripta (mainīgais out_poly mainīgais), taču to varat pielāgot pēc savas gaumes. Ir pagājis ilgs laiks, kopš esmu izmantojis vecāku meklēšanas kursora versiju, tāpēc, cerams, ka kods ir pareizi izveidots.

Kods:

importēt arcpy, os arcpy.env.workspace = r'Z:  Documents  SIG  tests  synthese_tocorrect.gdb 'fcList = arcpy.ListFeatureClasses () # iezīmju klase, kas jāapgriež katram klipa slāņa daudzstūrim pochoir = r'Z:  Documents  SIG  tests  decoupe.shp '# klipa slānis ar vairākiem daudzstūriem outFolder = r'Z:  Documents  SIG  tests  sorties' fcList = arcpy.ListFeatureClasses () arcpy.MakeFeatureLayer_management (pochoir, "pochoirlyr") # Izveidojiet slāni, lai ļautu atlasīt OIDField = arcpy.Describe ("pochoirlyr"). OIDFieldName #Iegūstiet fcList lauka fID OID lauku: arcpy.MakeFeatureLayer_management (os.path.join (arcpy.env.workspace, fc), "lyr") pocursor = arcpy.SearchCursor ("pochoirlyr") portālam pocursor: sql = '"' + OIDField + '" =' + str (row.getValue (OIDField)) #SQL, lai izvēlētos vienu funkciju arcpy.SelectLayerByAttribute_management ("pochoirlyr", "", sql) # Atlasiet daudzstūra iezīmi pēc OID arcpy.SelectLayerByLocation_management ("lyr", "", "pochoirlyr") # Atlasiet iezīmējamo slāni atlasot ed klipa funkcija, ja arcpy.Describe ("lyr"). FIDSet: #Pārbaudiet atlasi out_poly = (outFolder, fc + "_" + str (row.getValue (OIDField))) #Output feature class arcpy.ClipAnalysis (fc, "pochoirlyr", out_poly) del porow del pocursor arcpy.Delete_management ("lyr") arcpy.SelectLayerByAttribute_management ("pochoirlyr", "CLEAR_SELECTION")

Ņemiet vērā, ka klips tiek veikts tikai tad, ja funkcijas pārklājas.


# Es zinu, ka atkārtoju sevi. Vai ir kāda ideja no tā izvairīties?

Pārvietotsekcija = rinda. sekcijaārpus if / else paziņojumiem (pirmsja nbrow> 0:).


Pārvietotrows = arcpy.SearchCursor (pochoir)iekšpusē for loop (pēcfc fcList:)


Es domāju, ka jūs nepareizi piekļūstat ģeometrijai. Atsauce uz Ģeometrijas lasīšanu un darbu ar ģeometriju Python.

# stāsta jums pochoir shapeFieldName shapeName = arcpy.Describe (pochoir) .shapeFieldName # faktiski ģeometriju glabā kaut kur p = row.getValue (shapeName)

Alternatīvi, nejaucieties ar ģeometriju. Katrai rindai izveidojiet iezīmju slāni, iekļaujot akur_klavaslai atlasītu tikai to rindu no sākotnējās objektu klases.

rindām rindās: id = row.secteur where_clause = "secteur = '{}'". format (id) arcpy.MakeFeatureLayer_management (pochoir, "ptmp", where_clause)

Jūs faktiski vēl neskaitāt rindas. TheGetCount_managementLai iegūtu rindu skaitlisku vērtību, funkcijai ir nepieciešami pāris soļi.

result = arcpy.GetCount_management ("ptmpselect") nbrow = int (result.getOutput (0)), ja nbrow> 0:…

vai tikai šādi (lai gan iesācējiem es iesaku turēt lietas vairāk izkliedētas, piemēram, iepriekš):

result = arcpy.GetCount_management ("ptmpselect"), ja int (result.getOutput (0))> 0:…

Lai uzlabotu lasāmību, es iesaku:

outName = "{0} _ {1} _ {2}". formāts (fc, secteur, count)

un pēc tam izmantojiet outName, nevisfc + "_" + str (sektors) + "_" + virkne (skaits)divreiz.


Nejauši kustīgi un rotējoši daudzstūri

Mums ir aizsargājamo teritoriju daudzstūri, kas pilnībā iekļauti pētāmās teritorijas daudzstūrī. Mēs vēlētos nejauši pārvietot un pagriezt katru aizsargājamo teritoriju daudzstūri tā, lai tie nepārklātos un pilnībā atrastos pētāmās teritorijas daudzstūrī. Mēs vēlētos atkārtot šo randomizācijas procesu x reižu skaitu.

Pašlaik mums ir koridoru tīkls, pamatojoties uz esošo aizsargājamo teritoriju konfigurāciju, un mēs vēlētos salīdzināt šo koridoru tīklu ar nejaušām aizsargājamo teritoriju konfigurācijām.

Vai tas ir iespējams? Tas pašlaik nav manā kompetencē (bet vēlas mācīties), un es meklēju virzienu / terminus / jēdzienus / utt. Man jāzina, lai mani sāktu.

Viss ir iespējams. Jūs to varētu iedomāties, izmantojot Python skriptu.

Funkciju maiņa: Es nedomāju, ka to var izdarīt no kastes, lai gan pielāgotā projekcijas failā to varētu izmantot, lai to izdarītu. Esmu redzējis arī forumā ievietotus skriptus, kas sistemātiski nobīda funkcijas (bet šķiet, ka šobrīd tās nevar atrast). Pamatideja ir izlasīt visu iezīmju ģeometriju un pēc tam izrakstīt dažas jaunas pazīmes, kur visām virsotnēm ir nobīde x / y koordinātēs (teiksim, piemēram, 20 pēdas uz ziemeļiem, 37 pēdas uz austrumiem).

Funkcijas pagriešana: Es atkal nedomāju, ka to var izdarīt no kastes (izņemot pagriešanas rīku, kas pieejams rediģēšanas sesijas laikā). Lai to izdarītu, jūs varētu uzrakstīt kādu Python kodu. lai gan matemātika, lai to izdarītu, noteikti pārsniedz manas tiešās ģeometrijas prasmes. Rasteru pagriešanai ir rīkjoslas rīks: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000007s000000, un es domāju, ka ir dažas ArcObjects tipa metodes vektoru rotācijas apstrādei (piemēram, sesijas rediģēšanas rīks). Tas varētu būt sava veida grūts Python - un varbūt labāk ArcObjects, ja patiešām jau ir metode, kā tur veikt funkciju pagriešanu.

Tātad es pieņemu, ka tā ir sava veida monte carlo optimizācija, kuru jūs mēģināt izdomāt? http://en.wikipedia.org/wiki/Monte_Carlo_method

Lai izveidotu tādu dzīvnieku teritoriju (ziemeļu plankumainās pūces) skaitu, kuras varētu atbalstīt, ņemot vērā dažādus scenārijus par meža apstākļiem laika gaitā, es izveidoju monte carlo bāzes "optimizētāja" versiju. Būtībā (piemēram, tas, ko jūs mēģināt darīt), tas vienkārši izmēģina virkni nejaušu permutāciju un izveido rezultātu sadalījumu. Tas patiesībā nemēģina neko precīzi optimizēt, bet drīzāk rada "iespējamo rezultātu" sadalījumu. Daži rezultāti, protams, beidzās ar vairāk teritoriju nekā citi - es domāju, ka jūs varētu domāt par vairākām teritorijām kā par optimizāciju, lai gan tas patiesībā nebija projekts. Retrospektīvi tās bija sāpes un man bija vajadzīgs ilgs laiks, lai ieprogrammētu, bet galu galā tas bija diezgan forši, un es daudz ko iemācījos to darot.


Tā kā tā ir uz ģeometriju orientēta datu bāze, Arc automātiski saglabā daudzstūra kopējo platību kā atribūtu. Tas nav jāaprēķina, tāpēc (pieņemu), ka šis koda fragments jums tika ieteikts:

  1. Izveidojiet kursoru, lai izietu caur ievades shapefile input_shp, velkot tikai divus atribūtus (objekta ID un kopējo platību).
  2. Riņķojiet pa formas failu pa vienai rindai.
  3. Katrai rindai izdrukājiet rindu [0] (objekta ID) un rindu [1] (kopējo platību).

Turpmākai lasīšanai es apskatīšu šo lielisko atbildi vietnē GIS.SE. Tajā detalizēti izpētītas dažas piekļuves un ģeometrijas aprēķināšanas iespējas.

(Pēdējā piezīme: atribūts shape @ area būs datu projekcijas vienībās. Ņemiet to vērā, ja saņemat negaidītus skaitļus.)


Izvilkt PDF lapas un pārdēvēt, pamatojoties uz tekstu katrā lapā (Python)

Man nesen tika uzdots pārvietoties pa direktoriju un nākamajiem apakšdirektorijiem, lai tos atrastu PDFs un sadaliet visus daudzlapu failus vienas lapas failos. Galīgais mērķis bija nosaukt katru iegūto lapu, kas tagad bija individuāla PDF, ar dokumenta numuru katrā lappusē. Iespējams, ka bija vairāk nekā 100 PDF faili direktorijā un katrs PDF varētu būt no vienas līdz vairāk nekā desmit lappusēm. Galējā gadījumā es būtu varējis aplūkot aptuveni tūkstoš lappušu, lai izvilktu un pārdēvētu & # 8211 uzdevumu, kas manuāli būtu ļoti laikietilpīgs un prātu nejūtīgs.

The PDFs saturēja karšu grāmatas, kas izveidotas, izmantojot datu bāzes lapas ArcGIS, bija iedomājams, ka es varētu arī atkārtoti atvērt oriģinālu MXDs un reeksportējiet karšu grāmatu kā atsevišķas lapas un atbilstoši nosaucot, pamatojoties uz dokumenta nosaukumu atribūtu tabulā. Tā kā es nebiju neviena no šiem radītājs PDFs un viņi visi nāca no dažādām komandām, meklējot pareizos MXDs un eksportēšana būtu apgrūtinoša un arī ļoti laikietilpīga. Bija jābūt interesantākam un laika ziņā efektīvākam veidam & # 8230

& # 8230Ātra izpēte, izmantojot Google uz dažiem Python moduļi, un man bija tas, kas man vajadzīgs, lai uzdevumu veiktu automatizētāk un efektīvāk. Man vajadzēja trīs moduļus
(1) os & # 8211, lai pārvietotos pa direktorijiem un failiem un pārdēvētu failus
(2) PyPDF2 & # 8211 lasīt / rakstīt PDF failus un arī iegūt tekstu no lapām
(3) re & # 8211 regulārās izteiksmes modulis, lai atrastu tekstu, kas nepieciešams faila pārdēvēšanai.
Nākamais solis bija pierakstīt pseidokodu, lai uzzinātu, kas jāsasniedz, un pēc tam iegūtu kodu & # 8230

Sāksim sākt ar moduļu importēšanu skripta augšdaļā.

Definējiet funkciju, kā iegūt lapas. Šai funkcijai būs divi parametri - ceļš uz saknes direktoriju un ceļš uz mapi, lai izvilktu lapas. & # 8216extract_to_folder & # 8217 jābūt vienā līmenī vai virs saknes direktorija. Izmantojiet savu operētājsistēmu, lai izveidotu mapi ar nosaukumu & # 8216extracted & # 8217, kā arī izveidojiet otro mapi ar nosaukumu # # 1616pārdēvēts & # 8217.

Tālāk mēs izmantojam os moduli, lai meklētu no saknes direktorija uz leju, lai atrastu PDF failus un glabājiet pilnu faila ceļu kā mainīgo pa vienam.

Pēc tam mēs to atveram PDF lasīšanas režīmā.

Par katru lapas PDF lapa tiek izvilkta un saglabāta kā jauna PDF fails mapē & # 8216extracted & # 8217. Tālāk redzamais fragments tika iegūts no plūsmas plūsmas.

Tas pabeidz mūsu funkciju noņemt atsevišķas lapas no PDF faili saknes direktorijā un lejup pa visiem atbilstošajiem apakšdirektorijiem. Šī funkcija var būt viss, kas jums nepieciešams, jo, saglabājot katru failu, varat pārdēvēt iegūtās lapas. Nākamais uzdevums man tomēr bija pārdēvēt PDFs, pamatojoties uz tekstu, kas atrodas katrā atsevišķā failā.

Definējiet funkciju, ko sauc par & # 8216rename_pdfs & # 8217 un kura diviem argumentiem aizņem ceļu uz mapi, kurā atrodas izvilktās lapas, un pārdēvēto mapi. Loop caur katru PDF un katram izveidojiet failu ceļu.

Atveriet katru PDF lasīšanas režīmā & # 8230

Tagad mēs izvelkam tekstu no lapas.

Mans uzdevums tika padarīts diezgan vienkāršs, jo katrai lapai bija unikāls dokumenta numurs ar noteiktu rakstzīmju daudzumu, kas katrai no tām bija tieši tāds pats. Tas nozīmēja, ka es varētu izmantot regulāru izteiksmi re moduli, lai atrastu prefiksu un pēc tam iegūtu pārējo dokumenta numuru.

Tālāk redzamais kods atrod dokumenta numura prefiksu no lapas izvilktajā tekstā un pievieno prefiksam nākamās 14 rakstzīmes, lai iegūtu pilnu dokumenta numuru.

Pēdējā lieta, kas jādara, ir izmantot dokumenta numuru, lai pārdēvētu PDF

Tas pabeidz divas funkcijas, kas nepieciešamas uzdevuma izpildei.

Iestatiet mainīgos, kas nepieciešami funkciju parametriem & # 8230

& # 8230un pēc tam izsauciet katru funkciju.

Palaidiet skriptu. Sākotnējie faili paliks, un pārdēvētās iegūtās lapas atradīsies pārdēvētajā mapē. Jebkurš PDF lapa, kuru neizdevās pārdēvēt, joprojām būs izvilktajā mapē, un jūs varat tās pārdēvēt manuāli. Šī nespēja pārdēvēt katru PDF ir tāpēc, ka sastāvs PDF i., veids, kā tas tika eksportēts no programmatūras vai kā tas tika izveidots. Pārbaudes laikā no 206 lappusēm 10 lapas neizdevās pārdēvēt. Kad es atvēru lapas, atlases rīks nevarēja izcelt tekstu un viss tika iegults kā attēls, tāpēc skripts nevarēja lasīt tekstu, lai pārdēvētu dokumentu.

Es ceru, ka kāds no turienes to uzskatīs par noderīgu. Es vienmēr priecājos, ka mans kods darbojas, taču pateicos, ja jums ir kādi konstruktīvi komentāri vai padomi, kā padarīt kodu efektīvāku.


コ ー ド の サ ン プ ル

Režģa piemērs 1

Šis skripts nolasīs esošās darbvietas režģu nosaukumus un tipa īpašības un izdzēsīs režģus no darbvietas, izmantojot rekvizītus kā parametrus ģeogrāfiskās apstrādes rīkā Dzēst režģi un režģi.

2. režģa piemērs

Šis paraugs izveido režģa objektu no režģa XML faila un pārbauda veidu un mērogu.

Režģa piemērs 3

Šis skripta paraugs izmanto režģa objekta no esoša .xml faila telpisko atsauces pamatīpašību, lai izveidotu objektu datu kopu, un izveido režģi, izmantojot ģeogrāfiskās apstrādes rīku Make Grids and Graticules Layer.


Pārformatējiet visus ArcMap dokumenta slāņu nosaukumus

* Pirms sāku izmantot šodienas skriptu, esmu pamanījis, ka iegultie saraksti neparādās mobilajās ierīcēs, piekļūstot šī emuāra plūsmai, izmantojot Feedly vai kādu citu RSS lasītāju. Lai skatītu kodu, ziņa jāatver tīmekļa pārlūkprogrammā. Es arī ievietošu saiti uz to ziņas beigās.

Izveidojot līdzekļu pārvaldības datu objektu klases manuāli, nevis automātiski, es vienmēr pārliecinos tos konsekventi nosaukt. Tomēr es reti mainu funkciju klases aizstājvārdu manuāli. Tas nozīmē, ka tad, kad man ir jāvelk visi slāņi kartē, lai izveidotu kml, man jāpārsauc katrs slānis.

Tāpēc es vēršos pie Python.

#
# @ datums 14/08/2015
# @ autore Sindija Viljamsa
#
# Ātri formatē visu slāņu nosaukumus kartē
# dokuments. Šajā piemērā nosaukuma daļa pirms
# pirmā punkts tiek noņemts, pasvītrojumi tiek aizstāti
# atstarpes, atstarpes tiek izmantotas, lai ievietotu atstarpes pirms lielajiem burtiem
# un virkne tiek pārveidota par lielo un mazo burtu.
#
# Lietošanai ArcMap logā Python.
#
importēt arcpy
importa re
mxd = arcpy. kartēšana. MapDocument (& quot; PAKĀPĒJS & quot)
lyrs = arcpy. kartēšana. ListLayers (mxd)
liram liros:
new_name_replaced = lyr. nosaukums. sadalīt (& quot. & quot) [1]. aizstāt (& quot_ & quot, & quot & quot)
new_name_spaced = re. sub (r & quot ( w) ([A-Z]) & quot, r & quot 1 2 & quot, jauns_nosaukums_aizvietots)
lyr. name = new_name_spaced. nosaukums ()
lokains. RefreshTOC ()

Protams, veids, kā nosaukums tiek sadalīts, mainīsies atkarībā no pašreizējā nosaukumu formāta. Šajā gadījumā man vajadzīgā vārda daļa notika pēc pirmās pieturas un tajā bija pasvītras, kuras bija jāaizstāj ar atstarpēm. Pēc tam es izmantoju regulāru izteiksmi, lai ievietotu atstarpes starp InitialCaps vārdiem.


Rekvizīti

Atgriež režģa primāro koordinātu sistēmas telpisko bāzes atsauci.

Atgriež grupas slāni, kas izveidots no režģa objekta. Grupas slānis satur visus režģa apakškomponentus kā apakšslāņus. Tas ir tas pats, kas izvades grupas slānis no rīka Make Grids And Graticules Layer ģeoprocesēšanas rīka.

Nodrošina iespēju iegūt vai iestatīt objekta Grid nosaukumu. Kartogrāfiskā režģa nosaukums var nebūt slāņa nosaukums. Nosaukums ļauj nošķirt režģus, kas glabājas vienā un tajā pašā objektu datu kopā, un objektu klašu kopu.

Nodrošina iespēju iegūt vai iestatīt režģa objekta atsauces skalu.

Nodrošina iespēju iegūt vai iestatīt veidu, kas saistīts ar režģa objektu. Visiem viena veida režģiem būs vienāds izskats. Tips nosaka režģa, kartes produkta vai sērijas stilu.


Telpas, ap kurām tiek veidotas apkalpošanas zonas.

Iekārtas funkciju komplektam ir trīs atribūti:

Sistēmas pārvaldītā ID lauks.

Ģeometrijas lauks, kas norāda tīkla analīzes objekta ģeogrāfisko atrašanās vietu.

Iekārtas nosaukums. Ja nosaukums ir tukšs, tukšs vai nulle, nosaukums tiek automātiski izveidots atrisināšanas laikā.

Norāda katram objektam ģenerējamo apkalpošanas zonas daudzstūru lielumu un skaitu. Vienības nosaka pēc Sadalījuma vienību vērtības.

Palaižot pakalpojumu apgabalu ģenerēšanas rīku, ievērības cienīga mijiedarbība notiek starp šiem parametriem: pārtraukuma vērtības, pārtraukuma vienības un laika vai attāluma atribūts. Kopā pārtraukuma vērtības un pārtraukuma vienības nosaka, cik tālu vai cik ilgi apkalpošanas zonai jāaptver ap objektu vai objektiem. Laika atribūta un attāluma atribūta parametri katrs nosaka vienu tīkla izmaksu atribūtu. Tomēr tiek izmantots tikai viens no šiem diviem izmaksu atribūtiem, un tas, kuru risinātājs izvēlas izmantot, atbilst Sadalījuma vienību vērtībai, tas ir, ja, norādot laika pārtraukuma vienības vērtību, piemēram, sekundes vai minūtes, rīks atrisina izmantojot parametru Laika atribūts definēto izmaksu atribūtu. Norādot uz attālumu balstītu pārtraukuma vienības vērtību, piemēram, kilometrus vai jūdzes, tā izmanto izmaksu atribūtu, kas definēts parametrā Distance Attribute.

Var izveidot vairākus daudzstūra pārtraukumus, lai katrā objektā izveidotu koncentriskas apkalpošanas zonas. Piemēram, lai katram objektam atrastu divu, trīs un piecu jūdžu apkalpošanas zonas, ievadiet 2 3 5, vērtības atdalot ar atstarpi. Iestatiet pārtraukuma vienības uz jūdzes un pārliecinieties, vai parametram Distance Attribute esat izvēlējies tīkla atribūtu uz attālumu.

Parametra Break Values ​​vienības.

  • Skaitītāji
  • Kilometri
  • Pēdas
  • Pagalmi
  • Miles
  • NauticalMiles
  • Sekundes
  • Protokols
  • Stundas
  • Dienas

Rīks Ģenerēt apkalpošanas apgabalus izvēlas, vai izmantot tīkla atribūtu, kas norādīts parametrā Laika atribūts vai Attāluma atribūts, atkarībā no tā, vai šeit norādītās vienības ir balstītas uz laiku vai attālumu.

Rīks veic nepieciešamo vienību pārveidošanu, ja vienību pārtraukuma vērtība atšķiras no attiecīgā laika vai attāluma izmaksu atribūta vienībām.

Tīkla datu kopa, kurā tiks veikta analīze. Tīkla datu kopas visbiežāk attēlo ielu tīklus, bet var pārstāvēt arī cita veida transporta tīklus. Tīkla datu kopai ir nepieciešams vismaz viens laika un viena attāluma izmaksu atribūts.

Izvades darbvieta un izvades funkciju nosaukums. Šai darbvietai jau jābūt. Noklusējuma izvades darbvieta ir in_memory.

Izvēlieties, vai braukšanas virziens, ko izmanto apkalpošanas zonas daudzstūru veidošanai, ir vērsts uz objektu vai prom no tiem.

  • TRAVEL_FROM - apkalpošanas zona tiek veidota virzienā, kas atrodas prom no objektiem.
  • TRAVEL_TO - apkalpošanas zona tiek izveidota virzienā uz labierīcībām.

Braukšanas virziens var mainīt daudzstūru formu, jo pretestības ielas pretējās pusēs var atšķirties vai var būt vienvirziena ielas. Izvēlētais virziens ir atkarīgs no jūsu apkalpošanas apgabala analīzes veida. Piemēram, picu piegādes veikala apkalpošanas zona ir jāizveido prom no iestādes, turpretī slimnīcas apkalpošanas zona jāizveido pretī iestādei, jo pacienta kritiskais ceļojuma laiks dodas uz slimnīcu.

  • Tas norāda atiešanas laiku, ja ceļojuma virziens ir iestatīts ceļošanai prom no objektiem.
  • Tas norāda ierašanās laiku, ja ceļojuma virziens ir iestatīts ceļojumam uz objektiem.

Jūsu tīkla datu kopai jāietver trafika dati, lai šim parametram būtu kāda ietekme.

Atkārtoti risinot vienu un to pašu analīzi, bet izmantojot dažādas dienas laika vērtības, varat redzēt, kā laika gaitā mainās objekta sasniedzamība. Piemēram, piecu minūšu apkalpošanas zona ap ugunsdzēsēju depo agrā rītā var sākties liela, samazināties rīta sastrēguma stundā, augt vēlā rītā un tā tālāk visu dienu.

Pagrieziena politika krustojumos. Atļaujas pagriezieni nozīmē, ka risinātājs var apgriezties krustojumā un dubultoties tajā pašā ielā. Ņemot vērā to, ka krustojumi apzīmē ielu krustojumus un strupceļus, dažādi transportlīdzekļi dažos krustojumos var apgriezties, bet citos - ne - tas ir atkarīgs no tā, vai krustojums apzīmē krustojumu vai strupceļu. Lai pielāgotos, pagrieziena politikas parametrs tiek netieši norādīts pēc tā, cik malu savienojas ar krustojumu, kas ir pazīstams kā krustojuma valence. Šim parametram pieņemamās vērtības ir norādītas zemāk, pēc katras seko tā nozīmes apraksts savienojuma valentuma izteiksmē.

  • ALLOW_UTURNS - krustojumos ar jebkuru savienotu malu skaitu ir pieļaujami apgriezieni. Šī ir noklusējuma vērtība.
  • NO_UTURNS - U-pagriezieni ir aizliegti visos krustojumos, neatkarīgi no krustojuma valences. Tomēr ņemiet vērā, ka pagriezieni joprojām ir atļauti tīkla vietās, pat ja ir izvēlēts šis iestatījums, tomēr jūs varat iestatīt atsevišķu tīkla vietu īpašību CurbApproach, lai tur aizliegtu arī pagriezienus.
  • ALLOW_DEAD_ENDS_ONLY - pagriezieni ir aizliegti visos krustojumos, izņemot tos, kuriem ir tikai viena blakus esošā mala (strupceļš).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY - U-pagriezieni ir aizliegti krustojumos, kur saskaras tieši divas blakus esošās malas, bet atļauts krustojumos (krustojumos ar trim vai vairākām blakus esošām malām) un strupceļos (krustojumos ar precīzi vienu blakus esošo malu). Bieži vien tīkliem ceļa posmu vidū ir sveši mezgli. Šī opcija neļauj transportlīdzekļiem apgriezties šajās vietās.

Ja jums nepieciešama precīzāk definēta pagrieziena politika, apsveriet iespēju pievienot globālā pagrieziena aiztures novērtētāju tīkla atribūtam vai pielāgot tā iestatījumus, ja tāds pastāv, un pievērsiet īpašu uzmanību reverso pagriezienu konfigurācijai. Apskatiet arī tīkla tīkla rekvizīta CurbApproach iestatīšanu.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Norāda punktu barjeras, kuras ir sadalītas divos veidos: ierobežojumu un pievienoto izmaksu punktu barjeras. Tie īslaicīgi ierobežo šķērsošanu vai pievieno pretestību tīkla punktiem. Punktu barjeras definē pazīmju kopa, un atribūtu vērtības, kuras jūs norādāt punktu pazīmēm, nosaka, vai tās ir ierobežojuma vai pievienotās izmaksu barjeras. Atribūtu tabulas lauki ir uzskaitīti un aprakstīti zemāk.

Sistēmas pārvaldītā ID lauks.

Ģeometrijas lauks, kas norāda tīkla analīzes objekta ģeogrāfisko atrašanās vietu.

  • Ierobežojums (0) - aizliedz pārvietoties pa barjeru. Šī ir noklusējuma vērtība.
  • Pievienotās izmaksas (2) —braucot pa barjeru, tīkla izmaksas tiek palielinātas par summu, kas norādīta laukos Papildu laiks un Papildu attālums.

Izmantojiet ierobežojumam vērtību 0 un pievienotās izmaksas - vērtību 2.

AdditionalCost norāda, cik liela pretestība tiek pievienota, kad apkalpošanas zona iet caur barjeru.

Šīs lauka vērtības vienība ir tāda pati kā vienībām, kas norādītas sadalījuma vienībām.

Norāda līnijas barjeras, kas īslaicīgi ierobežo šķērsošanu pa tām. Līnijas barjeras nosaka funkciju kopa. Atribūtu tabulas lauki ir uzskaitīti un aprakstīti zemāk.

Sistēmas pārvaldītā ID lauks.

Ģeometrijas lauks, kas norāda tīkla analīzes objekta ģeogrāfisko atrašanās vietu.

Norāda daudzstūra barjeras, kas ir sadalītas divos veidos: ierobežojuma un mērogotas izmaksu daudzstūra barjeras. Tie īslaicīgi ierobežo šķērsošanas vai mēroga pretestību tajās tīkla daļās, kuras tās aptver. Daudzstūra šķēršļus nosaka objektu kopa, un daudzstūra pazīmēm norādītās atribūtu vērtības nosaka, vai tās ir ierobežojuma vai mērogotas izmaksu barjeras. Atribūtu tabulas lauki ir uzskaitīti un aprakstīti zemāk.

Sistēmas pārvaldītā ID lauks.

Ģeometrijas lauks, kas norāda tīkla analīzes objekta ģeogrāfisko atrašanās vietu.

Norāda, vai barjera pilnībā ierobežo braucienu, vai arī aprēķina ceļa izmaksas caur to. Ir divas iespējas:

  • Ierobežojums (0) - aizliedz pārvietoties pa jebkuru barjeras daļu. Šī ir noklusējuma vērtība.
  • Mērogotas izmaksas (1) - mērogā pakārtoto malu pretestību, reizinot tās ar rekvizīta ScaledCostFactor vērtību. Ja malas daļēji pārklāj barjera, pretestība tiek sadalīta un reizināta.

Izmantojiet vērtību 0 ierobežojumam un 1 - mērogotajām izmaksām.

ScaledCostFactor norāda, cik liela pretestība tiek reizināta ar servisa zonas iziešanu caur barjeru.

Definē tīkla izmaksu atribūtu, kas jāizmanto, ja vienību pārtraukuma vērtība ir laika vienība.

Rīks veic nepieciešamo laika vienības konvertēšanu, kad vienību pārtraukuma vērtība atšķiras no šeit definētās izmaksu atribūta vienībām. Citiem vārdiem sakot, pārtraukumu laika vienībām un tīkla izmaksu atribūtam nav jābūt vienādiem.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Tīkla izmaksu atribūta mērvienības, kas norādītas parametrā Time Attribute. Tas ir tikai informatīvs parametrs, kuru nevar mainīt bez tīkla datu kopas tiešas rediģēšanas. Tas nav arī jāmaina, jo vienības reklāmguvumi starp pārtraukuma vērtības vienībām un izmaksu atribūtu tiek veikti jums.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Definē tīkla izmaksu atribūtu, kas jāizmanto, ja vienību pārtraukuma vērtība ir attāluma vienība.

Rīks veic nepieciešamo attāluma vienības pārveidošanu, ja vienību pārtraukuma vērtība atšķiras no šeit definētās izmaksu atribūta vienībām. Citiem vārdiem sakot, pārtraukumu attāluma vienībām un tīkla izmaksu atribūtam nav jābūt vienādiem.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Tīkla izmaksu atribūta mērvienības, kuras norāda parametrs Distance Attribute. Tas ir tikai informatīvs parametrs, kuru nevar mainīt bez tīkla datu kopas tiešas rediģēšanas. Tas nav arī jāmaina, jo vienības reklāmguvumi starp pārtraukuma vērtības vienībām un izmaksu atribūtu tiek veikti jums.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

  • Pārbaudīts - analīzei izmantojiet hierarhijas atribūtu. Izmantojot hierarhiju, risinātājs dod priekšroku augstākas kārtas malām, nevis zemākas kārtas malām. Hierarhiskie risinājumi ir ātrāki, un tos var izmantot, lai simulētu autovadītāja izvēli, kurš, ja iespējams, izvēlas braukt pa automaģistrālēm, nevis vietējiem ceļiem, pat ja tas nozīmē garāku braucienu. Šī opcija ir iespējota tikai tad, ja ievades tīkla datu kopai ir hierarhijas atribūts.
  • Neatzīmēts - analīzei neizmantojiet hierarhijas atribūtu. Neizmantojot hierarhiju, tiek iegūts precīzs maršruts tīkla datu kopai.

Parametrs ir atspējots, ja analīzes veikšanai izmantotajā tīkla datu kopā nav definēts hierarhijas atribūts.

Varat izmantot parametru Force Hierarchy Beyond Distance, lai piespiestu risinātāju izmantot hierarhiju, pat ja Izmantot hierarhiju analīzē ir iestatīta uz false.

Šis parametrs tiek ignorēts, ja vien ceļojuma režīms nav iestatīts uz Pielāgots. Modelējot pielāgotu pastaigas režīmu, ieteicams izslēgt hierarhiju, jo hierarhija ir paredzēta motorizētiem transportlīdzekļiem.

  • USE_HIERARCHY - Analīzei izmantojiet hierarhijas atribūtu. Izmantojot hierarhiju, risinātājs dod priekšroku augstākas kārtas malām, nevis zemākas kārtas malām. Hierarhiskie risinājumi ir ātrāki, un tos var izmantot, lai simulētu autovadītāja izvēli, kurš, ja iespējams, izvēlas braukt pa automaģistrālēm, nevis vietējiem ceļiem, pat ja tas nozīmē garāku braucienu. Šī opcija ir derīga tikai tad, ja ievades tīkla datu kopai ir hierarhijas atribūts.
  • NO_HIERARCHY - analīzei neizmantojiet hierarhijas atribūtu. Neizmantojot hierarhiju, tiek iegūts precīzs maršruts tīkla datu kopai.

Parametrs netiek izmantots, ja tīkla datu kopā, kas tiek izmantota analīzes veikšanai, nav definēts hierarhijas atribūts. Šādos gadījumos kā parametra vērtību izmantojiet "#".

Varat izmantot parametru Force_Hierarchy_Beyond_Distance, lai piespiestu atrisinājumu izmantot hierarhiju, pat ja Use_Hierarchy_in_Analysis ir iestatīta uz False.

Šis parametrs tiek ignorēts, ja vien Travel_Mode nav iestatīts uz CUSTOM. Modelējot pielāgotu pastaigas režīmu, ieteicams izslēgt hierarhiju, jo hierarhija ir paredzēta motorizētiem transportlīdzekļiem.

Norāda, kuri tīkla ierobežojuma atribūti tiek ievēroti risināšanas laikā.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Norāda parametru vērtības tīkla atribūtiem, kuriem ir parametri. Ierakstu kopai ir divas kolonnas, kas darbojas kopā, lai unikāli identificētu parametrus, un vēl viena kolonna, kas norāda parametra vērtību.

Šī parametra vērtība tiek ignorēta, ja ceļojuma režīms (Travel_Mode Python) ir iestatīts uz jebkuru citu vērtību, izņemot pielāgotu.

Atribūtu parametru vērtību ierakstu kopai ir saistīti atribūti. Atribūtu tabulas lauki ir uzskaitīti zemāk un aprakstīti.

Sistēmas pārvaldītā ID lauks.

Tīkla atribūta nosaukums, kura atribūta parametru nosaka tabulas rinda.

Atribūta parametra nosaukums, kura vērtību nosaka tabulas rinda. (Izmantojot šo rīku, objekta tipa parametrus nevar atjaunināt.)

Vērtība, kuru vēlaties atribūta parametram. Ja vērtība nav norādīta, atribūta parametrs tiek iestatīts uz nulli.

Maksimālā snap tolerance ir vistālākais attālums, ko tīkla analītiķis meklē, atrodot vai pārvietojot punktu tīklā. Meklējot tiek meklētas piemērotas malas vai krustojumi, un punkts tiek nofiksēts līdz tuvākajam. Ja piemērotā vieta netiek atrasta maksimālās pieļaujamās pielaides robežās, objekts tiek atzīmēts kā neatstāts.

  • IZŅEMT - ierīces atrodas tikai tīkla šķērsojamās daļās. Tas neļauj tos atrast elementos, kurus atrisināšanas procesa laikā nevar sasniegt ierobežojumu vai barjeru dēļ. Paturiet prātā, ka iekārtas var atrasties tālāk no paredzētās vietas nekā tad, ja šī opcija netiktu atzīmēta.
  • IESKAITT - iekārtas var atrasties jebkurā no tīkla elementiem, taču risinājumus nevar izmantot objektus, kas atrodas uz ierobežotiem elementiem.

SQL izteiksme, ko izmanto, lai atlasītu avota pazīmju apakškopu, kas ierobežo tīkla elementu iespējas. Šī parametra sintakse sastāv no divām daļām: pirmā ir avota pazīmes klases nosaukums (kam seko atstarpe), bet otrā ir SQL izteiksme. Lai rakstītu SQL izteiksmi divām vai vairākām avotu pazīmju klasēm, atdaliet tās ar semikolu.

To ensure facilities are not located on limited-access highways, for example, write an SQL expression like the following to exclude those source features: "Streets" "FUNC_CLASS not in('1', '2')" .

Note that barriers ignore the feature locator WHERE clause when loading.

Choose how service area polygons are generated when multiple facilities are present in the analysis.

  • NO_MERGE —Creates individual polygons for each facility. The polygons can overlap each other.
  • NO_OVERLAP — Creates individual polygons such that a polygon from one facility cannot overlap polygons from other facilities furthermore, any portion of the network can only be covered by the service area of the nearest facility.
  • MERGE — Creates and joins the polygons of different facilities that have the same break value.

Specifies the option to create concentric service area polygons as disks or rings. This option is applicable only when multiple break values are specified for the facilities.

  • RINGS —Does not include the area of the smaller breaks. This creates polygons going between consecutive breaks. Use this option if you want to find the area from one break to another. For instance, if you create five- and 10-minute service areas, then the 10-minute service area polygon will exclude the area under the five-minute service area polygon.
  • DISKS — Creates polygons going from the facility to the break. For instance, if you create five- and 10-minute service areas, then the 10-minute service area polygon will include the area under the five-minute service area polygon.

Specifies the option to create detailed or generalized polygons.

  • SIMPLE_POLYS —Creates generalized polygons which are generated quickly and are fairly accurate. Tas ir noklusējums.
  • DETAILED_POLYS —Creates detailed polygons which accurately model the service area lines and may contain islands of unreached areas. This option is much slower than generating generalized polygons. This option isn't supported when using hierarchy.

Specifies the distance within which the service area polygons are trimmed. This is useful when your data is very sparse and you don't want the service area to cover large areas where there are no features.

No value or a value of 0 for this parameter specifies that the service area polygons should not be trimmed. The parameter value is ignored when using hierarchy.

Specify by how much you want to simplify the polygon geometry.

Simplification maintains critical points of a polygon to define its essential shape and removes other points. The simplification distance you specify is the maximum allowable offset from the original polygon from which the simplified polygon can deviate. Simplifying a polygon reduces the number of vertices and tends to reduce drawing times.

Limits how many facilities can be added to the service area analysis.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how many breaks can be added to the service area analysis.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how many features can be affected by point barriers.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how many features can be affected by line barriers.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how many features can be affected by polygon barriers.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how large the value of the Break Value parameter can be when solving time-based service areas.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Limits how large the value of the Break Value parameter can be when solving distance-based service areas.

This parameter helps you govern the amount of processing that occurs when solving. For example, you could assign a low value to this parameter for a free version of the service you are creating and use a higher value for a paid-subscription version of the service.

A null value indicates there is no limit.

Specifies the break value after which the solver will force hierarchy even if hierarchy was not enabled when solving time-based service areas.

Solving service areas for high break values while using the network's hierarchy tends to incur much less processing than solving the same service areas without using the hierarchy. This parameter helps you govern the amount of processing that occurs when solving.

A null value indicates that the hierarchy will never be enforced and the value of the Use Hierarchy in Analysis parameter will always be honored. If the input network dataset does not support hierarchy, specifying a value for this parameter will result in an error. A null value should be used in this case.

Specifies the break value after which the solver will force hierarchy even if hierarchy was not enabled when solving distance-based service areas.

Solving service areas for high break values while using the network's hierarchy tends to incur much less processing than solving the same service areas without using the hierarchy. This parameter helps you govern the amount of processing that occurs when solving.

A null value indicates that the hierarchy will never be enforced and the value of the Use Hierarchy in Analysis parameter will always be honored. If the input network dataset does not support hierarchy, specifying a value for this parameter will result in an error. A null value should be used in this case.

  • NO_SAVE_OUTPUT_LAYER —A network analysis layer isn't included in the output.
  • SAVE_OUTPUT_LAYER —The output includes a network analysis layer of the results.

In either case, a feature class with service area polygons is returned. However, a server administrator may want to choose to output a network analysis layer as well so that the setup and results of the tool can be debugged using the Network Analyst controls in the ArcGIS for Desktop environment. This can make the debugging process much easier.

In ArcGIS for Desktop , the default output location for the network analysis layer is in the scratch folder. You can determine the location of the scratch folder by evaluating the value of arcpy.env.scratchFolder geoprocessing environment. The output network analysis layer is stored as an LYR file whose name starts with _ags_gpna and is followed by an alphanumeric GUID.

Specifies the time zone or zones of the Time of Day parameter.

  • GEO_LOCAL —The Time of Day parameter refers to the time zone or zones in which the facilities are located. Therefore, the start or end times of the service areas are staggered by time zone.Setting Time of Day to 9:00 a.m., choosing geographically local for Time Zone for Time of Day, and solving causes service areas to be generated for 9:00 a.m. Eastern Time for any facilities in the Eastern Time Zone, 9:00 a.m. Central Time for facilities in the Central Time Zone, 9:00 a.m. Mountain Time for facilities in the Mountain Time Zone, and so on, for facilities in different time zones.If stores in a chain that span the U.S. open at 9:00 a.m. local time, this parameter value could be chosen to find market territories at opening time for all stores in one solve. First, the stores in the Eastern Time Zone open and a polygon is generated, then an hour later stores open in Central Time, and so on. Nine o'clock is always in local time but staggered in real time.
  • UTC —The Time of Day parameter refers to Coordinated Universal Time (UTC). Therefore, all facilities are reached or departed from simultaneously, regardless of the time zone or zones they are in.Setting Time of Day to 2:00 p.m., choosing UTC, then solving causes service areas to be generated for 9:00 a.m. Eastern Standard Time for any facilities in the Eastern Time Zone, 8:00 a.m. Central Standard Time for facilities in the Central Time Zone, 7:00 a.m. Mountain Standard Time for facilities in the Mountain Time Zone, and so on, for facilities in different time zones.

The scenario above assumes standard time. During daylight saving time, the Eastern, Central, and Mountain Times would each be one hour ahead (that is, 10:00, 9:00, and 8:00 a.m., respectively).

Irrespective of the Time Zone for Time of Day setting, all facilities must be in the same time zone when Time of Day has a nonnull value and Polygons for Multiple Facilities is set to create merged or nonoverlapping polygons.

Choose the mode of transportation for the analysis. CUSTOM is always a choice. For other travel mode names to appear, they must be present in the network dataset specified in the Network_Dataset parameter. (The arcpy.na.GetTravelModes function provides a dictionary of the travel mode objects configured on a network dataset, and the name property returns the name of a travel mode object.)

A travel mode is defined on a network dataset and provides override values for parameters that, together, model car, truck, pedestrian, or other modes of travel. By choosing a travel mode here, you don't need to provide values for the following parameters, which are overridden by values specified in the network dataset:


Writing helper Python functions with arcpy

If you have been working with arcpy for some time now, you might have found at some point that you re-use the same chunks of code in various modules and making changes in one place requires making modifications in other files involved.

At this stage, you should consider wrapping those bits of code into a function. This will make it easier to organize your code and make modifications as your project grows. Another thing with arcpy is that you might finding yourself going through the same procedure when starting working on a project. For instance, you set up a workspace, supply a feature class path, use the arcpy.da cursor to get values from a column and then start doing some analysis based on that. You may of course have multiple projects each of which will require a different setup, but this one is fairly common among many developers.

It is may be a good time at which you would need to compile a site package or just a helper module that will contain the functions and methods you need to use regularly.

An excellent example of compiled package of arcpy helper functions can be found here on github the package is called arcapi. Caleb and Filip have done a great job putting together dozens of useful functions that nearly every arcpy developer uses daily. Take a look at the amazing work they have done.

So, for instance, you often need a sorted list of unique values within a column in a feature class. You could write a helper function that will return a sorted list and keep in a helper module apart from your project where you focus on implementing the business logic.

def select_distinct ( input_fc , input_field ):
'''returns a list of unique values in a field sorted'''
sql = ( None , 'GROUP BY <0>' . format ( input_field ))
cur = arcpy . da . SearchCursor ( in_table = input_fc , field_names = [ "<0>" . format ( input_field )],
sql_clause = sql )
unique_values = [ f [ 0 ] for f in cur ]
return sorted ( unique_values )

Provided this function is stored within a separate module named arcpy_helper.py, it’s just about importing this module and calling

arcpy_helper. select_distinct ( “path_to_fc ,” input_field_name” )

Much less code, much more productive.

Sometimes it’s not about bringing in a new piece of functionality though, but rather about writing less code.

Compare two function calls:

fields = [field.name for field in arcpy.ListFields(in_fc,field_type=”DOUBLE”)]

Both of this calls will give you a list of fields of double type found in a feature class or a table. However, the second one is much shorter. If you need to run this piece of code just once, you are OK. But if you call it fairly often throughout the module, you can save a lot of space by using a wrapper function (sometimes referred to as syntactic sugar) that is more concise and can improve the code readability.

However, be cautious when trying to implement a functionality that you think is missing in arcpy, because there is a chance there is a ready-to-use geoprocessing tool for that. For instance, when you need to find out how many times a certain value is found in a column, the Summary Statistics GP tool can be used. When trying to remove the duplicate rows or features, the Delete Identical GP tool can be used.

But in other cases, it might be worth wrapping a chunk of code you think you will need “just for this project” into a helper function. You can collect those and at some point of time you will realize how much time you save by calling them instead searching through the projects’ code looking for a code snippet you need.

I will leave you with a helper function I’ve written for listing out fields where there are no values stored (i.e., all rows have NULL).

import arcpy
def get_fields ( input_fc , only_field_type = "String" , not_null = True ):
'''returns list of field names of specified data type and contain at
least one not NULL value'''
if not not_null :
all_fields = [ field . name for field in arcpy . ListFields ( in_fc , field_type = only_field_type )]
return all_fields
else :
all_fields = [ field . name for field in arcpy . ListFields ( in_fc , field_type = only_field_type )
if field . isNullable != "False" ]
#getting a dict
fields_dict = < field : list ( set ([ feature [ all_fields . index ( field )]
for feature in arcpy . da . SearchCursor ( in_fc , all_fields )]))
for field in all_fields >
null_fields = [ k for k , v in fields_dict . iteritems () if v == [ None ]]
not_null_fields = list ( set ( all_fields ). symmetric_difference ( set ( null_fields )))
return not_null_fields

Rate this:


This book provides the recipes you need to use Python with AcrGIS for more effective geoprocessing. Shortcuts, scripts, tools, and customizations put you in the driving seat and can dramatically speed up your workflow.

  • Learn how to create geoprocessing scripts with ArcPy
  • Customize and modify ArcGIS with Python
  • Create time-saving tools and scripts for ArcGIS

ArcGIS is an industry standard geographic information system from ESRI.

This book will show you how to use the Python programming language to create geoprocessing scripts, tools, and shortcuts for the ArcGIS Desktop environment.

This book will make you a more effective and efficient GIS professional by showing you how to use the Python programming language with ArcGIS Desktop to automate geoprocessing tasks, manage map documents and layers, find and fix broken data links, edit data in feature classes and tables, and much more.

"Programming ArcGIS 10.1 with Python Cookbook" starts by covering fundamental Python programming concepts in an ArcGIS Desktop context. Using a how-to instruction style you’ll then learn how to use Python to automate common important ArcGIS geoprocessing tasks.

In this book you will also cover specific ArcGIS scripting topics which will help save you time and effort when working with ArcGIS. Topics include managing map document files, automating map production and printing, finding and fixing broken data sources, creating custom geoprocessing tools, and working with feature classes and tables, among others.

In "Python ArcGIS 10.1 Programming Cookbook" you’ll learn how to write geoprocessing scripts using a pragmatic approach designed around an approach of accomplishing specific tasks in a Cookbook style format.