2. Agenda
• Hva er python og hvorfor bruke det?
• Grunnleggende om python
• ArcGISfunksjonalitet i python
• Feilhåndtering
• Automatisere oppgaver
• Beskrive data
• Lage scriptverktøy
3. 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 powerful
dynamic programming language that is
used in a wide variety of application
domains.» - python.org
4. 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
5. 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
7. 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
8. 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
9. 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
1
2
3
4
10. 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")
11. 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
13. 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)
14. 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
15. 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)
16. Feilhåndtering i Python
• Try, Except
Prø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())
18. ArcPy-funksjoner
• Utføre nyttige oppgaver
• Liste data, eks: ListFeatureClasses
• Hente dataegenskaper, eks: Describe
• Mulighet for automatisering av
manuelle oppgaver
19. 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
20. 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)
21. 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"
25. 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)
26. 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
27. 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