I have a ROAD
table that has a row for each vertex of each line:
+---------+--------------+-------------+
| ROAD_ID | VERTEX_INDEX | MEASURE_VAL |
+---------+--------------+-------------+
| 1 | 1 | 0 |
| 1 | 2 | 1.2 |
| 1 | 3 | 2.8 |
| 1 | 4 | 4.0 |
| 1 | 5 | 4.3 |
| 1 | 6 | 6.7 |
| 1 | 7 | 7.1 |
+---------+--------------+-------------+
| 2 | 1 | 0 |
| 2 | 2 | 5.2 |
| 2 | 3 | 7.7 |
| 2 | 4 | 9.6 |
| 2 | 5 | 11.8 |
+---------+--------------+-------------+
| 3 | 1 | 0 |
| 3 | 2 | 2.4 |
| 3 | 3 | 4.9 |
+---------+--------------+-------------+
And an EVENT
table with rows that pertain to portions of roads:
+----------+---------+--------------+------------+
| EVENT_ID | ROAD_ID | FROM_MEASURE | TO_MEASURE |
+----------+---------+--------------+------------+
| 01 | 1 | 2.8 | 5.9 |
| 02 | 2 | 3.0 | 5.6 |
| 03 | 3 | 0 | 2.6 |
+----------+---------+--------------+------------+
I want to select the vertices from ROAD
where the MEASURE_VAL
encompasses/contains the EVENT
table's FROM_MEASURE
and TO_MEASURE
(including the vertices in between):
+---------+--------------+-------------+
| ROAD_ID | VERTEX_INDEX | MEASURE_VAL |
+---------+--------------+-------------+
| 1 | 3 | 2.8 |
| 1 | 4 | 4.0 |
| 1 | 5 | 4.3 |
| 1 | 6 | 6.7 |
+---------+--------------+-------------+
| 2 | 1 | 0 |
| 2 | 2 | 5.2 |
| 2 | 3 | 7.7 |
+---------+--------------+-------------+
| 3 | 1 | 0 |
| 3 | 2 | 2.4 |
| 3 | 3 | 4.9 |
+---------+--------------+-------------+
In other words, I want to select vertices from ROADS
where the MEASURE_VAL
is between the event FROM_MEASURE
and TO_MEASURE
, and if the MEASURE_VAL
does not exactly equal the FROM_MEASURE
or TO_MEASURE
, then also include the preceding and/or following vertices (where applicable).
Said yet differently again, I want to select the portion of the line that contains the event.
How can I do this?
measure_val
is exactly equal to afrom _measure
(eg 2.8 and 2.8)? Should the previous value (1.2
) be included in the result as well?measure_val
is exactly equal to afrom_measure
(eg 2.8 and 2.8), the previous value (1.2) should not be included in the result. This would apply to theto_measue
as well. I hadn't thought of that.measure_val
for road #1, vertex #3 from 2.7 to 2.8 to reflect this scenario. I will make note of this requirement in the question shortly.