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

Z GeoWikiCZ
 
(Není zobrazeno 14 mezilehlých verzí od stejného uživatele.)
Řádek 4: Řádek 4:
== Náplň ==
== Náplň ==


* Přednášky [[155GIT1]]
* Přednášky [[155UVIN]]
** [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 ==
Řádek 16: Řádek 13:


{{fig|arcpy|Ukázka interaktivní Python konzole v ArcGIS Pro}}
{{fig|arcpy|Ukázka interaktivní Python konzole v ArcGIS Pro}}
* [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]
** [https://pro.arcgis.com/en/pro-app/arcpy/functions/table-properties.htm Table properties]


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Řádek 47: Řádek 48:


{{arccr500}}
{{arccr500}}
'''Další ukázky skriptů [http://geo102.fsv.cvut.cz/~landa/vyuka/155GIS2/arcpy-ulohy/skripty zde]''' ([http://geo102.fsv.cvut.cz/~landa/vyuka/155GIS2/arcpy-ulohy.zip zip]).


=== 1 ===
=== 1 ===


; 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]
** [https://pro.arcgis.com/en/pro-app/arcpy/functions/table-properties.htm Table properties]


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
   
   
try:
data = arcpy.Describe("ObcePolygony")   
  data = arcpy.Describe("ObcePolygony")   
  for i in range(len(data.fields)):
      print(data.fields[i].name)
except Exception as e:
  print(e)
</syntaxhighlight>
 
Tip:
 
<syntaxhighlight lang="python">
for field in data.fields:
for field in data.fields:
     print(field.name)
     print(field.name)
Řádek 93: Řádek 78:
arcpy.env.workspace = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb"
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
  rows = arcpy.SearchCursor("ObcePolygony", "NAZ_OBEC = 'Liberec'")  #vytvori cursor
for row in rows:
  for row in rows:
  pocet = row.POCET_OBYV # pocet obce Liberec
      pocet = row.POCET_OBYV # pocet obce Liberec
  break
      break
rows = arcpy.SearchCursor("ObcePolygony")
  rows = arcpy.SearchCursor("ObcePolygony")
for row in rows:
  for row in rows:
  if row.POCET_OBYV is not None and row.POCET_OBYV > pocet:
      if row.POCET_OBYV is not None and row.POCET_OBYV > pocet:
      print("{} - {}".format(row.NAZ_OBEC, row.POCET_OBYV))
        print("{0} - {1}".format(row.NAZ_OBEC, row.POCET_OBYV))
except Exception as e:
  print(e)
</syntaxhighlight>
</syntaxhighlight>


Řádek 118: Řádek 100:


kraje = r"S:\K155\Public\data\ArcGIS\ArcCR500 3.3\AdministrativniCleneni_v13.gdb\KrajePolygony"
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
     nazev = row.KOD_CZNUTS3
     print("{0}...".format(nazev))
     print("{}...".format(nazev))
     kraje_Select_shp = os.path.join(arcpy.env.workspace, nazev + ".shp")
     kraje_Select_shp = r"{}\{}".formar(arcpy.env.workspace, nazev)
     arcpy.Select_analysis(kraje, kraje_Select_shp, "\"KOD_CZNUTS3\" = '{}'".format(nazev))
     arcpy.analysis.Select(kraje, kraje_Select_shp, "KOD_CZNUTS3 = '{}'".format(nazev))
</syntaxhighlight>
</syntaxhighlight>


Řádek 136: Řádek 117:
obce = "ObcePolygony"
obce = "ObcePolygony"


try:
rows = arcpy.SearchCursor(obce, "NAZ_OBEC = 'Lhota'")
    data = arcpy.Describe(obce)
for row in rows:
    shapename = data.ShapeFieldName
    print("Prvek {}: ".format(row.NAZ_OBEC))
    rows = arcpy.SearchCursor(obce, '"NAZ_OBEC" = \'Lhota\'')
    for cast in prvek.SHAPE:
    for row in rows:
        for bod in cast:
        prvek = row.getValue(shapename)
            print("{} {}".format(bod.X, bod.Y))
        arcpy.AddMessage("Prvek {0}: ".format(row.NAZ_OBEC))
        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)
</syntaxhighlight>
</syntaxhighlight>



Aktuální verze z 23. 11. 2023, 08:12

Úvod do skriptování v jazyku Python (arcpy)

Náplň

Poznámky k systému ArcGIS

Python Window

View • Python Window

Ukázka interaktivní Python konzole v ArcGIS Pro
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

Ú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"
 
data = arcpy.Describe("ObcePolygony")   
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"

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("{} - {}".format(row.NAZ_OBEC, row.POCET_OBYV))

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("{}...".format(nazev))
    kraje_Select_shp = r"{}\{}".formar(arcpy.env.workspace, nazev)
    arcpy.analysis.Select(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"

rows = arcpy.SearchCursor(obce, "NAZ_OBEC = 'Lhota'")
for row in rows:
    print("Prvek {}: ".format(row.NAZ_OBEC))
    for cast in prvek.SHAPE:
        for bod in cast:
            print("{} {}".format(bod.X, bod.Y))

Další úlohy najdete v cvičení k předmětu 153GIS2.