kom i gang med pythonskritping - esri norsk bk 2014
TRANSCRIPT
Kom i gang med PythonskriptingÅshild Lysaker, Geodata AS
Agenda
• Hva er python og hvorfor bruke det
• Grunnleggende om python
• Hvor skrive python kode?
• ArcGIS funksjonalitet i python - hva er ArcPy?
• Feilhåndtering
• Automatisere oppgaver
• Beskrive data
• Lage script verktøy
• Hvordan lære mer…
Hva er Python ?
• Skriptspråket til ArcGIS
• Fordeler:
– Open source gratis å bruke og dele
– Støtter de fleste plattformer
– Enkelt å lære
– Stort bibliotek
– Rask
– Stor brukergruppe
– Mange gratis tillegg
«Python is a remarkably powerfuldynamic programminglanguage that is used in a wide variety ofapplication domains.» - python.org
Hvorfor bruke Python med ArcGIS?
• Automatisere repeterende oppgaver
• Lage egne og tilpassede verktøy
• Tilpasse Desktop applikasjonene med egne verktøylinjer
• Legge egne verktøy som tjenester i web applikasjoner
• Scheduled Task
• Utvide mulighetene i ArcGIS
Grunnleggende om Python
• Hvor skriver jeg Python kode ?
– Python fil er en tekstfil med .py filendelse
– IDE (Integrated Developer Environment)
• PyScripter (Gratis)
• Wing IDE
• …
– Python vindu i ArcGIS
• Hvordan kjører python script ?
– Dobbeltklikk
– IDE
– ArcGIS
Grunnleggende om Python
• Hva er variabel ?
– Et navn som lagrer en verdi:
navn = verdi
• Hva er liste ?
– en samling av verdier [ …, … ,…]
– Kan brukes til å løpe gjennom hver verdi i listen
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)
liste =["C:/Data/Arealtype.shp", "C:/Data/Eiendom.shp"]
Grunnleggende om Python
• Teknikker for iterasjon
– while, for
– Kolon etter while/for
– Innrykk bestemmer hva som kjøres
x = 1
while x < 5:
print(x)
x = x + 1
x = [1, 2, 3, 4]
for num in x:
print(num)
Grunnleggende om Python
• Python har logikk for testing av betingelser
– if, else
– ==, >, <, != 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")
Byggesteiner i Python
• Funksjon:
– en definert funksjonalitet som gjør en bestemt oppgave. Krever
argumenter inn
• Modul:
– en python fil hvor alle funksjoner er definert: Import
– Python har mange innebygde moduler:
os, math, datetime, …
• Package:
– en samling av relaterte moduler
math.sqrt(100)
Modulen «math» Funksjonen «sqrt»
ArcPy
• Site package som legger til ArcGIS funksjonalitet i Python
• Tilgang til 800+ geoprosesseringsverktøy
• Funksjoner, klasser og moduler
– Hjelpefunksjoner:
• ListFeatureClasses
• Describe
– Klasser som kan brukes til å lage komplekse objekter:
• SpatialReference
• FieldMap
– Moduler for spesialisert funksjonalitet:
• Mapping
• SpatialAnalyst
• NetworkAnalyst
• DataAccess
ArcGIS Python vinduet
• Interaktivt Pyhon vindu i ArcGIS Desktop
• Få tak i Python og moduler innenfor ArcGIS applikasjoner
• God syntakshjelp, fint miljø for å lære
DEMO
Kjøre geoprosesseringsverktøy
• Import arcpy
• Følg verktøy syntaks
– arcpy.toolname_toolboxalias()
– Legg inn parametere
• Hvordan effektivt finne koden for et verktøy
– Hjelpeteksten for verktøyet har python eksempel og syntaks beskrivelse
– Kjør verktøyet og kopier som python snippet
– Bruk python vinduet
– help(arcpy.Buffer_analysis)
Geoprosessering miljøinnstillinger
• Bruk geoprosesseringsmiljø som globale parametere
– Se hjelpeteksten 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
– Bruke python feilhåndtering
– Bruk et IDE for å sjekke linje for linje (debug)
import arcpy
arcpy.Buffer_analysis("C:/Temp/Vegtrasse.shp", "C:/Temp/Buffer.shp", 1000)
Meldinger fra geoprosesseringsverktøy
• Tre typer meldinger
– Info (0), warning (1), error (2)
• Vises i python vinduet
• Feil vist i IDE
• arcpy.GetMessages()
arcpy.Buffer_analysis("C:/Temp/Vegtrase.shp", "C:/Temp/Buffer.shp", 1000)
print arcpy.GetMessages()
Feilhåndtering i Python
• Try… Except…
• Innrykk styrer hva som testes for feil
# 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())
DEMO
ArcPy funksjoner
• Utføre nyttige oppgaver
– Liste data, eks. ListFeatureClasses
– Hente data egenskaper, eks Describe
• Gir deg 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
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)
Få data egenskaper
• 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"
DEMO
Lage et skript verktøy
• Toolbox (.tbx)
• Python toolbox
– .pyt
DEMO
Cursorer
• SearchCursor
• InsertCursor
• UpdateCursor
• Data access modul
# Legge til kolonne som rangerer areal
fc = "C:/BK2014/ProsjektGDB.gdb/DekTeigFlate"
arcpy.AddField_management(fc, "Rangering", "Long")
cursor = arcpy.UpdateCursor(fc, fields="Rangering", sort_fields= "Shape_Area D")
n = 1
for row in cursor:
row.setValue("Rangering", n)
cursor.updateRow(row)
n = n + 1
with arcpy.da.UpdateCursor(fc, ["Rangering"], sql_clause=(None, "order by Shape_Area DESC"))
as cursor:
for row in cursor:
row[0] = n
cursor.updateRow(row)
n = n + 1
13000 flater 70 sekunder
13000 flater 1.5 sekunder
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
Oppsummering
• Integrated Development Environment
– Pyscripter, Wing, ++
• 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
• Automatisering
• Skript verktøy
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
SPØRSMÅL ?