File: v.select.html

package info (click to toggle)
grass 8.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 277,040 kB
  • sloc: ansic: 460,798; python: 227,732; cpp: 42,026; sh: 11,262; makefile: 7,007; xml: 3,637; sql: 968; lex: 520; javascript: 484; yacc: 450; asm: 387; perl: 157; sed: 25; objc: 6; ruby: 4
file content (308 lines) | stat: -rw-r--r-- 10,775 bytes parent folder | download | duplicates (2)
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