bk2015 kom i gang med pythonskritping

29
Kom igang med Pythonskripting Margrete Schei Olsen

Upload: geodata-as

Post on 16-Jul-2015

78 views

Category:

Technology


2 download

TRANSCRIPT

Kom igang med Pythonskripting

Margrete Schei Olsen

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

• Hvordan kjører et pythonscript?• ArcGIS

• IDE

• Dobbeltklikk

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

DEMOKjøre geoprosesseringsverktøy

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

DEMODebugging og feilhåndtering

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"

DEMOBruk av ListFeatureClass og Describe for automatisering og batchprosessering

Scriptverktøy

• Toolbox (.tbx)

DEMOLage egne skriptverktøy

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

Spørsmål?