155GIS2 / 9. cvičení: Porovnání verzí
mBez shrnutí editace |
m (→5) |
||
(Není zobrazeno 65 mezilehlých verzí od stejného uživatele.) | |||
Řádek 4: | Řádek 4: | ||
== Náplň == | == Náplň == | ||
* [http://geo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/dokumentace.pdf Tutorial Programování v Pythonu pro ArcGIS 10.0 pro začátečníky] | * Přednášky [[155GIT1]] | ||
** [https://geo.fsv.cvut.cz/vyuka/155git1/python/git1-python-01-uvod.pdf Úvod do jazyka Python] | |||
** [https://geo.fsv.cvut.cz/vyuka/155git1/python/git1-python-02-algoritmizace-io.pdf Algoritmizace, čtení a zápis souborů] | |||
* [http://geo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/dokumentace.pdf Tutorial Programování v Pythonu pro ArcGIS 10.0 pro začátečníky] (studentský projekt) | |||
== Poznámky k systému ArcGIS == | == Poznámky k systému ArcGIS == | ||
=== Python Window === | |||
View {{bullet}} Python Window | |||
* [ | {{fig|arcpy|Ukázka interaktivní Python konzole v ArcGIS Pro}} | ||
* [ | |||
* [ | <syntaxhighlight lang="python"> | ||
* [ | arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb" | ||
* [ | obce = arcpy.Describe("ObcePolygony") | ||
* [ | len(obce.fields) | ||
pocet = arcpy.GetCount_management("ObcePolygony") | |||
pocet.getOutput(0) | |||
</syntaxhighlight> | |||
=== Notebook === | |||
Založeno na open source projektu {{wikipedia|Jupyter}}. | |||
Insert {{bullet}} New Notebook | |||
{{fig|arcgis-pro-notebook|800px|Notebook v prostředí ArcGIS Pro}} | |||
=== Užitečné odkazy === | |||
* [https://pro.arcgis.com/en/pro-app/arcpy/get-started/installing-python-for-arcgis-pro.htm Python in ArcGIS Pro] | |||
* [https://pro.arcgis.com/en/pro-app/arcpy/geoprocessing_and_python/a-quick-tour-of-creating-tools-in-python.htm A quick tour of creating tools with Python] | |||
* [https://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm What is ArcPy?] | |||
* [https://pro.arcgis.com/en/pro-app/arcpy/get-started/arcgis-api-for-python.htm ArcGIS API for Python] | |||
* [https://developers.arcgis.com/python/guide/overview-of-the-arcgis-api-for-python/ Overview of the ArcGIS API for Python] | |||
* '''[https://pro.arcgis.com/en/pro-app/arcpy/main/arcgis-pro-arcpy-reference.htm ArcGIS Pro Python reference]''' | |||
* [https://doc.arcgis.com/en/arcgis-online/reference/use-arcpy-in-your-notebook.htm Use ArcPy in a notebook] | |||
* [https://www.youtube.com/watch?v=FtuHFZUrrMc ArcGIS API for Python: ArcGIS in a Notebook] (video) | |||
== Úlohy == | == Úlohy == | ||
{{arccr500}} | {{arccr500}} | ||
=== 1 === | === 1 === | ||
Řádek 29: | Řádek 52: | ||
; Výpis názvů atributů | ; Výpis názvů atributů | ||
< | * [https://pro.arcgis.com/en/pro-app/arcpy/data-access/describe.htm Describe] | ||
** [https://pro.arcgis.com/en/pro-app/arcpy/functions/featureclass-properties.htm FeatureClass properties] | |||
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500\AdministrativniCleneni_v13.gdb" | ** [https://pro.arcgis.com/en/pro-app/arcpy/functions/table-properties.htm Table properties] | ||
<syntaxhighlight lang="python"> | |||
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb" | |||
try: | try: | ||
Řádek 37: | Řádek 63: | ||
for i in range(len(data.fields)): | for i in range(len(data.fields)): | ||
print(data.fields[i].name) | print(data.fields[i].name) | ||
except: | except Exception as e: | ||
print | print(e) | ||
</ | </syntaxhighlight> | ||
Tip: | |||
<syntaxhighlight lang="python"> | |||
for field in data.fields: | |||
print(field.name) | |||
</syntaxhighlight> | |||
=== 2 === | === 2 === | ||
Řádek 45: | Řádek 78: | ||
; Výpis typu geoprvků | ; Výpis typu geoprvků | ||
< | <syntaxhighlight lang=python> | ||
inputFC = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\ObcePolygony" | |||
inputFC = | |||
shapeType = arcpy.Describe(inputFC).shapeType | shapeType = arcpy.Describe(inputFC).shapeType | ||
print("Shape Type: {}".format(shapeType)) | |||
</ | </syntaxhighlight> | ||
=== 3 === | === 3 === | ||
Řádek 58: | Řádek 88: | ||
; Výpis obcí, které mají počet obyvatel vyšší než Liberec | ; Výpis obcí, které mají počet obyvatel vyšší než Liberec | ||
< | <syntaxhighlight lang="python"> | ||
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb" | |||
arcpy.env.workspace = r" | |||
try: | try: | ||
Řádek 69: | Řádek 98: | ||
rows = arcpy.SearchCursor("ObcePolygony") | rows = arcpy.SearchCursor("ObcePolygony") | ||
for row in rows: | for row in rows: | ||
if row.POCET_OBYV > pocet: | if row.POCET_OBYV is not None and row.POCET_OBYV > pocet: | ||
print("{0} - {1}".format(row.NAZ_OBEC, row.POCET_OBYV)) | |||
except: | except Exception as e: | ||
print | print(e) | ||
</ | </syntaxhighlight> | ||
=== 4 === | === 4 === | ||
Řádek 79: | Řádek 108: | ||
; Vytvoření souborů Shapefile pro jednotlivé kraje | ; Vytvoření souborů Shapefile pro jednotlivé kraje | ||
< | <syntaxhighlight lang="python"> | ||
import os | import os | ||
arcpy.env.overwriteOutput = True | |||
arcpy.env. | arcpy.env.workspace = r"C:\Users\landamar\Documents\u04" | ||
arcpy.env.workspace = r"C:\ | if not os.path.exists(arcpy.env.workspace): | ||
os.makedirs(arcpy.env.workspace) | |||
kraje = r" | kraje = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\KrajePolygony" | ||
rows = arcpy.SearchCursor(kraje) #vytvori cursor | rows = arcpy.SearchCursor(kraje) #vytvori cursor | ||
for row in rows: | for row in rows: | ||
nazev = row.KOD_CZNUTS3 | |||
print("{0}...".format(nazev)) | |||
kraje_Select_shp = os.path.join(arcpy.env.workspace, nazev + ".shp") | |||
arcpy.Select_analysis(kraje, kraje_Select_shp, "KOD_CZNUTS3 = '{}'".format(nazev)) | |||
</ | </syntaxhighlight> | ||
=== 5 === | === 5 === | ||
Řádek 99: | Řádek 129: | ||
; Výpis souřadnic lomových bodů uzemí obce 'Lhota' | ; Výpis souřadnic lomových bodů uzemí obce 'Lhota' | ||
< | <syntaxhighlight lang="python"> | ||
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb" | |||
arcpy.env.workspace = r" | |||
obce = "ObcePolygony" | obce = "ObcePolygony" | ||
try: | try: | ||
data = arcpy.Describe(obce) | |||
shapename = data.ShapeFieldName | |||
rows = arcpy.SearchCursor(obce, "NAZ_OBEC = 'Lhota'") | |||
for row in rows: | |||
prvek = row.getValue(shapename) | |||
print("Prvek {0}: ".format(row.NAZ_OBEC)) | |||
# prvek.centroid | |||
partnum = 0 | |||
for part in prvek: | |||
print("Part {0}: ".format(partnum)) | |||
for bod in prvek.getPart(partnum): | |||
print("{0} {1}".format(bod.X, bod.Y)) | |||
except: | partnum += 1 | ||
print | except Exception as e: | ||
</ | print(e) | ||
</syntaxhighlight> | |||
---- | ---- | ||
''Další úlohy najdete v cvičení k předmětu [[153GIS2 / 10. cvičení#Úkoly|153GIS2]].'' | ''Další úlohy najdete v cvičení k předmětu [[153GIS2 / 10. cvičení#Úkoly|153GIS2]].'' |
Verze z 21. 4. 2021, 16:58
Úvod do skriptování v jazyku Python (arcpy)
Náplň
- Přednášky 155GIT1
- Tutorial Programování v Pythonu pro ArcGIS 10.0 pro začátečníky (studentský projekt)
Poznámky k systému ArcGIS
Python Window
View • Python Window
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
obce = arcpy.Describe("ObcePolygony")
len(obce.fields)
pocet = arcpy.GetCount_management("ObcePolygony")
pocet.getOutput(0)
Notebook
Založeno na open source projektu Jupyter.
Insert • New Notebook
Užitečné odkazy
- Python in ArcGIS Pro
- A quick tour of creating tools with Python
- What is ArcPy?
- ArcGIS API for Python
- Overview of the ArcGIS API for Python
- ArcGIS Pro Python reference
- Use ArcPy in a notebook
- ArcGIS API for Python: ArcGIS in a Notebook (video)
Úlohy
V následujících úlohách budeme, pokud nebude uvedeno jinak, používat data z datové sady ArcCR500. Tato datová sada je poskytovaná firmou ArcData zdarma.
V učebně B-870 jdou data nainstalována v adresáři
S:\K155\Public\data\ArcGIS\ArcCR500 3.3
Přístupová práva k tomu adresáři jsou omezena pouze na čtení! Nelze tedy datové vrstvy z ArcCR500 upravovat (včetně např. vytváření pyramid).
1
- Výpis názvů atributů
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
try:
data = arcpy.Describe("ObcePolygony")
for i in range(len(data.fields)):
print(data.fields[i].name)
except Exception as e:
print(e)
Tip:
for field in data.fields:
print(field.name)
2
- Výpis typu geoprvků
inputFC = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\ObcePolygony"
shapeType = arcpy.Describe(inputFC).shapeType
print("Shape Type: {}".format(shapeType))
3
- Výpis obcí, které mají počet obyvatel vyšší než Liberec
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
try:
rows = arcpy.SearchCursor("ObcePolygony", "NAZ_OBEC = 'Liberec'") #vytvori cursor
for row in rows:
pocet = row.POCET_OBYV # pocet obce Liberec
break
rows = arcpy.SearchCursor("ObcePolygony")
for row in rows:
if row.POCET_OBYV is not None and row.POCET_OBYV > pocet:
print("{0} - {1}".format(row.NAZ_OBEC, row.POCET_OBYV))
except Exception as e:
print(e)
4
- Vytvoření souborů Shapefile pro jednotlivé kraje
import os
arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"C:\Users\landamar\Documents\u04"
if not os.path.exists(arcpy.env.workspace):
os.makedirs(arcpy.env.workspace)
kraje = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\KrajePolygony"
rows = arcpy.SearchCursor(kraje) #vytvori cursor
for row in rows:
nazev = row.KOD_CZNUTS3
print("{0}...".format(nazev))
kraje_Select_shp = os.path.join(arcpy.env.workspace, nazev + ".shp")
arcpy.Select_analysis(kraje, kraje_Select_shp, "KOD_CZNUTS3 = '{}'".format(nazev))
5
- Výpis souřadnic lomových bodů uzemí obce 'Lhota'
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
obce = "ObcePolygony"
try:
data = arcpy.Describe(obce)
shapename = data.ShapeFieldName
rows = arcpy.SearchCursor(obce, "NAZ_OBEC = 'Lhota'")
for row in rows:
prvek = row.getValue(shapename)
print("Prvek {0}: ".format(row.NAZ_OBEC))
# prvek.centroid
partnum = 0
for part in prvek:
print("Part {0}: ".format(partnum))
for bod in prvek.getPart(partnum):
print("{0} {1}".format(bod.X, bod.Y))
partnum += 1
except Exception as e:
print(e)
Další úlohy najdete v cvičení k předmětu 153GIS2.