Podívejte se na Python Tips and Tricks for ArcGIS školící seminář, kde @DerekNelson1 a já předvádíme desítky strategií, které vám pomohou automatizovat opakující se úkoly a složité pracovní postupy.
Než začnete od nuly, podívejte se po existujících řešeních.<\/STRONG><\/P>Je velmi pravděpodobné, že někdo jiný měl podobný problém a vytvořil Python modul, který můžete použít k jeho vyřešení. <\/P>ArcPy je pro typy úkolů, které byste dělali v ArcGIS Pro.<\/STRONG><\/P>Pokud chcete automatizovat geoprocesní úkoly nebo pracovat s místními soubory a databázemi, knihovna ArcPy má Python funkce, které napodobují věci, které můžete dělat ručně v grafickém uživatelském rozhraní.<\/P>ArcGIS API for Python je pro typy úkolů, které byste dělali ve svém portálu.<\/STRONG><\/P>Automatizace správy uživatelů, skupin a obsahu ve vašem ArcGIS Online nebo ArcGIS Enterprise portálu je skvělý případ použití pro ArcGIS API for Python. Python API má také nástroje pro vytvoření Spatially Enabled DataFrame z místních dat nebo feature služeb. To je rozšíření Pandas DataFrame, takže přichází se všemi výhodami Pandas tabulární manipulace s daty spolu s prostorovými vlastnostmi a metodami pro práci s geografickými daty.<\/P>Notebooks jsou skvělé pro výuku, sdílení a vyprávění příběhů pomocí kódu.<\/STRONG><\/P>Možnost rozdělit kód do buněk, přidat markdown k vysvětlení kódu a zahrnout výstup do notebooku z nich dělá mocné nástroje pro iteraci vašeho kódu a pomáhají ostatním pochopit kontext a důležitost práce reprezentované v notebooku.<\/P>IDE má silné nástroje, které usnadňují psaní kódu.<\/STRONG><\/P>Integrované vývojové prostředí jako PyCharm nebo VS Code zahrnuje sofistikované ladicí nástroje, detekci chyb a varování, automatické lintování a užitečné nástroje pro dokončování kódu, které usnadňují psaní velkého množství kódu. Dokonce se stává běžným, že IDE integrují AI asistenty kódu pro další urychlení vývoje.<\/P>Správa Python prostředí je obtížná. Očekávejte problémy.<\/STRONG><\/P>Každý modul v Python prostředí musí být kompatibilní s každým jiným prostředím. Může být snadné nechtěně poškodit své prostředí jemnými způsoby.<\/P>Používejte výchozí Python prostředí ArcGIS Pro pro minimalizaci problémů.<\/STRONG><\/P>Naštěstí má prostředí arcgispro-py3 dodávané s ArcGIS Pro sadu balíčků kurátorovaných vývojáři Esri, která obsahuje knihovny potřebné pro většinu GIS úkolů. Protože toto výchozí prostředí nelze měnit, vždy budete mít alespoň jedno funkční Python prostředí při práci s ArcGIS Pro.<\/P>Klonujte výchozí prostředí pro vytvoření vlastního prostředí.<\/STRONG><\/P>Pro případy, kdy potřebujete další knihovny, které nejsou součástí arcgispro-py3, můžete klonovat výchozí prostředí a přidat tyto knihovny přes Správce balíčků na kartě Projekt v ArcGIS Pro. Máte přístup k tisícům Python knihoven přes conda, které můžete instalovat z rozhraní.<\/P>Používejte conda pro pokročilou správu prostředí. Pokud možno se vyhněte pip.<\/STRONG><\/P>Některé pokročilé úkoly vyžadují složitější správu prostředí než lze provést přes rozhraní ArcGIS Pro. Můžete přistupovat ke conda z příkazového řádku pro tyto úkoly, například specifikovat konkrétní kanál pro získání balíčku nebo exportovat své prostředí jako textový soubor. I když je možné instalovat balíčky pomocí pip, riskujete instalaci nekompatibilních balíčků, protože pip plně neřeší všechny závislosti ve vašem prostředí. Někdy musíte použít pip, pokud balíček není dostupný v žádném conda kanálu, ale je lepší se mu vyhnout pokud možno.<\/P>Mějte na paměti závislosti balíčků/knihoven a licence uvedené ve Správci balíčků.<\/STRONG><\/P>Správce balíčků vám pomůže identifikovat závislosti všech vašich nainstalovaných knihoven. Také poskytne odkaz na licenci jakýchkoli balíčků dostupných k instalaci, takže si můžete být jisti, že licenční požadavky jsou kompatibilní s vaším použitím.<\/P>Odeslat do Python okna/Notebooku.<\/STRONG><\/P>Můžete přetáhnout nástroj z panelu Geoprocessing do Python okna pro získání správné syntaxe nástroje. V novějších verzích ArcGIS Pro jej můžete také přetáhnout do ArcGIS Notebooku.<\/P>Využijte existující zdroje jako ModelBuilder modely.<\/STRONG><\/P>Pokud již máte model provádějící úkol, nemusíte jej přepisovat od začátku pro použití v Python skriptu. Můžete model volat jako geoprocesní nástroj ve svém skriptu. Také máte možnost nechat ArcGIS Pro exportovat váš model jako Python kód.<\/P>Zkontrolujte existenci souborů a feature tříd před spuštěním kódu na nich.<\/STRONG><\/P>Funkce Exists otestuje, zda daný datový objekt skutečně existuje nebo ne. Pokud neexistuje, můžete přeskočit spuštění části kódu. Strategie časných návratů pomáhají vašemu kódu běžet rychleji.<\/P>Zkontrolujte existenci řádků/hodnot před spuštěním.<\/STRONG><\/P>I když datový objekt existuje, může mít prázdná data. Můžete použít funkci GetCount, abyste zjistili, zda je tabulka prázdná a podle toho přeskočit vykonání kódu.<\/P>Parametrizujte prvky modelu, aby umožnily vstup uživatele.<\/STRONG><\/P>Modely s parametry se snáze začleňují do skriptu, protože můžete programově vložit různé vstupní hodnoty pro jejich parametry.<\/P>Kopírujte Python příkaz z grafického uživatelského rozhraní v ArcGIS Pro.<\/STRONG><\/P>Když otevřete nástroj v panelu Geoprocessing, vedle tlačítka Spustit je malá šipka nahoru. Jednou z možností je Kopírovat Python příkaz. Tím zkopírujete Python úryvek představující parametry potřebné k replikaci parametrů vyplněných v uživatelském rozhraní. Toto je náš nejúčinnější tip pro uživatele obeznámené s geoprocesními úkoly v ArcGIS Pro, ale nové v Pythonu. Vidíte odpovídající parametry zvolených v známém rozhraní a hodnoty předané jako argumenty do Python funkce. Kromě získání kopie Python příkazu z panelu Geoprocessing můžete také kliknout pravým tlačítkem na jakoukoli položku ve vaší Historii geoprocessingu a získat stejný úryvek.<\/P>Používejte Kopírovat cestu v uživatelském rozhraní ArcGIS Pro.<\/STRONG><\/P>Cesty k souborům jsou obtížné na psaní a snadno uděláte chybu. V panelu Katalog v ArcGIS Pro můžete kliknout pravým tlačítkem na datový objekt a Kopírovat cestu, takže ji nemusíte psát. <\/P>Pravidelně kontrolujte, zda váš kód vrací očekávané výsledky během tvorby.<\/STRONG><\/P>Nikdo nechce strávit hodiny psaním kódu bez kontroly jeho funkčnosti. Čím více kódu napíšete mezi testy, tím více kódu musíte kontrolovat kvůli chybám při nevyhnutelném selhání. Časté kontroly vám pomohou identifikovat problematický kód brzy.<\/P>Seaborn je skvělý pro grafy/chart-y.<\/STRONG><\/P>Grafické vizualizace vám (a ostatním) mohou pomoci lépe porozumět vašim datům. Seaborn je dobrá knihovna pro vytváření těchto vizualizací a když ji spustíte v notebooku, uvidíte výstup přímo spolu s vaším kódem.<\/P> <\/P>import seaborn as sns
# Slovník hodnot
cryptid_data = {
"Lochness Monster":LochnessMonsterCount,
"Chupacabra":ChupacabraCount,
"Bigfoot":BigfootCount
}
# Sloupcový graf ze slovníku
cryptid_plot = sns.barplot(
x=list(cryptid_data.keys()),
y=list(cryptid_data.values())
)<\/code>
<\/>\n
<\strong>Nikdy nedávejte přihlašovací údaje do svého kódu.</\strong></\ P>\n
Toto představuje velké bezpečnostní riziko. ArcGIS API for Python vám umožňuje využít přihlašovací údaje vašeho prostředí pokud pracujete v ArcGIS Pro, Notebook Server nebo ArcGIS Online Notebook. Můžete také použít profily, které využívají nástroje pro správu tajemství vašeho operačního systému, nebo PKI, které používá bezpečnostní certifikáty. Podívejte se na dokumentaci Práce s různými autentizačními schématy pro podrobnosti.<\/P>
Notebooky mají bohatý výstup, který může zahrnovat obrázky, hypertextové odkazy a formátovaný text.<\/STRONG><\/P>Toto je část toho, co dělá notebook tak skvělým pro výuku a sdílení. Bohatý výstup pomáhá lidem lépe pochopit výsledky práce, kterou jste provedli ve svém kódu.<\/P>Použijte další parametry k zúžení vyhledávání v ArcGIS API for Python.<\/STRONG><\/P>Metoda search třídy ContentManager může vyhledávat podle kategorií nebo item_type či podle dotazu na několik polí. Některé příkladové dotazy najdete v tomto článku znalostní báze.<\/P>Přiřaďte objektům, se kterými pracujete, smysluplná jména proměnných.<\/STRONG><\/P>Přiřazení jmen proměnným vám umožní využít hodnoty, které vytvoříte. Dávání smysluplných jmen vám pomůže pochopit, co tyto hodnoty znamenají. <\/P> <\/P>x = 2405<\/code><\/pre> <\/P>To opravdu nic neznamená.<\/P> <\/P>population = 2405<\/code><\/pre> <\/P>Poskytuje relevantní kontext pro hodnotu ve skriptu.<\/P>Mějte na paměti konkrétní typ objektu, se kterým pracujete.<\/STRONG><\/P>Různé objekty mají různé vlastnosti a metody. Je snadné si splést podobné typy objektů, jako jsou FeatureLayerCollection, FeatureLayer a FeatureSet. Použijte kontrolu typu, abyste potvrdili, s čím pracujete, a dokumentaci ke kontrole toho, co můžete s daným objektem dělat.<\/P>Vyhledejte „arcpy <věc, kterou se snažíte udělat>“.<\/STRONG><\/P>Vyhledávače jako Google a Bing téměř vždy vrátí správnou dokumentaci mezi prvními několika výsledky vyhledávání. Výsledky z Esri Community a Stack Exchange jsou také často cennými zdroji, protože pocházejí od lidí kladoucích otázky. Je velmi pravděpodobné, že někdo jiný již položil stejnou otázku jako vy a můžete vidět, co jim fungovalo.<\/P>Dokumentace je váš nejlepší přítel<\/STRONG><\/P>Nikdo si nepamatuje všechno. Nejvýznamnější dovedností, kterou můžete rozvíjet, je obeznámenost s dokumentací. Používejte ukázkový kód k tomu, abyste viděli, jak fungují různé funkce a objekty.<\/P>Používejte klíčová slova arguments místo pouze pozičních argumentů.<\/STRONG><\/P>Používání klíčových slov při volání funkcí místo spoléhání se jen na pořadí argumentů činí váš kód čitelnějším. Umožňuje přeskočit některé volitelné parametry a jasněji ukazuje lidem čtoucím váš kód později, k čemu jednotlivé hodnoty slouží.<\/P>Využívejte help() nebo ?<\/STRONG><\/P>Předáním objektu funkci help získáte přístup k dokumentaci té funkce bez nutnosti opustit své vývojové prostředí. To snižuje kognitivní náklady přepínání kontextu a usnadňuje návrat k psaní kódu. V prostředí notebooku můžete také přidat ? za objekt pro získání pěkně formátované dokumentace.<\/P>Používejte seznamy a smyčky pro dávkové zpracování dat.<\/STRONG><\/P>ArcPy má řadu různých funkcí pro seznamy jako ListWorkspaces nebo ListFiles, které automaticky generují seznamy datových objektů. Jakmile máte seznam, můžete projít všechny položky v tomto seznamu a provést nějaký úkol.<\/P> <\/P># Nastavte pracovní prostor
arcpy.env.workspace = r"C:\Input_Data"
# Vyjmenujte všechny souborové geodatabáze v tomto pracovním prostoru
fgdbs = arcpy.ListWorkspaces(workspace_type="FileGDB")
# Spusťte model pro každou souborovou geodatabázi v pracovním prostoru
for gdb in fgdbs:
arcpy.PythonTipsandTricksatbx.Model1(Database=gdb)<\/code><\/pre> <\/P>Naplánujte periodické úlohy<\/STRONG><\/P>Pokud je potřeba proces spouštět každý měsíc, týden nebo dokonce každou minutu, můžete tuto úlohu naplánovat. Lokální nástroje lze naplánovat z rozhraní ArcGIS Pro. Můžete také naplánovat notebooky běžící v ArcGIS Notebook Server nebo v ArcGIS Online.<\/P>Nastavte environmentální proměnné, které ovládají chování arcpy geoprocessing nástrojů<\/STRONG><\/P>Pokud potřebujete nastavit pracovní prostor, zajistit přepisování výstupů, specifikovat výstupní prostorovou referenci nebo jakoukoli jinou environmentální proměnnou geoprocessingu, můžete je deklarovat pomocí třídy env v ArcPy. Ne každý nástroj respektuje všechny environmentální proměnné, proto si vždy zkontrolujte konkrétní dokumentaci daného nástroje, abyste zjistili, které proměnné podporuje.<\/P>Používejte proměnné pro cesty k souborům, nezadávejte je přímo do parametrů funkcí.<\/STRONG><\/P>Cesty k souborům jsou dlouhé, těžko čitelné a často neodrážejí účel nebo význam dat, která představují. Přiřazením těchto cest do proměnných můžete zjednodušit odkaz na data na dané cestě a dát datům jméno poskytující správný kontext dat.<\/P>Použijte funkci Describe pro získání informací o datovém prvku.<\/STRONG><\/P>V uživatelském rozhraní můžete obvykle kliknout pravým tlačítkem myši na datový prvek a vybrat Vlastnosti. Ve skriptu však nemůžete nic kliknout pravým tlačítkem. Funkce Describe může vytvořit objekt obsahující všechny vlastnosti daného datového prvku. K těmto vlastnostem pak můžete ve svém skriptu přistupovat a používat je. <\/P> <\/P>import pandas as pd
import arcpy
# Nástroje ArcPy respektují pracovní prostředí workspace, ale pandas nikoli
# Použijte Describe pro získání úplné cesty k souboru prvku
arcpy.env.workspace = r"C:\Data"
delays = "AA_delays_jan_2023.csv"
desc = arcpy.Describe(delays)
delays_df = pd.read_csv(desc.catalogPath)<\/code><\/pre> <\/P>Používejte knihovnu pandas pro manipulaci s tabulkovými daty.<\/STRONG><\/P>Nahrazení tabulek nebo feature class do pandas DataFrame vám umožní využít silné nástroje této knihovny pro čištění, shrnutí, seskupování a agregaci vašich dat (a nejen to!). Rozšíření Spatially Enabled DataFrame do pandas vytvořené ArcGIS API for Python vám umožňuje kombinovat standardní nástroje pandas s další prostorovou funkcionalitou pro geografická data.<\/P> <\/P>delays_df.fillna(0, inplace=True)
airport_group = delays_df.groupby(['ORIGIN_AIRPORT_SEQ_ID'])
delays_by_airport_df = airport_group.agg({'WEATHER_DELAY': 'mean'})<\/code><\/pre> <\/P>Spojujte neprostorová data s prostorovými daty pro využití nástrojů prostorové analýzy.<\/STRONG><\/P>Sady dat, se kterými pracujete, budou často implicitně prostorové, ale nemusí mít skutečnou geometrii. Například data o známé lokalitě nebo data s adresami místo souřadnic. Tyto sady dat můžete začlenit do své prostorové analýzy pokud je dokážete spojit s geometriemi těchto lokalit pomocí nástrojů jako Join, Spatial Join nebo Geocoding. Pokud máte Spatially Enabled DataFrame, můžete použít funkci merge v pandas ke spojení prostorových a neprostorových dat do nového Spatially Enabled DataFrame.<\/P> <\/P>airports_sdf = pd.DataFrame.spatial.from_featureclass(airports_fc)
airport_delays_sdf = airports_sdf.merge(
right=delays_by_airport_df,
how='inner',
left_on='AIRPORT_SEQ_ID',
right_on='ORIGIN_AIRPORT_SEQ_ID'
)<\/code>
Spatially Enabled DataFrames mohou být vstupy pro mnoho geoprocessingových nástrojů.
I když DataFrame není feature class , můžete jej považovat za feature class pro účely mnoha nástrojů . To je užitečné , protože nemusíte exportovat DataFrame do nového formátu jen kvůli dalšímu zpracování .
<\/P>V komplexních analýzách často chcete vzít výstup z jednoho nástroje a předat ho jako vstup do jiného nástroje. Proměnné usnadňují psaní flexibilního kódu, protože můžete změnit hodnotu proměnné, aniž byste museli měnit celý kód geoprocesních nástrojů, který jste napsali. <\/P> <\/P># Prostorové spojení DataFrame s feature class
arcpy.analysis.SpatialJoin(
airport_delays_sdf,
climate_data,
delays_by_airport_weather,
match_option="CLOSEST"
)
# Předání výstupu ze Spatial Join jako vstup do GLR
arcpy.GeneralizedLinearRegression_stats(
in_features=delays_by_airport_weather,
dependent_variable="WEATHER_DELAY",
explanatory_variables= ["Mean_T_f_01_Jan", "Mean_mmPr_01_Jan"],
model_type="CONTINUOUS",
output_features="delay_climate_glr",
)<\/code><\/pre> <\/P>Používejte proměnné, aby bylo snazší iterovat\/experimentovat s hodnotami parametrů.<\/STRONG><\/P>Často u složitého úkolu budete chtít vyzkoušet různé hodnoty některých parametrů. Nebo budete chtít, aby tyto parametry byly definovány uživatelem, takže skript může zpracovávat vstupy různých uživatelů. Tvrdé zakódování hodnot do parametrů to ztěžuje. Přiřazení proměnných těmto hodnotám a jejich vyjmutí z volání funkce to usnadňuje.<\/P> <\/P># Vyjmout hodnoty z volání funkce
dependent_variable = "WEATHER_DELAY"
explanatory_variables = [
"Mean_T_f_01_Jan",
"Mean_mmPr_01_Jan"
]
arcpy.GeneralizedLinearRegression_stats(
in_features=delays_by_airport_weather,
dependent_variable=dependent_variable,
explanatory_variables=explanatory_variables,
model_type="CONTINUOUS",
output_features=delay_climate_glr
)<\/code><\/pre> <\/P>Naučte se produktivní klávesové zkratky vašeho vývojového prostředí<\/STRONG><\/P>Pravděpodobně znáte nástroje jako ctrl+c pro kopírování nebo ctrl+z pro zpět. Různá vývojová prostředí mají také své vlastní klávesové zkratky a makra, které vám umožní být produktivnější. Může chvíli trvat, než se tyto zkratky naučíte, ale čím více kódu napíšete, tím více času nakonec ušetříte jejich učením. V prostředí notebooku můžete kliknout na příkazovou paletu na pravé straně panelu nástrojů a zobrazit všechny zkratky.<\/P>Když narazíte na frustrující chybu, dejte si pauzu.<\/STRONG><\/P>Nejlepší strategií ladění je přestávka. Jděte na procházku. Napijte se vody. Pracujte na něčem jiném. Jděte spát. Když se k problému vrátíte, často budete mít jiný pohled, který vám umožní problém překonat. Pokud se začínáte rozčilovat nebo frustrovat, víte, že je čas si odpočinout.<\/P>Získejte parťáka na pomoc.<\/STRONG><\/P>Druhou nejcennější strategií ladění je požádat o pomoc. Nejprve strávte nějaký čas pokusem problém vyřešit sami, ale neskrývejte problém navždy jen pro sebe. Někdy parťák může velmi rychle odhalit problém, který jste neviděli. A když má váš parťák problém, může přijít za vámi pro pomoc.<\/P>Začněte od konce chybové zprávy.<\/STRONG><\/P>Chybová zpráva není román. Nečtěte ji od začátku do konce pro zábavu. Je to detektivka. Přeskočte na konec a zjistěte viníka. Poslední řádky chybové zprávy budou pravděpodobně nejužitečnější.<\/P>Úspěch v ladění znamená získat jinou chybu než předtím.<\/STRONG><\/P>Toto je klíčová rada pro zvládání vašeho emočního stavu během ladicí relace. Pokud si představujete úspěch jako dokonalý kód bez chyb, nikdy nevyhrajete. Protože kód, který dělá něco zajímavého, je vždy nedokonalý. Ale pokud myslíte na úspěch jako postupný posun k dokonalosti, zažijete mnoho vítězství po cestě. <\/P>Používejte příkazy print ke kontrole hodnot a datových typů.<\/STRONG><\/P>Python proměnné mohou měnit hodnoty a dokonce i datové typy. To ho činí extrémně flexibilním, ale tato flexibilita je také zdrojem mnoha chyb. Nejjednodušší způsob, jak ověřit, zda má proměnná správnou hodnotu nebo typ, je ji vytisknout.<\/P> <\/P># Vytiskněte hodnotu csv_list, abyste se ujistili, že je správná
arcpy.env.workspace = r"C:\LTS"
csv_list = arcpy.ListFiles("*.csv")
print(csv_list)<\/code><\/pre> <\/P>Nesprávné cesty k souborům jsou častým zdrojem chyb.<\/STRONG><\/P>Kopírování a vkládání cest k souborům může pomoci s problémy spojenými s překlepy v cestách k souborům. Ale stále můžete zkopírovat špatnou cestu. Nebo někdo jiný používající váš skript nemusí mít data na stejné cestě, kterou jste tvrdě zakódovali ve skriptu. Pokud je problém s přístupem nebo načítáním dat, cesta k souboru by měla být jednou z prvních věcí, které zkontrolujete.<\/P>Překlepy jsou dalším častým zdrojem chyb.<\/STRONG><\/P>Zajímavé na lidském mozku je to, že víte, co jste chtěli napsat, takže vidíte to, co jste chtěli napsat, ne to, co jste skutečně napsali. Cesty k souborům, dlouhé názvy funkcí nebo speciální znaky jsou běžnými zdroji překlepů. Hledání překlepů je opravdu dobrý důvod mít parťáka na pomoc, protože on vidí jen to, co jste skutečně napsali.<\/P>Doplňování kódu může pomoci vyhnout se překlepům.<\/STRONG><\/P>IDE má sofistikované nástroje pro doplňování kódu, které vám pomohou najít správnou funkci nebo název parametru. Nejenže vám to ušetří čas díky intenzivnímu využívání automatického doplňování, ale také výrazně snižuje riziko zadání špatné hodnoty. Tyto nástroje pro doplňování kódu jsou jednou z prvních věcí, které byste měli procvičit pro plné využití vašeho vývojového prostředí.<\/P>Python doplňuje vaše odborné znalosti v dané oblasti. Nenahrazuje je.<\/STRONG><\/P>Dokonalý kód bez chyb řešící špatný problém je bezcenný. Vaše odborné znalosti v klimatologii, demografii, dopravě nebo jakékoli jiné oblasti využívající prostorová data mají obrovský význam. Python je další nástroj, který můžete použít ke znásobení hodnoty těchto znalostí.<\/P>Další zdroje<\/STRONG><\/P>Pro další školení Pythonu si prohlédněte kurz Esri Creating Python Scripts for ArcGIS: https:\/\/go.esri.com\/python-course<\/A>.<\/SPAN><\/SPAN><\/LI>Pokládejte a odpovídejte na otázky v Esri Communities pro Python\ArcPy<\/A> a ArcGIS API for Python<\/A>.<\/SPAN><\/SPAN><\/LI><\/UL>