Actualmente estoy enfrentando tiempos difíciles tratando de crear una línea simplificada de una calle de la geometría.
Los datos que estoy utilizando actualmente proviene de OpenStreetMap, utilizando osm2pgsql.(Lo que significa PostGIS, pero estoy abierto a soluciones que no la use, o uso de código externo, como C, JS, o lo que sea).
El problema: Necesito crear una versión simplificada de la cadena de la línea de calles, sin embargo, la mayoría de las calles tienen varios segmentos, tales como:
En este ejemplo, la calle se bifurca y segmentados, la GeoJSON está disponible aquí.
La descarga de los puntos de la calle es útil que podría ser convertido a una cadena de la línea, sin embargo, su pedido está en mal estado, provocando bizzare de la línea de formaciones. Yo podría resolver parcialmente este problema pedidos por lon/lat o lat/lon, pero en varios casos de los puntos en el mismo eje o por la geometría del ángulo, no de orden que les corresponda, y por lo tanto, no funciona para todas las calles.
Algunas soluciones que se me ocurrió:
- El uso de ST_Buffer en cada segmento, de unión, y ST_ApproximateMedialAxis en la geometría resultante. No funcionaba porque algunas calles, con un generoso búfer de tener a todos los segmentos de tocarse el uno al otro y también ST_ApproximateMedialAxis no son siempre el resultado de una cadena de líneas (No una función de la culpa, es el comportamiento esperado).
- Ordenar por LAT/LON ~ LON/LAT y la creación de una línea del resultado: Además de no funcionar como se explicó anteriormente.
- El uso de ST_LineMerge: Nope en las calles no funciona, pero en bifurcada o segmentado calles, se produce un error, como se explica aquí.
- Iterando sobre los puntos para crear una línea desde cada punto del vecino más cercano: Falla debido a la incapacidad para encontrar el verdadero primer y último puntos.
La tarea más difícil hasta ahora es llegar a los puntos más lejanos del conjunto dado, para definir el primer y el último punto, consiguiendo de esta información podría resolver el problema para mí, pero estoy despistado hasta ahora?
Pensé acerca del uso de ST_VoronoiPolygons, pero no tengo idea de cómo extraer algunos son el resultado de eso?