kom i gang med pythonskritping - esri norsk bk 2014

30
Kom i gang med Pythonskripting Åshild Lysaker, Geodata AS

Upload: geodata-as

Post on 20-Feb-2017

394 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Kom i gang med pythonskritping - Esri norsk BK 2014

Kom i gang med PythonskriptingÅshild Lysaker, Geodata AS

Page 2: Kom i gang med pythonskritping - Esri norsk BK 2014

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…

Page 3: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 4: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 5: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 6: Kom i gang med pythonskritping - Esri norsk BK 2014

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"]

Page 7: Kom i gang med pythonskritping - Esri norsk BK 2014

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)

Page 8: Kom i gang med pythonskritping - Esri norsk BK 2014

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")

Page 9: Kom i gang med pythonskritping - Esri norsk BK 2014

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»

Page 10: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 11: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 12: Kom i gang med pythonskritping - Esri norsk BK 2014

DEMO

Page 13: Kom i gang med pythonskritping - Esri norsk BK 2014

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)

Page 14: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 15: Kom i gang med pythonskritping - Esri norsk BK 2014

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)

Page 16: Kom i gang med pythonskritping - Esri norsk BK 2014

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()

Page 17: Kom i gang med pythonskritping - Esri norsk BK 2014

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())

Page 18: Kom i gang med pythonskritping - Esri norsk BK 2014

DEMO

Page 19: Kom i gang med pythonskritping - Esri norsk BK 2014

ArcPy funksjoner

• Utføre nyttige oppgaver

– Liste data, eks. ListFeatureClasses

– Hente data egenskaper, eks Describe

• Gir deg automatisering av manuelle oppgaver

Page 20: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 21: Kom i gang med pythonskritping - Esri norsk BK 2014

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)

Page 22: Kom i gang med pythonskritping - Esri norsk BK 2014

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"

Page 23: Kom i gang med pythonskritping - Esri norsk BK 2014

DEMO

Page 24: Kom i gang med pythonskritping - Esri norsk BK 2014

Lage et skript verktøy

• Toolbox (.tbx)

• Python toolbox

– .pyt

Page 25: Kom i gang med pythonskritping - Esri norsk BK 2014

DEMO

Page 26: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 27: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 28: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 29: Kom i gang med pythonskritping - Esri norsk BK 2014

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

Page 30: Kom i gang med pythonskritping - Esri norsk BK 2014

SPØRSMÅL ?