Är du en van användare av ArcGIS och nyfiken på men oerfaren inom Python? Har du också förstått att du kan underlätta flera trista och repetitiva uppgifter i arbetet med skript? För att hjälpa dig har jag skapat tre kodsnuttar som assisterar dig med vanliga GIS-relaterade uppgifter, så att du så enkelt som möjligt kan komma igång med Python i ArcGIS.
Ett bra sätt att lära sig Python i ArcGIS är att använda det på uppgifter som du redan kan lösa utan att använda kod. På så sätt vet du vilket resultat du vill uppnå och vad som ska hända på vägen dit. Det hjälper dig att följa med och förstå vad som sker i koden.
De tre kodsnuttar jag tagit fram är just några sådana, det vill säga tre saker du antagligen redan är van att klicka dig fram till direkt i ArcGIS Pro. Skillnaden här är att det färdiga skriptet sköter klickandet åt dig. Behöver du upprepa proceduren senare på en annan karta eller dataset kan du ta samma skript och köra igen. Och igen. Och igen.
I början är skripten simpla men i takt med att du lär dig kommer du kunna göra dem alltmer avancerade.
1. Konfigurera etiketter med Python
Det första skriptet kommer att konfigurera etiketter för ditt lager. Här är skriptet jag använt:
def FindLabel ([lamningtyp]): return [lamningtyp]
Så här ser min karta ut innan jag har klistrat in och kört skriptet. Som du ser finns inga etiketter utskrivna, men det ska min Pythonkod strax lösa.
Jag klickar mig in i Label properties och väljer Python som språk. I rutan för Expression skriver jag in mitt uttryck, det vill säga koden.
Här ser du var koden är inklistrad, och hur kartan ser ut när skriptet har körts.
Vill du göra uttrycket lite svårare kan du lägga till några rader. Jag vill att etiketterna visas i olika färger beroende på ett värde i ett annat fält, alternativt ändra storleken på etiketterna, och lägger därför till en if-sats. En if-sats gör att du till exempel kan visualisera data på ett sätt om det uppfyller vissa villkor, eller på ett annat sätt om de inte gör det.
Skriptet ser nu ut så här:
def FindLabel ([lamningtyp],[placering]): if [placering] =="Ej synlig ovan mark": return "" + [lamningtyp] + "" else: return "" + [lamningtyp] + ""
Nu är skriptet något utökat. Kopiera och testa på din karta och jämför med vad som står i koden.
2. Skript som påverkar flera lager samtidigt
I nästa exempel vill jag att mitt skript ska påverka flera lager samtidigt. Det här är användbart om du har flera stora lager men bara är intresserad av ett specifikt område. I stället för att klippa, skapa buffertzon eller liknande lager för lager, kan en så kallad for-loop göra detta åt dig.
Skriv in de lager som ska klippas i en lista. Den listan loopar Python och klipper alla angivna lager, med bara tre rader kod.
Jag kommer använda ett skript som, när det har körts, klipper i samtliga lager som finns i min definierade lagerlista (i det här fallet alla mina lager). Då skapas en kopia av lagren med ändelsen _clip där enbart de data som ligger inom mitt cirkellager är kvar.
Det här är koden jag använder:
Layers=['Skane_bilnat', 'Skane_cykelnat', 'Skane_gangnat', 'Kult_byggnader', 'Lämningar', 'Skyddsområde_byggnader' ] for L in Layers: arcpy.analysis.Clip(L, 'Område', f'{L}_clip')
Innan jag har kört skriptet ser min karta ut så här.
Så här blir resultatet när de sex lagren i listan (Skane_bilnat, Skane_cykelnat, Skane_gangnat, Kult_byggnader, Lämningar, Skyddsområde_byggnader) har klippts:
När skriptet har körts syns bara information som är lokaliserad inom den angivna cirkel för alla lager som finns i kartan.
3. Rensa bort data i tabeller
Tredje skriptet rensar och sorterar en attributtabell och skriver över den till en ny csv med enbart de kolumner jag vill ska visas. Det här är användbart när du vet att du bara behöver vissa data i ett större dataset, och vill slippa gå in och radera manuellt.
För att få fram skriptet använder jag bland annat ArcPy och Python-biblioteket Pandas, och skapar en ny DataFrame från lagrets attributtabell.
Här är skriptet jag använt:
import pandas as pd import arcpy from arcgis.features import GeoAccessor import csv df=pd.DataFrame.spatial.from_featureclass(’Lämningar_clip’) df.columns NewCols=[’OBJECTID’,’lamningsnr’,’raa_nummer’,’lamningtyp’,’beskrivn’, ’placering’,’lan’,’kommun’,’socken’] for col in df.columns: if col not in NewCols: df.drop(col, axis=1, inplace=True) df.to_csv(r’C:\Projekt\PythonScripts\Pythonscript\newTable.csv’)
Den här gången syns förändringen inte så mycket på kartan som direkt i tabellen.
Kom igång med python i ArcGIS du också
Jag hoppas dessa tre exempel hjälper dig som vill komma igång med Python i ArcGIS, och att du sedan går vidare och skapar egna och mer avancerade skript som underlättar mer komplexa uppgifter.