153GIS2 / 10. cvičení: Porovnání verzí
mBez shrnutí editace |
|||
(Není zobrazeno 52 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
[[ | {{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?] | |||
<!--[http://www.gis.usu.edu/~jlowry/python/Documents/Writing_Geoprocessing_Scripts.pdf kniha o skriptování v ArcGIS]--> | |||
[http:// | [http://josef.fsv.cvut.cz/~cajthaml/vyuka/gis2/gis2_cviceni10.zip Data pro 4. skript] | ||
==Ukázka skriptů Python (ArcGIS 10) == | |||
=== Výpis názvů atributů (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: | |||
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: | |||
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() | |||
</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 | |||
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+"'") | |||
</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: | |||
data = arcpy.Describe("obce.shp") | |||
rows = | shapename = data.ShapeFieldName | ||
row = | 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 | |||
while | for bod in prvek.getPart(partnum): | ||
print bod.X, bod.Y | |||
partnum += 1 | |||
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> | |||
{{GIS}} | {{GIS}} | ||
{{Python}} |
Aktuální verze z 16. 2. 2015, 15:41
Skriptování v Python - úvod
Zadání
- Náplň
- What is Python?
- What is Python Window?
- Quick tour of Python
- Writing Python scripts
- Getting started with Python in ArcGIS 10
- What is ArcPy?
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!)