der-stefan / OpenTopoMap

A topographic map from OpenStreetMap and SRTM data
https://opentopomap.org
Other
452 stars 118 forks source link

River/Riverbank #55

Open der-stefan opened 7 years ago

der-stefan commented 7 years ago

If waterway='river' is within waterway='riverbank', don't move arrow and text.

http://gis.stackexchange.com/questions/56874/how-to-split-line-layer-at-polygons-boundary-of-a-polygon-layer

der-stefan commented 7 years ago

This selects all line segments that intersect with riverbank polygons:

SELECT l.way,l.name,l.waterway FROM planet_osm_line l JOIN planet_osm_polygon p ON ST_Intersects(p.way,l.way) WHERE p.waterway='riverbank' AND l.name='Wiesent' AND l.waterway='river'

Problem: We need to cut the line into multiple lines at the border of the polygon.

der-stefan commented 7 years ago

Here is a example: The river without riverbank polygon, label gets moved to one side: 1 A river with riverbank, label should not be moved to one side, but stay in the center, not like this: 2

max-dn commented 7 years ago

select st_dump(st_split((select way FROM planet_osm_line where osm_id=23690734),(select st_union(way) from planet_osm_polygon where waterway='riverbank' and ST_Intersects(way,(select way FROM planet_osm_line where osm_id=23690734))))); returns 3 parts of way 23690734, but without info, which of them are inside a riverbank or outside. Maybe one could write a view/function which returns all parts with all tags and an additional flag "is_insideriverbank".

max-dn commented 7 years ago

Just as a proof of concept: you could use something like this funktion to get these parts of the Wiesent: Banks of Wiesent

But

der-stefan commented 5 years ago

@max-dn Could ST_Subdevide be a good a solution? http://www.stevencanplan.com/2017/12/the-genius-of-using-st_subdivide-to-speed-up-postgis-intersection-comparisons/

max-dn commented 5 years ago

Could ST_Subdevide be a good a solution?

Don't think so... st_subdevide is useful for large areas with complicated shape. waterway=riverbank in osm are small areas with simple lines: 70% have less than 100 Nodes, 92% less than 200, only 1% has more than 1000 (not necessary the largest, this one is mapped with 8527 nodes). Dividing this simple polygons in more simple won't help. In the manual for ST_Subdevide there is a reference to ST_Segmentize. Maybe splitting the waterway in short ways (short but long enough for a label..) could work....