1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
|
<h2>DESCRIPTION</h2>
<em>v.select</em> allows the user to select features from a vector
map by features from another one.
<p>Supported operators (without GEOS; using GRASS' own algorithm):
<ul>
<li><b>overlap</b> - features partially or completely overlap (GEOS equivalent: intersects)</li>
</ul>
Supported operators (internally using
<a href="https://trac.osgeo.org/geos/">GEOS</a> - Geometry Engine, Open Source):
<ul>
<li><b>equals</b> - features are spatially equals</li>
<li><b>disjoint</b> - features do not spatially intersect</li>
<li><b>intersects</b> - features spatially intersect (equivalent to native 'overlap')</li>
<li><b>touches</b> - features spatially touches</li>
<li><b>crosses</b> - features spatially crosses</li>
<li><b>within</b> - feature A is completely inside feature B</li>
<li><b>contains</b> - feature B is completely inside feature A</li>
<li><b>overlaps</b> - features spatially overlap</li>
<li><b>relate</b> - feature A is spatially related to feature B</li>
</ul>
<h2>NOTES</h2>
Only features with category numbers will be considered. If required
the <em><a href="v.category.html">v.category</a></em> module can be
used to add them. Typically boundaries do not need to be given a
category number, as an area's attributes are inherited from the
centroid. Typically points, lines, and centroids will always want to
have a cat number. E.g. take a road which separates two farms. It is
ambiguous as to which farm an attribute that is attached to the road
belongs to. The boundary only needs a cat number if it will hold its
own attributes, such as road name or pavement form. A centroid in each
paddock holds the information with respect to ownership, area, etc.
<h2>EXAMPLES</h2>
Preparation of example data (North Carolina sample dataset):
<div class="code"><pre>
# Create an grid for overlaying to ZIP code vector map
v.mkgrid map=boxgrid grid=10,10 position=coor \
coordinates=583600,201500 box=5000,5000
# set region to ZIP codes and boxgrid vector maps
g.region vector=zipcodes_wake,boxgrid -p res=100 -a
# enlarge region a bit for "white border" around map in monitor
g.region n=n+1000 s=s-1000 w=w-1000 e=e+1000 -p
d.mon wx0
</pre></div>
<h3>OVERLAP: features partially or completely overlap (using GRASS)</h3>
Select grid boxes (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=boxgrid fill_color=85:130:176
v.select ainput=boxgrid binput=zipcodes_wake output=v_select_OVERLAP operator=overlap
d.vect map=v_select_OVERLAP
d.vect map=zipcodes_wake type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_overlap.png" alt="v.select with OVERLAP operator"><br>
v.select with OVERLAP operator: selected grid boxes shown in yellow (using GRASS method)
</center>
<h3>OVERLAPS features spatially overlap (using GEOS)</h3>
Select grid boxes (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=boxgrid fill_color=85:130:176
v.select ainput=boxgrid binput=zipcodes_wake output=v_select_OVERLAPS operator=overlaps
d.vect map=v_select_OVERLAPS
d.vect map=zipcodes_wake type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_overlaps.png" alt="v.select with OVERLAPS operator"><br>
v.select with OVERLAPS operator: selected grid boxes shown in yellow (using GEOS method)
</center>
<h3>DISJOINT: features do not spatially intersect (using GEOS)</h3>
Select grid boxes (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=boxgrid fill_color=85:130:176
v.select ainput=boxgrid binput=zipcodes_wake output=v_select_DISJOINT operator=disjoint
d.vect map=v_select_DISJOINT
d.vect map=zipcodes_wake type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_disjoint.png" alt="v.select with DISJOINT operator"><br>
v.select with DISJOINT operator: selected grid boxes shown in yellow
</center>
<h3>EQUALS: features are spatially equals (using GEOS)</h3>
Select zipcode polygon (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
v.extract input=zipcodes_wake where=ZIPCODE_ID=35 output=zipcodeID35
v.select ainput=zipcodes_wake binput=zipcodeID35 output=v_select_EQUALS operator=equals
d.vect map=v_select_EQUALS
d.vect map=zipcodes_wake type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_equals.png" alt="v.select with EQUALS operator"><br>
v.select with EQUALS operator: selected grid boxes shown in yellow
</center>
<h3>INTERSECTS: features spatially intersect (using GEOS)</h3>
Select zipcode polygons (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=boxgrid fill_color=85:130:176
v.select ainput=zipcodes_wake binput=boxgrid output=v_select_INTERSECTS operator=intersects
d.vect map=v_select_INTERSECTS
d.vect map=boxgrid type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_intersects.png" alt="v.select with INTERSECTS operator"><br>
v.select with INTERSECTS operator: selected grid boxes shown in yellow
</center>
<h3>TOUCHES: features spatially touches (using GEOS)</h3>
Select polygons (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=zipcodeID35 fill_color=85:130:176
v.select ainput=zipcodes_wake binput=zipcodeID35 output=v_select_TOUCHES operator=touches
d.vect map=v_select_TOUCHES
d.vect map=zipcodes_wake type=boundary color=255:255:50
</pre></div>
<center>
<img src="v_select_op_touches.png" alt="v.select with TOUCHES operator"><br>
v.select with TOUCHES operator: selected polygons shown in yellow (blue: input polygon)
</center>
<h3>CROSSES: features spatially crosses (using GEOS)</h3>
Select zipcode polygons by lines (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=busroute1 color=200:27:27 width=3
v.select ainput=zipcodes_wake binput=busroute1 output=v_select_CROSSES operator=crosses
d.vect map=v_select_CROSSES
d.vect map=zipcodes_wake type=boundary color=255:255:50
d.vect map=busroute1 color=200:27:27 width=3
</pre></div>
<center>
<img src="v_select_op_crosses.png" alt="v.select with CROSSES operator"><br>
v.select with CROSSES operator: selected polygons shown in yellow (red: input lines)
</center>
<h3>WITHIN feature A is completely inside feature B (using GEOS)</h3>
Select zipcode polygons (North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=boundary_county fill_color=85:130:176
v.select ainput=zipcodes_wake binput=boundary_county output=v_select_WITHIN operator=within
d.vect map=v_select_WITHIN
</pre></div>
<center>
<img src="v_select_op_within.png" alt="v.select with WITHIN operator"><br>
v.select with WITHIN operator: selected polygons shown in yellow (blue: input polygons)
</center>
<h3>CONTAINS feature B is completely inside feature A (using GEOS)</h3>
Select zipcode polygon (North Carolina sample dataset):
<h4>CONTAINS with polygons</h4>
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=zipcodeID35 fill_color=85:130:176
v.select ainput=zipcodes_wake binput=zipcodeID35 \
output=v_select_CONTAINS_pol operator=contains
d.vect map=v_select_CONTAINS
</pre></div>
<center>
<img src="v_select_op_contains_pol.png" alt="v.select with CONTAINS operator"><br>
v.select with CONTAINS operator: selected polygon shown in yellow (blue: input polygon, not visible)
</center>
<h4>CONTAINS with points</h4>
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=hospitals fill_color=195:31:31 icon=basic/cross3 size=10
v.select ainput=zipcodes_wake binput=hospitals \
output=v_select_CONTAINS_pnts operator=contains
d.vect map=v_select_CONTAINS_pnts
d.vect map=hospitals fill_color=195:31:31 icon=basic/cross3 size=10
</pre></div>
<center>
<img src="v_select_op_contains_pnts.png" alt="v.select with CONTAINS operator"><br>
v.select with CONTAINS operator: selected polygons shown in yellow (red: input points)
</center>
<h3>RELATE feature A is spatially related to feature B (using GEOS)</h3>
This operator additionally requires the <b>relate</b> parameter (in other
GIS called 'ST_Relate').
This operator allows calculating the
<a href="https://en.wikipedia.org/wiki/DE-9IM">Dimensionally Extended nine-Intersection Model (DE-9IM)</a>.
In the following one example: Select polygon with 'TOUCHES' operator
(North Carolina sample dataset):
<div class="code"><pre>
d.vect map=zipcodes_wake fill_color=0:128:0
d.vect map=zipcodeID35 fill_color=85:130:176
v.select ainput=zipcodeID35 binput=zipcodes_wake \
output=v_select_TOUCHES_relate operator=relate relate='T********'
d.vect map=v_select_TOUCHES
</pre></div>
The result of <code>relate='T********'</code> is the same as seen
above in the example 'TOUCHES'.
See the <a href="https://en.wikipedia.org/wiki/DE-9IM">DE-9IM</a> page
for related operators and their definition.
<h3>Extraction of points falling into a polygon</h3>
Extract fire stations (points) falling into urban area (polygon) - North Carolina
data set (point in polygon test):
<div class="code"><pre>
v.select ainput=firestations binput=urbanarea output=urban_firestations \
operator=overlap
</pre></div>
<h3>Extraction of lines overlapping with a polygon</h3>
Extract railroad lines from zip code map overlapping with the urban area
(line in polygon test):
<div class="code"><pre>
v.select ainput=railroads binput=urbanarea \
output=railroads_in_urbanarea operator=overlap
</pre></div>
<h3>Extraction of areas overlapping with a line</h3>
Extract those areas from zip code map which overlap with railroads
(polygon on line test):
<div class="code"><pre>
# first add a tiny buffer around railroad lines:
v.buffer input=railroads output=railroads_buf20m \
distance=20
v.select ainput=zipcodes_wake binput=railroads_buf20m \
output=zipcodes_wake_railroads operator=overlap
</pre></div>
<!-- 2015: still an issue?
<h2>TODO</h2>
Processing areas with GEOS is currently incredibly slow. Significant
speed-up is desired.
-->
<h2>SEE ALSO</h2>
<em>
<a href="v.category.html">v.category</a>,
<a href="v.clip.html">v.clip</a>,
<a href="v.overlay.html">v.overlay</a>,
<a href="v.extract.html">v.extract</a>
</em>
<p>
<a href="sql.html">GRASS SQL interface</a><br>
<a href="https://trac.osgeo.org/geos/">GEOS</a> - Geometry Engine, Open Source
<h2>AUTHORS</h2>
Radim Blazek<br>
GEOS support by Martin Landa, Czech Technical University in Prague, Czech Republic<br>
ZIP code examples by Carol X. Garzon-Lopez, Trento, Italy
|