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

Z GeoWikiCZ
mBez shrnutí editace
 
(Není zobrazeno 52 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
[[153GIS2 GIS 2| Hlavní stránka předmětu]]
{{Zastaralé|155GIS2}}
{{Cvičení|153GIS2|10|Skriptování v Python - úvod}}
== Zadání ==
;Náplň
* [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002z00000001000000.htm What is Python?]
* [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002100000017000000.htm What is Python Window?]
* [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002z00000023000000.htm Quick tour of Python]
* [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002100000021000000.htm Writing Python scripts]
* [http://www.esri.com/library/fliers/pdfs/python-in-arcgis10.pdf Getting started with Python in ArcGIS 10]
* [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//000v000000v7000000.htm What is ArcPy?]


==Skriptování v Python - úvod== 
<!--[http://www.gis.usu.edu/~jlowry/python/Documents/Writing_Geoprocessing_Scripts.pdf kniha o skriptování v ArcGIS]-->


[http://www.scribd.com/doc/6594613/Writing-Geoprocessing-Scripts e-kniha o skriptování v ArcGIS]
[http://josef.fsv.cvut.cz/~cajthaml/vyuka/gis2/gis2_cviceni10.zip Data pro 4. skript]


===Ukázka skriptů:===
==Ukázka skriptů Python (ArcGIS 10) ==
import arcgisscripting, sys     #import modulu
 
  gp = arcgisscripting.create()  #vytvoreni objektu geoprocessingu
=== Výpis názvů atributů (verze ArcGIS 10) ===
gp.Overwriteoutput = 1         #nastaveno prepisovani
 
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
<source lang="python">
import arcpy     #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
   
try:
  data = arcpy.Describe("obce.shp")   
  i = 0
  while (data.fields[i].name):
      print data.fields[i].name
      i += 1
except:
  print arcpy.GetMessages()
</source>
 
=== Výpis obcí, které mají počet obyvatel vyšší než Liberec (verze ArcGIS 10) ===
 
<source lang="python">
import arcpy    #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
   
   
try:
try:
    data = gp.Describe("obce.shp")   
  rows = arcpy.SearchCursor("obce.shp", '"NAZEV" = \'Liberec\''#vytvori cursor
    fields = data.Fields
  for row in rows:
    field = fields.next()
    pocet = row.OB01    #pocet obyvatel zadane obce
    while field:
  radky = arcpy.SearchCursor("obce.shp")
      print field.Name
  for radek in radky:
      field = fields.next()
      if (radek.OB01 > pocet):
except:
        print "%s - %i" %(radek.NAZEV, radek.OB01)
    print gp.GetMessages()  
except:
  print arcpy.GetMessages()
</source>
 
=== Vytvoření souborů Shapefile pro jednotlivé kraje (verze ArcGIS 10) ===


<source lang="python">
import arcpy    #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze


import arcgisscripting, sys    #import modulu
kraje = "kraje.shp"
gp = arcgisscripting.create()  #vytvoreni objektu geoprocessingu
 
gp.Overwriteoutput = 1          #nastaveno prepisovani
rows = arcpy.SearchCursor(kraje)  #vytvori cursor
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
for row in rows:
      nazev = row.NUTS3
      kraje_Select_shp = arcpy.env.workspace + nazev + ".shp"
      arcpy.Select_analysis(kraje, kraje_Select_shp, "\"NUTS3\" = '"+nazev+"'")
</source>
 
=== Výpis souřadnic lomových bodů uzemí obce 'Lhota' (verze ArcGIS 10) ===
 
<source lang="python">
 
import arcpy    #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/gis1/obce"    #nastaveni workspace - pracovni adresar nebo geodatabaze
   
   
try:
try:
   input = "Liberec"     #String - nazev obce
   data = arcpy.Describe("obce.shp")
   rows = gp.SearchCursor("obce.shp")   #vytvori cursor
  shapename = data.ShapeFieldName
   row = rows.next()       #promena row obsahuje jeden zaznam ze shapefilu
   rows = arcpy.SearchCursor("obce.shp", '"NAZEV" = \'Lhota\'')
  while row:
   for row in rows:
      if row.GetValue("NAZEV") == input:
      prvek = row.getValue(shapename)
           pocet = row.GetValue("OB01")     #pocet obyvatel zadane obce
      print "Prvek %s: " % row.NAZEV
      row = rows.next()
      partnum = 0
   radky = gp.SearchCursor("obce.shp")
      for part in prvek:
   rad = radky.next()
          print "Part %i: " % partnum
   while rad:
          for bod in prvek.getPart(partnum):
      if rad.GetValue("OB01") > pocet:
              print bod.X, bod.Y
          print rad.GetValue("NAZEV"), rad.GetValue("OB01")
           partnum +=
      rad = radky.next()
except:
except:
  print arcpy.GetMessages()
</source>
 
==Ukázka skriptů Python (ArcGIS 9) ==
 
=== Výpis názvů atributů (verze ArcGIS 9) ===
 
<source lang="python">
import arcgisscripting     #import modulu
gp = arcgisscripting.create()   #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = True          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
try:
   data = gp.Describe("obce.shp")  
  fields = data.Fields
   field = fields.next()
   while field:
      print field.Name
      field = fields.next()
except:
   print gp.GetMessages()  
   print gp.GetMessages()  
</source>


=== Výpis obcí, které mají počet obyvatel vyšší než obce 'Liberec' (verze ArcGIS 9)===


<source lang="python">
import arcgisscripting, sys    #import modulu
gp = arcgisscripting.create()  #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = 1          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
try:
  input = "Liberec"    #String - nazev obce
  rows = gp.SearchCursor("obce.shp")  #vytvori cursor
  row = rows.next()      #promena row obsahuje jeden zaznam ze shapefilu
  while row:
      if row.GetValue("NAZEV") == input:
          pocet = row.GetValue("OB01")    #pocet obyvatel zadane obce
      row = rows.next()
  radky = gp.SearchCursor("obce.shp")
  rad = radky.next()
  while rad:
      if rad.GetValue("OB01") > pocet:
        print rad.GetValue("NAZEV"), rad.GetValue("OB01")
      rad = radky.next()
except:
  print gp.GetMessages()
</source>
=== Vytvoření souborů Shapefile pro všechny obce, které mají počet obyvatel větší než zadaná obec  (ArcGIS 9) ===
<source lang="python">
import arcgisscripting, sys    #import modulu
gp = arcgisscripting.create()  #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = 1          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
try:
  input = sys.argv[1]    #String - nazev obce
  output = sys.argv[2]    #cesta k textovemu souboru
  f = open(output, 'w')  #otevru file
  rows = gp.SearchCursor("obce.shp")  #vytvori cursor
  row = rows.next()      #promena row obsahuje jeden zaznam ze shapefilu
  while row:
      if row.GetValue("NAZEV") == input:
          pocet = row.GetValue("OB01")    #pocet obyvatel zadane obce
      row = rows.next()
  radky = gp.SearchCursor("obce.shp")
  rad = radky.next()
  while rad:
      if rad.GetValue("OB01") > pocet:
          f.write(rad.GetValue("NAZEV")+" "+str(rad.GetValue("OB01"))+"\n")    #do souboru pisu obce ktere maji vic obyvatel nez zadana
      rad = radky.next()
  f.close()
except:
  print gp.GetMessages()
</source>
=== Vytvoření souborů Shapefile pro jednotlivé kraje (verze ArcGIS 9) ===
<source lang="python">
import sys, string, os, arcgisscripting
gp = arcgisscripting.create()
gp.workspace = "d:/jirka/skola/vyuka/gis/"   
kraje = "D:\\jirka\\skola\\vyuka\\gis\\kraje.shp"
rows = gp.SearchCursor("kraje.shp")  #vytvori cursor
row = rows.next()      #promena row obsahuje jeden zaznam ze shapefilu
while row:
      nazev = row.GetValue("NAZEV_ENG")
      kraje_Select_shp = "D:\\jirka\\skola\\vyuka\\gis\\"+nazev+".shp"
      gp.Select_analysis(kraje, kraje_Select_shp, "\"NAZEV_ENG\" = '"+nazev+"'")
      row = rows.next()
</source>
=== Vytvoření souborů Shapefile po sloučení polygonů (ArcGIS 9) ===
<source lang="python">
import arcgisscripting, sys
gp = arcgisscripting.create()
gp.Overwriteoutput = 1
gp.workspace = "i:/pracovni/cajthaml/" 
try:
    input = sys.argv[1] # vstup
    mezi = sys.argv[2]  # mezivysledek po dissolve
    dis = sys.argv[3]  # nazev atributu pro dissolve
    gp.Dissolve_management (input, mezi, dis)
    radky = gp.SearchCursor(mezi)
    rad = radky.next()
    while rad:
        nazev = rad.GetValue(dis)
        vystup = nazev+".shp"
        gp.Select_analysis (mezi, vystup, "\""+dis+"\" = '"+nazev+"'")  # vytvori samostane shapefily pro dissolvovane prvky
        rad = radky.next()
except:
  print gp.GetMessages()
</source>
== Ukázka Python kódu v rámci Field Calculatoru ==
=== Délka názvu ===
<source lang="python">
def pocet(jmeno):
  delka=jmeno.count(' ')+1
  return delka
slov=pocet(!NAZEV!)
</source>
=== Posun souřadnice ve směru osy X ===
<source lang="python">
def posun(geometrie):
point = geometrie.getPart(0)
point.X = point.X - 2000
return point
Shape=posun(!Shape!)
</source>


import arcgisscripting, sys    #import modulu
gp = arcgisscripting.create()  #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = 1          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"    #nastaveni workspace - pracovni adresar nebo geodatabaze
try:
  input = sys.argv[1]    #String - nazev obce
  output = sys.argv[2]    #cesta k textovemu souboru
  f = open(output, 'w')  #otevru file
  rows = gp.SearchCursor("obce.shp")  #vytvori cursor
  row = rows.next()      #promena row obsahuje jeden zaznam ze shapefilu
  while row:
      if row.GetValue("NAZEV") == input:
          pocet = row.GetValue("OB01")    #pocet obyvatel zadane obce
      row = rows.next()
          radky = gp.SearchCursor("obce.shp")
  rad = radky.next()
  while rad:
      if rad.GetValue("OB01") > pocet:
          f.write(rad.GetValue("NAZEV")+" "+str(rad.GetValue("OB01"))+"\n")    #do souboru pisu obce ktere maji vic obyvatel nez zadana
      rad = radky.next()
  f.close()
except:
  print gp.GetMessages()
{{GIS}}
{{GIS}}
{{Python}}

Aktuální verze z 16. 2. 2015, 15:41

Skriptování v Python - úvod

Zadání

Náplň


Data pro 4. skript

Ukázka skriptů Python (ArcGIS 10)

Výpis názvů atributů (verze ArcGIS 10)

import arcpy     #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze
 
try:
   data = arcpy.Describe("obce.shp")   
   i = 0
   while (data.fields[i].name):
      print data.fields[i].name
      i += 1
except:
   print arcpy.GetMessages()

Výpis obcí, které mají počet obyvatel vyšší než Liberec (verze ArcGIS 10)

import arcpy     #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze
 
try:
  rows = arcpy.SearchCursor("obce.shp", '"NAZEV" = \'Liberec\'')   #vytvori cursor
  for row in rows:
     pocet = row.OB01     #pocet obyvatel zadane obce
  radky = arcpy.SearchCursor("obce.shp")
  for radek in radky:
      if (radek.OB01 > pocet):
         print "%s - %i" %(radek.NAZEV, radek.OB01)
except:
   print arcpy.GetMessages()

Vytvoření souborů Shapefile pro jednotlivé kraje (verze ArcGIS 10)

import arcpy     #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze

kraje = "kraje.shp"

rows = arcpy.SearchCursor(kraje)   #vytvori cursor
for row in rows:
      nazev = row.NUTS3
      kraje_Select_shp = arcpy.env.workspace + nazev + ".shp"
      arcpy.Select_analysis(kraje, kraje_Select_shp, "\"NUTS3\" = '"+nazev+"'")

Výpis souřadnic lomových bodů uzemí obce 'Lhota' (verze ArcGIS 10)

import arcpy     #import modulu
arcpy.env.overwiteOutput = True
arcpy.env.workspace = "d:/gis1/obce"     #nastaveni workspace - pracovni adresar nebo geodatabaze
 
try:
   data = arcpy.Describe("obce.shp")
   shapename = data.ShapeFieldName
   rows = arcpy.SearchCursor("obce.shp", '"NAZEV" = \'Lhota\'')
   for row in rows:
       prvek = row.getValue(shapename)
       print "Prvek %s: " % row.NAZEV
       partnum = 0
       for part in prvek:
           print "Part %i: " % partnum
           for bod in prvek.getPart(partnum):
               print bod.X, bod.Y
           partnum += 1  
except:
   print arcpy.GetMessages()

Ukázka skriptů Python (ArcGIS 9)

Výpis názvů atributů (verze ArcGIS 9)

import arcgisscripting     #import modulu
gp = arcgisscripting.create()   #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = True          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze
 
try:
   data = gp.Describe("obce.shp")   
   fields = data.Fields
   field = fields.next()
   while field:
      print field.Name
      field = fields.next()
except:
   print gp.GetMessages()

Výpis obcí, které mají počet obyvatel vyšší než obce 'Liberec' (verze ArcGIS 9)

import arcgisscripting, sys     #import modulu
gp = arcgisscripting.create()   #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = 1          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze
 
try:
  input = "Liberec"     #String - nazev obce
  rows = gp.SearchCursor("obce.shp")   #vytvori cursor
  row = rows.next()       #promena row obsahuje jeden zaznam ze shapefilu
  while row:
      if row.GetValue("NAZEV") == input:
          pocet = row.GetValue("OB01")     #pocet obyvatel zadane obce
      row = rows.next()
  radky = gp.SearchCursor("obce.shp")
  rad = radky.next()
  while rad:
      if rad.GetValue("OB01") > pocet:
         print rad.GetValue("NAZEV"), rad.GetValue("OB01")
      rad = radky.next()
except:
  print gp.GetMessages()

Vytvoření souborů Shapefile pro všechny obce, které mají počet obyvatel větší než zadaná obec (ArcGIS 9)

import arcgisscripting, sys     #import modulu
gp = arcgisscripting.create()   #vytvoreni objektu geoprocessingu
gp.Overwriteoutput = 1          #nastaveno prepisovani
gp.workspace = "d:/jirka/skola/vyuka/gis/model/"     #nastaveni workspace - pracovni adresar nebo geodatabaze
try:
  input = sys.argv[1]     #String - nazev obce
  output = sys.argv[2]    #cesta k textovemu souboru
  f = open(output, 'w')   #otevru file
  rows = gp.SearchCursor("obce.shp")   #vytvori cursor
  row = rows.next()       #promena row obsahuje jeden zaznam ze shapefilu
  while row:
      if row.GetValue("NAZEV") == input:
          pocet = row.GetValue("OB01")     #pocet obyvatel zadane obce
      row = rows.next()
  radky = gp.SearchCursor("obce.shp")
  rad = radky.next()
  while rad:
      if rad.GetValue("OB01") > pocet:
          f.write(rad.GetValue("NAZEV")+" "+str(rad.GetValue("OB01"))+"\n")    #do souboru pisu obce ktere maji vic obyvatel nez zadana
      rad = radky.next()
  f.close()
except:
  print gp.GetMessages()

Vytvoření souborů Shapefile pro jednotlivé kraje (verze ArcGIS 9)

import sys, string, os, arcgisscripting

gp = arcgisscripting.create()
gp.workspace = "d:/jirka/skola/vyuka/gis/"     

kraje = "D:\\jirka\\skola\\vyuka\\gis\\kraje.shp"

rows = gp.SearchCursor("kraje.shp")   #vytvori cursor
row = rows.next()       #promena row obsahuje jeden zaznam ze shapefilu
while row:
      nazev = row.GetValue("NAZEV_ENG") 
      kraje_Select_shp = "D:\\jirka\\skola\\vyuka\\gis\\"+nazev+".shp"
      gp.Select_analysis(kraje, kraje_Select_shp, "\"NAZEV_ENG\" = '"+nazev+"'")
      row = rows.next()

Vytvoření souborů Shapefile po sloučení polygonů (ArcGIS 9)

import arcgisscripting, sys
gp = arcgisscripting.create()
gp.Overwriteoutput = 1 
gp.workspace = "i:/pracovni/cajthaml/"  

try:
    input = sys.argv[1] # vstup
    mezi = sys.argv[2]  # mezivysledek po dissolve
    dis = sys.argv[3]   # nazev atributu pro dissolve

    gp.Dissolve_management (input, mezi, dis) 

    radky = gp.SearchCursor(mezi)
    rad = radky.next()

    while rad:
        nazev = rad.GetValue(dis)
        vystup = nazev+".shp"
        gp.Select_analysis (mezi, vystup, "\""+dis+"\" = '"+nazev+"'")  # vytvori samostane shapefily pro dissolvovane prvky
        rad = radky.next()

except:
  print gp.GetMessages()

Ukázka Python kódu v rámci Field Calculatoru

Délka názvu

def pocet(jmeno):
   delka=jmeno.count(' ')+1
   return delka

slov=pocet(!NAZEV!)

Posun souřadnice ve směru osy X

def posun(geometrie):
	point = geometrie.getPart(0)
	point.X = point.X - 2000
	return point

Shape=posun(!Shape!)