155GIS2 / 10. cvičení: Porovnání verzí
m (→ArcGIS) |
|||
(Není zobrazeno 20 mezilehlých verzí od stejného uživatele.) | |||
Řádek 14: | Řádek 14: | ||
{{arccr500}} | {{arccr500}} | ||
=== ArcPy === | === Modul ArcPy (pokračování) === | ||
; | ; Geoprocessing (1) notebook (2) PyCharm | ||
* [https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/select.htm Select] | * [https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/select.htm Select] | ||
* [https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/buffer.htm Buffer] | * [https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/buffer.htm Buffer] | ||
* [https://pro.arcgis.com/en/pro-app/latest/tool-reference/data-management/delete.htm Delete] | |||
<syntaxhighlight lang=python> | <syntaxhighlight lang=python> | ||
Řádek 36: | Řádek 28: | ||
silnice = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\ArcCR500_v33.gdb\Silnice_2015" | silnice = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\ArcCR500_v33.gdb\Silnice_2015" | ||
dalnice = "dalnice.shp" | dalnice = "dalnice.shp" | ||
arcpy. | arcpy.analysis.Select(silnice, dalnice, "TRIDA = 1") | ||
# buffer kolem dalnic | # buffer kolem dalnic | ||
buffer_dal = "dalnice_buf.shp" | buffer_dal = "dalnice_buf.shp" | ||
vzdalenost = "5000 meters" | vzdalenost = "5000 meters" | ||
arcpy. | arcpy.analysis.Buffer(dalnice, buffer_dal, vzdalenost, dissolve_option="ALL") | ||
# odstraneni nepotrebnych vrstev | # odstraneni nepotrebnych vrstev | ||
arcpy. | arcpy.management.Delete(dalnice) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Řádek 71: | Řádek 63: | ||
# zjisteni minimalni, maximalni hodnoty | # zjisteni minimalni, maximalni hodnoty | ||
array.min(), array.max() | |||
# nastaveni no-data hodnoty | |||
array = arcpy.RasterToNumPyArray(raster, nodata_to_value=-1) | |||
array.min(), array.max() | array.min(), array.max() | ||
Řádek 81: | Řádek 77: | ||
array[(array>=0) & (array<=200)] = 0 | array[(array>=0) & (array<=200)] = 0 | ||
array[(array>200)] = 1 | array[(array>200)] = 1 | ||
numpy.unique(array, return_counts=True) | |||
# zapis numpy pole do rastru | # zapis numpy pole do rastru | ||
vystup = arcpy.NumPyArrayToRaster(array) | vystup = arcpy.NumPyArrayToRaster(array, value_to_nodata=-1) | ||
vystup.save(r"C:\users\martin\Documents\dmt200.tif") | vystup.save(r"C:\users\martin\Documents\dmt200.tif") | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Další ukázky skriptů [ | '''Další ukázky skriptů [https://geo.fsv.cvut.cz/vyuka/155gis2/cviceni/10/arcpy-ulohy/ zde]''' ([https://geo.fsv.cvut.cz/vyuka/155gis2/cviceni/10/arcpy-ulohy.zip zip]). | ||
=== ArcGIS === | === Registrace skriptu === | ||
Toolbox: New -> Script | |||
Editace: Edit | |||
Nastavení parametrů: Properties | |||
; Výpis typu geoprvků | |||
<syntaxhighlight lang=python> | |||
import arcpy | |||
def script_tool(param0): | |||
"""Script code goes below""" | |||
shapeType = arcpy.Describe(param0).shapeType | |||
arcpy.AddMessage("Shape Type: {}".format(shapeType)) | |||
return | |||
if __name__ == "__main__": | |||
param0 = arcpy.GetParameterAsText(0) | |||
script_tool(param0) | |||
</syntaxhighlight> | |||
=== Modul ArcGIS === | |||
* [https://developers.arcgis.com/python/guide/using-the-api/ ArcGIS API for Python] | * [https://developers.arcgis.com/python/guide/using-the-api/ ArcGIS API for Python] | ||
* [https://developers.arcgis.com/python/api-reference/arcgis.gis.toc.html ArcGIS GIS module] | |||
* [https://github.com/Esri/arcgis-python-api Documentation and samples for ArcGIS API for Python] | |||
Inicializace mapového okna: | |||
<syntaxhighlight lang=python> | <syntaxhighlight lang=python> | ||
import arcgis | import arcgis | ||
Řádek 102: | Řádek 123: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Vykreslení výchozí podkladové mapy v novém mapovém okně: | |||
<syntaxhighlight lang=python> | <syntaxhighlight lang=python> | ||
map2 = gis.map(location=' | map2 = gis.map(location='Prague, Czech Republic', zoomlevel = 12) | ||
map2 | map2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Vyhledání online vrstev podle klíčového slova: | |||
<syntaxhighlight lang=python> | <syntaxhighlight lang=python> | ||
from IPython.display import display | from IPython.display import display | ||
Řádek 116: | Řádek 139: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Přídání vybrané onlive vrstvy do mapového okna: | |||
<syntaxhighlight lang=python> | <syntaxhighlight lang=python> | ||
layer = items[0].layers[0] | |||
map2.add_layer(layer) | |||
map2.zoom_to_layer(layer) | |||
</syntaxhighlight> | |||
Ukázka kombinace s knihovnou Pandas: | |||
<syntaxhighlight lang=python> | |||
import pandas | |||
okresy = pandas.DataFrame.spatial.from_featureclass(r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\OkresyPolygony") | |||
okresy.spatial.plot(map_widget=map1) | |||
map1 | |||
</syntaxhighlight> | </syntaxhighlight> |
Aktuální verze z 30. 11. 2023, 08:49
Skriptování v ArcGIS Pro
PyCharm
Postupujte podle návodu. Zvolte cestu k Python interpretu odkazující na ArcGIS: C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe
Ú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).
Modul ArcPy (pokračování)
- Geoprocessing (1) notebook (2) PyCharm
arcpy.env.workspace = r"C:\users\martin\Documents\GIS2"
# vyber a export dalnic
silnice = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\ArcCR500_v33.gdb\Silnice_2015"
dalnice = "dalnice.shp"
arcpy.analysis.Select(silnice, dalnice, "TRIDA = 1")
# buffer kolem dalnic
buffer_dal = "dalnice_buf.shp"
vzdalenost = "5000 meters"
arcpy.analysis.Buffer(dalnice, buffer_dal, vzdalenost, dissolve_option="ALL")
# odstraneni nepotrebnych vrstev
arcpy.management.Delete(dalnice)
- Rastrová data (numpy)
dmt = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\ArcCR500_v33.gdb\DigitalniModelReliefu"
# otestovat nacteni dat
data = arcpy.Describe(dmt)
data.dataType
# nacteni metadat rastru
raster = arcpy.Raster(dmt)
raster.width, raster.height
# nacteni rastrovych hodnot do numpy pole
array = arcpy.RasterToNumPyArray(raster)
type(array)
# rozmer a datovy typ pole
array.shape, array.dtype
# zjisteni minimalni, maximalni hodnoty
array.min(), array.max()
# nastaveni no-data hodnoty
array = arcpy.RasterToNumPyArray(raster, nodata_to_value=-1)
array.min(), array.max()
# cetnost hodnot
unique, counts = numpy.unique(array, return_counts=True)
idx = numpy.where(unique == 200)
counts[idx]
# ukazka mapove algebry
array[(array>=0) & (array<=200)] = 0
array[(array>200)] = 1
numpy.unique(array, return_counts=True)
# zapis numpy pole do rastru
vystup = arcpy.NumPyArrayToRaster(array, value_to_nodata=-1)
vystup.save(r"C:\users\martin\Documents\dmt200.tif")
Další ukázky skriptů zde (zip).
Registrace skriptu
Toolbox: New -> Script
Editace: Edit Nastavení parametrů: Properties
- Výpis typu geoprvků
import arcpy
def script_tool(param0):
"""Script code goes below"""
shapeType = arcpy.Describe(param0).shapeType
arcpy.AddMessage("Shape Type: {}".format(shapeType))
return
if __name__ == "__main__":
param0 = arcpy.GetParameterAsText(0)
script_tool(param0)
Modul ArcGIS
Inicializace mapového okna:
import arcgis
gis = arcgis.GIS()
map1 = gis.map()
map1
Vykreslení výchozí podkladové mapy v novém mapovém okně:
map2 = gis.map(location='Prague, Czech Republic', zoomlevel = 12)
map2
Vyhledání online vrstev podle klíčového slova:
from IPython.display import display
items = gis.content.search('Praha', item_type="Feature Layer", outside_org=True)
print(len(items))
for item in items[:3]:
display(item)
Přídání vybrané onlive vrstvy do mapového okna:
layer = items[0].layers[0]
map2.add_layer(layer)
map2.zoom_to_layer(layer)
Ukázka kombinace s knihovnou Pandas:
import pandas
okresy = pandas.DataFrame.spatial.from_featureclass(r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\OkresyPolygony")
okresy.spatial.plot(map_widget=map1)
map1