Viac

Kód štandardizátora adries v pythone pre pouličnú triedu funkcií


V mojom systéme mám funkciu triedy a ulicu.

Kategória funkcie: Ulica

Vstupné polia: NAME; STREET_PREFIX; STREET_NAME; STREET_TYPE; STREET_SUFFIX

výstupné polia: ADDR_PD; ADDR_PT; ADDR_SN; ADDR_ST; ADDR_SD

Chcem štandardizovať vstupné polia a hodnoty by mali prechádzať po výstupných poliach. Ako však vytvoriť skripty adries štandardizátora pre vyššie uvedenú triedu funkcií, v ktorej máme vstupy a výstupy v rovnakej triede funkcií.

databáza v mierke 11 g a pyhton2.6.5


Ako mnoho projektov GIS, aj táto úloha má niekoľko fáz. Najprv sa musíte zoznámiť so svojimi údajmi. Keď viete, s čím pracujete, môžete si vytvoriť automatizáciu, aby ste dosiahli svoj cieľ.

Na štandardizáciu údajov musíte najskôr poznať všetky svoje počiatočné hodnoty. Zdá sa, že pole Street Type je predmetné pole v tomto konkrétnom cvičení, takže sa na to zameriam.

V ArcGIS otvorte v okne obsahu svoju vrstvu ciest v okne python. Je to na vašom štandardnom paneli s nástrojmi.

Na spoznanie svojich jedinečných hodnôt použite malý kód takto:

roadTypes = list (set ([rd for rd in arcpy.da.SearchCursor ("Street_Centerline", "Street Type")])))

Potom:

pre typ v roadTypes: typ tlače

Teraz máte vytlačené všetky vaše rôzne typy ciest. Budete musieť nejaký čas zistiť, ako chcete zoskupiť typy ciest. Nájdite napríklad všetky hodnoty, ktoré chcete previesť na RD.

Ak máte excel, skopírujem a prilepím vaše vytlačené hodnoty do excelu, aby sa s údajmi ľahko pracovalo.

Tu začnete byť trochu kreatívni. Napríklad pamätajte, že existuje metóda.veľa ()pre reťazce, ktoré vám umožňujú ignorovať prípady. Ak si tiež všimnete, že všetky hodnoty, ktoré začínajú písmenom „R“, sú cesty, môžete túto metódu použiť. začína s („R“)

Keď máte všetky svoje skupiny pohromade, je čas napísať konečný kód na konverziu údajov. Polná kalkulačka v ArcGIS by na túto úlohu fungovala dobre, ale keďže ste požiadali o prácu v pythone, poskytnem vám základy.

MôžeteUpdateCursor, ale použijemeCalculateField_managementtu.CalculateField_managementbude potrebovať päť vstupov - vašu triedu funkcií, pole na výpočet, výraz, typ výrazu a blok kódu. Prvé dve sú ľahké, posledné tri sú o niečo ťažšie.

Pretože naším blokom kódu a výrazom bude kód pythonu, použijeme„PYTHON_9,3“pre typ výrazu. Náš kódový blok bude pozostávať z definovania funkcie. Táto funkcia je miesto, kde musíte vytvoriť sériuif/elif/elsevyhlásenia, ktoré vyhovujú vašim údajom. Nakoniec váš výraz zavolá funkciu. V nižšie uvedenom kóde používam veľké hodnoty, ktoré odovzdávam funkcii, aby to bolo jednoduchšie.

Kód (nevyskúšaný):

import arcpy #Path to roads feature class roadsFC = r "{Feature  class  full  path}" #Field to count calcFld = "Std Street Type" #Field to analyze anFld = "Street Type" #Code block codeblock = "" "def Standardize_Road_Type (inVal): if inVal.startswith (" R "): return" RD "elif inVal in [" PL "," PLACE "]: return" PL "elif inVal in [" PARKWAY "," PKWY ", "PARKWY"]: vráti "PKWY" elif inVal.startswith ("C"): vráti "CT" "" "#Calculate pole arcpy.CalculateField_management (roadsFC, calcFld, 'Standardize_Road_Type (! {0} !. upper ()) '.format (anFld), "PYTHON_9.3", kódový blok)

Veľa štastia! Šťastné pythonovanie!


Pozri si video: Как создавать собственные функции в Python (Október 2021).