bk2015 kom i gang med pythonskritping
TRANSCRIPT
Agenda
• Hva er python og hvorfor bruke det?
• Grunnleggende om python
• ArcGISfunksjonalitet i python
• Feilhåndtering
• Automatisere oppgaver
• Beskrive data
• Lage scriptverktøy
Hva er Python?
• Skriptspråket til ArcGIS
• Fordeler:• Open source gratis å bruke
• Virker på de fleste platformer
• Enkelt å lære
• Stort bibliotek
• Raskt
«Python is a remarkably powerfuldynamic programming language that is used in a wide variety of applicationdomains.» - python.org
Hvorfor bruke Python med ArcGIS?
• Automatisere repeterende oppgaver
• Lage egne og tilpassede verktøy
• Lage egne verktøy som tjenester til web applikasjoner
• Utvide mulighetene i ArcGIS
Python 1-2-3
• Hvor skriver man Python kode?• Python-vindu i ArcGIS
• IDE (Integrated Developer Environment)
• PyScripter
• PythonWin
• IDLE
• ...
Pythonfiler er tekstfiler med .py filendelse
Python 1-2-3
• Variabel:• Et navn som lagrer en verdi:
• Navn = verdi
inndata = "C:/Data/Vegtrase.shp"
utdata = "C:/Data/VegtraseBuffer.shp"
avstand = 50
# Variable fungerer som erstatning for selve verdien
arcpy.Buffer_analysis(inndata, utdata, avstand)
"C:/Data/Vegtrase.shp"
Variabel Verdi
Stringverdier:
Inndata = "C:/Data/Vegtrase.shp"
Tallverdier:
Avstand = 50
Python 1-2-3
• Hva er en liste?• En samling av verdier eller
objekter [..., ..., ...]
• En kan iterere gjennom hver verdi i listen
liste =["C:/Data/Arealtype.shp", "C:/Data/Eiendom.shp"]
Verdi i listen
Python 1-2-3
• Løkker:• While-løkker og for-løkker
• Kolon eller while/for
• Innrykk bestemmer hva som kjøres når betingelsen til løkka er oppfylt
X = 1
1 < 5?
Ja x = 1 +1 = 2
x = 1
while x < 5:
print(x)
x = x + 1
x = [1, 2, 3, 4]
for num in x:
print(num)
X = 2
2 < 5?
Ja x = 2 +1 = 3
X = 4
4 < 5?
Ja x = 4 +1 = 5
X = 3
3 < 5?
Ja x = 3 +1 = 4
X = 5
5 < 5?
Nei
1234
Python 1-2-3
• If, else betingelser• Sammenligning av verdier som betingelse
• Kolon etter betingelsen
• Innrykk sier hva som skal kjøres
• ==, >, <, != brukes for test av betingelsen
var = "a"
if var == "a":
# Kjør linjer som er rykket inn
print("variabelen er a")
else:
print("variabelen er ikke a")
ArcPy
• Site package som legger til ArcGIS-funksjonalitet i Python
• Tilgang til 800+ geoprosesseringsverktøy
• Funksjoner, klasser og moduler• Hjelpefunksjoner som ListFeatureClasses, Describe
• Klasser som kan brukes til å lage komplekse objekter som SpatialReference, FieldMap
• Moduler som inneholder spesialisert funksjonalitet som Mapping, SpatialAnalyst, NetworkAnalyst, DataAccess
Kjøre geoprosesseringsverktøy - oppsummert
• Import arcpy
• Følg verktøysyntaks• Arcpy.toolname_toolboxalias()
• Legg inn parametere
• Hvordan effektivt finne koden for et verktøy
• Hjelpeteksten for verktøyet har pythoneksempel og syntaksbeskrivelse
• Kjør verktøy i ArcMap og kopier som python snippet
• Bruk pythonvinduet
• Help(arcpy.Buffer_analysis)
Geoprosessering miljøinnstillinger
• Bruk geoprosesseringmiljø som globale parametere• Se hjelpetekst for hvilke innstillinger som støttes for et verktøy
• Enkelt å endre kun ett sted
• Arcpy.env
arcpy.env.workspace = "C:/Data"
arcpy.env.extent = "0 0 100 100"
arcpy.env.outputCoordinateSystem = 4326 #WKID
arcpy.env.overwriteOutput = True
Håndtere feil
• Hvorfor oppstår feil?• Feil bruk av verktøy, skrivefeil, syntaksfeil ….. Bugs
• Hva gjør du?• Se på geoprosesseringsmeldinger
• Bruk et IDE for å sjekke linje for linje (debug)
Feilhåndtering i Python
• Try, ExceptPrøv å gjør noe og hvis en feil oppstår, gjør noe annet
# Start Try blokken
try:
arcpy.Buffer_analysis("C:/Temp/Vegtrase.shp", … )
# Hvis en feil oppstår gå til except
except:
# Skriv at buffer feilet og hvorfor
print("Buffer feilet")
print(arcpy.GetMessages())
ArcPy-funksjoner
• Utføre nyttige oppgaver• Liste data, eks: ListFeatureClasses
• Hente dataegenskaper, eks: Describe
• Mulighet for automatisering av manuelle oppgaver
Batch-prosessering
• Automatisere en operasjon til å kjøre flere ganger
• Eksempler:• Klipp alle featureklasser i en geodatabase til et polygon
• Beregne statistikk for alle raster i en mappe
• Bruker Liste-funksjoner i Python for batch-prosessering
ListFeatureClasses
• Arcpy.ListFeatureClasses
# Angi workspace
arcpy.env.workspace = "C:/Data/ProsjektGDB.gdb"
# Få en liste av alle geoobjektklasser
fcList = arcpy.ListFeatureClasses()
# Rapporter navnet på geoobjektklassene
for fc in fcList:
print(fc)
Describe - Få egenskaper for datasett
• Describe-funksjoner leser data-egenskapene
• Returnerer et objekt med egenskaper• Data type
• Shape type
• Spatial Reference
• Felter
# Beskrive en geoobjektklasse
desc = arcpy.Describe("C:/Temp/Vegtrase.shp")
print(desc.shapeType)
>>> "Polyline"
Cursor
• SearchCursor
• InsertCursor
• UpdateCursor
• Data access module (da)• da.SearchCursor
• da.InsertCursor
• da.UpdateCursor
fc = "C:/Temp/Land.shp"
cursor = arcpy.SearchCursor(fc)
for row in cursor:
print(row.getValue("Navn")
verdier = [row[0] for row in arcpy.da.SearchCursor(fc, "Navn")]
unikeverdier = set(verdier)
print(unikeverdier)
Oppsummering
• Integrated Development Environment• Pyscripter, PyWin ++
• ArcPy• Alle geoprosesseringsverktøy• Hjelpefunksjoner som Describe, ListFeatureClasses, SearchCursor, +++
• Finn riktig syntaks• ArcGIS Hjelp, python snippet, python window• Søk i python brukerforum
• Feil håndtering• Try... except…• GetMessages()• Debug linje for linje i IDE
• Skript verktøy
Lære mer?
• Kurs: Introduksjon til geoprosessering med scripting i Python• 3 dager• Python scriptemiljø• Bruke cursorer, beskrive objekter og administrere og oppdatere data• Utføre geoprosesseringsoperasjoner• arcpy.mapping for automatisering av kartdokument• Teknikker for å sikre riktig syntaks og feilhåndtering• Opprette egendefinerte script-verktøy• Geoprosesseringspakker og deling
• Web kurs:• http://training.esri.com/gateway/index.cfm?fa=search.results&searchterm=python
Python og arcpy-ressurser
• http://resources.arcgis.com• Python, Analysis
• http://arcpy.wordpress.com
• http://pro.arcgis.com/en/analysis/python
• http://www.python.org