155GIS2 / 10. cvičení: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
 
(Není zobrazeno 64 mezilehlých verzí od stejného uživatele.)
Řádek 1: Řádek 1:
{{upravit}}
{{GIS}}
{{GIS}}
{{Cvičení|155GIS2|10|Pokročilé funkce Model Builder, publikování dat a procesů}}
{{Cvičení|155GIS2|10|Skriptování v ArcGIS Pro}}


== Základní pojmy ==
{{fig|arcgis-pro-script|Registrace skriptu v prostředí ArcGIS Pro}}


== Poznámky k systému ArcGIS ==
=== PyCharm ===


=== Odkazy ===
Postupujte podle [[155GIT1 / Python#Editor_Pycharm|návodu]]. Zvolte cestu k Python interpretu odkazující na ArcGIS: ''C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe''


* [http://desktop.arcgis.com/en/arcmap/10.3/analyze/modelbuilder/examples-of-inline-model-variable-substitution.htm Examples of inline model variable substitution]
{{fig|pycharm-arcgis-pro|Spuštění skriptu v prostředí Pycharm}}
* [http://desktop.arcgis.com/en/arcmap/10.3/analyze/modelbuilder/creating-stand-alone-variables.htm Creating stand-alone variables]
* [http://desktop.arcgis.com/en/arcmap/10.3/analyze/modelbuilder/using-lists.htm Using Lists]
* [http://resources.arcgis.com/en/help/main/10.1/index.html#//002s00000001000000 What is geoprocessing?]


== Úlohy ==
== Úlohy ==
Řádek 18: Řádek 14:
{{arccr500}}
{{arccr500}}


'''Model''':
=== Modul ArcPy (pokračování) ===
* proměnné (Obce, Select, název obce)
* list (Silnice, Select, Buffer)
* iterace (Kraje, Iterate Feature Selection, Make Feature Layer)


'''Geoprocessing:'''
; Geoprocessing (1) notebook (2) PyCharm
* model
* [http://geo102.fsv.cvut.cz/~landa/vyuka/155GIS2/arcpy-ulohy/skripty/geoprocessing_par.py skript]
* [http://rain2.fsv.cvut.cz/arcgis/rest/services/idw0/gpserver/idw služba]


'''Opakování:'''
* [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/data-management/delete.htm Delete]


* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_1._cvi%C4%8Den%C3%AD#3. 1/3]
<syntaxhighlight lang=python>
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_2._cvi%C4%8Den%C3%AD#5. 2/5]
arcpy.env.workspace = r"C:\users\martin\Documents\GIS2"
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_2._cvi%C4%8Den%C3%AD#6. 2/6]
 
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_2._cvi%C4%8Den%C3%AD#8. 2/5]
# vyber a export dalnic
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_3._cvi%C4%8Den%C3%AD#5. 3/5]
silnice = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\ArcCR500_v33.gdb\Silnice_2015"
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_3._cvi%C4%8Den%C3%AD#12. 3/12]
dalnice = "dalnice.shp"
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_4._cvi%C4%8Den%C3%AD#4. 4/4]
arcpy.analysis.Select(silnice, dalnice, "TRIDA = 1")
* [http://geo.fsv.cvut.cz/gwiki/155GIS2_/_5._cvi%C4%8Den%C3%AD#7. 5/7]
 
# 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)
</syntaxhighlight>
 
; Rastrová data (numpy)
 
* [https://numpy.org/ knihovna NumPy]
* [https://pro.arcgis.com/en/pro-app/latest/arcpy/get-started/working-with-numpy-in-arcgis.htm Working with NumPy in ArcGIS]
 
<syntaxhighlight lang=python>
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")
</syntaxhighlight>
 
'''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]).
 
=== 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/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>
import arcgis
gis = arcgis.GIS()
 
map1 = gis.map()
map1
</syntaxhighlight>
 
Vykreslení výchozí podkladové mapy v novém mapovém okně:
<syntaxhighlight lang=python>
map2 = gis.map(location='Prague, Czech Republic', zoomlevel = 12)
map2
</syntaxhighlight>
 
Vyhledání online vrstev podle klíčového slova:
<syntaxhighlight lang=python>
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)
</syntaxhighlight>
 
Přídání vybrané onlive vrstvy do mapového okna:
<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>

Aktuální verze z 30. 11. 2023, 08:49

předchozí cvičenístránky předmětudalší cvičení

Skriptování v ArcGIS Pro

Registrace skriptu v prostředí 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

Spuštění skriptu v prostředí Pycharm

Ú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