GRASS GIS - Konzistence vektorových dat: Porovnání verzí

Z GeoWikiCZ
m (Obsah stránky nahrazen textem „{{freegiswiki|GRASS GIS / Konzistence vektorových dat}}“)
 
(Nejsou zobrazeny 4 mezilehlé verze od stejného uživatele.)
Řádek 1: Řádek 1:
{{Upravit}}
{{freegiswiki|GRASS GIS / Konzistence vektorových dat}}
< [[GRASS GIS]]
 
Data poskytovaná v netopologických formátech (např. ESRI Shapefile) často obsahují řadu chyb a ve výsledku jsou nekonzistentní. V systémech, které na topologickou čistotu dat nekladou příliš důraz (jako je např. ESRI ArcGIS) se tyto chyby v datech neprojeví. GRASS jako striktně topologický GIS tyto chyby v datech neignoruje. Např. po importu vrstvy 'obce' z balíčku dat pro [[153GIS1 2008 - 3. cvičení - GRASS GIS|3.cvičení]] předmětu [[153GIS1]] se chyby v datech projeví při aplikaci funkce 'dissolve' (sjednocení vektorových prvků). Např.
__TOC__
== Příklad ==
 
Vektorová data naimportuje do GRASSu:
 
<source lang="bash">
v.in.ogr dsn=obce.shp output=obce
</source>
 
<pre>
Number of nodes: 30138
Number of primitives: 43577
Number of points: 0
Number of lines: 0
Number of boundaries: 33456
Number of centroids: 10121
Number of areas: 13448
Number of isles: 9
Number of areas without centroid: 3327
-----------------------------------------------------
WARNING: 3742 areas represent more (overlapping) features, because polygons
        overlap in input layer(s). Such areas are linked to more than 1
        row in attribute table. The number of features for those areas is
        stored as category in layer 2
6361 input polygons
Total area: 7.891444e+10 (13448 areas)
Overlapping area: 4.078277e+02 (3742 areas)
Area without category: 3.879863e+02 (3327 areas)
</pre>
 
Vzhledem k nekonzistenci dat spojení ploch ('dissolve') nefunguje správně.
 
<source lang="bash">
v.dissolve input=obce output=cr column=pomoc
</source>
 
[[Image:V_dissolve_obce_error.png|thumb|400px|center|Nekonzistence v datech se objeví po spojení ploch]]
 
== Identifikace chyby v datech ==
 
Vektorová mapa obsahuje překrývající se plochy.
 
<source lang="bash">
v.category input=obce option=report
</source>
 
<pre>
Layer/table: 1/obce
type      count        min        max
point          0          0          0
line          0          0          0
boundary      0          0          0
centroid  13863          1      6249
area          0          0          0
face          0          0          0
kernel        0          0          0
all        13863          1      6249
Layer: 2
type      count        min        max
point          0          0          0
line          0          0          0
boundary      0          0          0
centroid    3742          2          2
area          0          0          0
face          0          0          0
kernel        0          0          0
all        3742          2          2
</pre>
 
Výměru ploch vektorové mapy spočteme ve třetí vrstvě. Nejprve přidáme kategorie všem centroidům.
 
<source lang="bash">
v.category input=obce output=obce3 layer=3 option=add
</source>
 
<source lang="bash">
v.category input=obce3 option=report
</source>
 
<pre>
Layer/table: 1/obce3
type      count        min        max
point          0          0          0
line          0          0          0
boundary      0          0          0
centroid  13863          1      6249
area          0          0          0
face          0          0          0
kernel        0          0          0
all        13863          1      6249
Layer: 3
type      count        min        max
point          0          0          0
line          0          0          0
boundary      0          0          0
centroid  10121          1      10121
area          0          0          0
face          0          0          0
kernel        0          0          0
all        10121          1      10121
Layer: 2
type      count        min        max
point          0          0          0
line          0          0          0
boundary      0          0          0
centroid    3742          2          2
area          0          0          0
face          0          0          0
kernel        0          0          0
all        3742          2          2
</pre>
 
Třetí vrstvě přiřadíme atributovou tabulku se dvěma sloupci - 'cat' a 'area'.
 
<source lang="bash">
v.db.addtable map=obce3 layer=3 columns="cat integer, area double precision"
</source>
 
Pro kontrolu si vypíšeme seznam připojených atributových tabulek.
 
<source lang="bash">
v.db.connect map=obce3 -p
</source>
 
<pre>
Vector map <obce3@landa> is connected by:
layer <1> table <obce3> in database </home/martin/grassdata/gis1/landa/dbf/> through driver <dbf> with key <cat>
layer <3> table <obce3_3> in database </home/martin/grassdata/gis1/landa/dbf/> through driver <dbf> with key <cat>
</pre>
 
Spočteme výměru ploch a hodnotu uložíme do sloupce 'area'.
 
<source lang="bash">
v.to.db map=obce3 option=area columns=area layer=3
</source>
 
Data zobrazíme.
 
<source lang="bash">
d.vect map=obce3 type=area
d.vect map=obce3 type=area layer=3 where="area < 10" fcolor=red color=red
</source>
 
[[Image:d_vect_obce.png|thumb|center|400px|Vizualizace vektorové vrstvy 'obce', červeně jsou zvýrazněny plochy s výměrou menší než 10m<sup>2</sup>]]
 
== Řešení ==
 
Nakonec odstraníme plochy s výměrou menší než 10 km<sup>2</sup>.
 
<source lang="bash">
v.clean input=obce output=obceX type=area tool=rmarea thresh=10
</source>
 
<pre>
--------------------------------------------------
Tool: Remove small areas
7087 areas of total size 795.814 removed
--------------------------------------------------
</pre>
 
Po vyčištění dat již funkce spojení ploch vrací správný výsledek.
 
[[Image:V_dissolve_obce.png|thumb|400px|center|Spojení ploch na základě zvoleného atributu]]
 
{{GRASS}}

Aktuální verze z 9. 1. 2013, 16:31