Segmentos de las calles

Buenos días a todos,

En nuestro equipo estamos teniendo un problema con la forma que están los datos de las calles, si nos pueden dar una mano estaría muy agradecido. En el proyecto que estoy, entre otras cosas, se permite indicar cortes en segmentos de calles y enviarlos a Waze (Específicamente CABA).

El inconveniente se da en la forma que la comunidad carga los segmentos de las calles, algunas calles son tramos enteros y otras cortadas en las esquinas (o una mezcla de ambos). Además de que quedan sin definirlos los giros permitidos en las esquinas, prestando a confusión si la calle pasa por debajo o es una esquina.

Creo que se va a entender mejor lo que digo con esta imagen:

Como ven no hay una forma única en como se crea cada segmento de cada calle, en cambio en Waze (siguiente imagen) cada calle está dividida correctamente en segmentos con su información de giro para cada uno de ellos.

El problema que los segmentos estén divididos de forma azarosa trae enormes dolores de cabeza a la hora de exportar los datos para usarlos como una red de referencia, ignoro si habrá alguna forma de exportarlos teniendo en cuenta las esquinas, todas las formas que encontré requerían algoritmos complejos (que tienden a fallas involuntarias).

Mi consulta seria:
a) Se crean las calles de esta forma por alguna razón en especial?
b) Habría algún problema si nuestro equipo se toma el enorme trabajo de dividir todos los segmentos de CABA?

Entiendo que el cambio sería muy grande a nivel historial, probé dividir una calle en sus esquinas (sin guardar) y me tiro más de 30 cambios a realizar. Realmente creo que lo correcto seria dividir todas las calles, entiendo que es mucho trabajo, pero sería muy beneficioso para los que desarrollas aplicaciones y la cohesión de los datos.

Desde ya muchas gracias

Hola fzaldo, una gran fortaleza y problema a la vez de OpenStreetMap es la multiplicidad de usos, puede ser un Waze, una base para StreetView, una api de datos en múltiples idiomas, o un lindo mapa que solo muestra ríos. Lo que es conveniente para una aplicación no lo es para otra, un usuario por ejemplo encontró esta discusión que va en sentido contrario a lo que planteás, indicando que para Wikidata cortar una calle en múltiples segmentos es problemático: https://help.openstreetmap.org/questions/75202/street-cut-into-segment-lines-unsuitable-for-wikidata.

Hay una norma que dice “no mapear para el render” (https://wiki.openstreetmap.org/wiki/Tagging_for_the_renderer), que es fácil extrapolar a situaciones como esta donde tomar tu sugerencia sería mapear para un aplicativo en concreto. En definitiva, es tirar el bardo al que desarrolla el software, con todo lo frustrante que esto puede ser para quienes están de ese lado, pero con el objetivo también de simplificar la vida al que edita el mapa. Un ejemplo de esto son los giros en U, si lo normal es que no se pueda girar en U, lo que se mapea es cuando está permitido; a la inversa si lo normal es que se pueda girar a la derecha, lo que se mapea es cuando está prohibido. Sin embargo esto puede variar de país a país, con lo que en un país mapeás lo prohibido, y en otro lo permitido, como ves es de vuelta dejar que el software se arregle y simplificar la vida al editor para que no tenga que mapear miles y miles de “Giros en U prohibidos”.

Por último, algo que solemos hacer cuando dudamos es ver cómo hacen en Europa donde el mapeo llega a niveles insólitos de detalle, y allí no vemos que se use esto de cortar por segmento.

Lamentamos no poder darte una respuesta satisfactoria, pero no dudes en contactarnos por otra consulta o sugerencia.

Saludos.

PD: expresé opiniones de varios usuarios del canal de Telegram https://t.me/osm_ar, si te interesa podés contactarnos allí.

Hola fzaldo, En general en OSM solo se divide una vía cuando cambian sus atributos o cuando una parte de la de la misma pertenece a una ruta de colectivos, senderismo, ciclismo u otros tipos de relación.

Dividir las vías en tramos por cuadra agrega complejidad, por ejemplo agregaría más miembros a las rutas de colectivos haciéndolas más pesadas y difíciles de mantener. Eso es lo que ocurrió en tu prueba, donde ibas a generar más de 30 cambios porque implícitamente estabas modificando las relaciones que pasan por esos segmentos.

Además, otros mapeadores podrían volver a combinar los segmentos divididos por no encontrar motivo para su división.

Así se ven las rutas de colectivos en el estilo de transporte público, lo cual explica las divisiones de segmentos viste:

Del mismo modo que no mapeamos para el render, tampoco se debería dividir todas las cuadras de las calles por la necesidad de un consumidor en particular. Es el consumidor él que debería dividir las vías exportadas en segmentos más pequeños si es que eso es mejor para su necesidad. Incluso otros consumidores podrían necesitar unificar todos los segmentos, como por ejemplo geocodificadores o wikidata.

Muchas gracias pertile y ignaciolep por las respuestas, entonces me toca ir por el camino de buscar la forma de interceptar esquinas con calles, si no hay muchos desarrolladores que se quejaran debe haber alguna forma mediamente performante de hacerlo.

De todas forma, pienso que la comunidad debería definir cuál forma utilizar como norma a seguir. Actualmente hay una mezcla de ambas que hace complicado para el que necesita segmentos únicos y para el que necesita cortos, o por ahí estoy ignorando que haya desarrolladores que le sirve como esta. Entiendo que para los editores se les complicaría mantener los segmentos por cuadra, pero creo que deberían ser las herramientas que utilizan las que faciliten esta tarea y no los datos.

Nuevamente gracias por iluminarme sobre este tema.

Saludos

PD: pertile no pude entrar al canal de telegram, me dice que no es accesible.

Respecto a las restricciones de giro, también se definen con relaciones. Esta aplicación los muestra de una manera muy amigable: https://ahorn.lima-city.de/tr/

Desconozco del tema pero seguramente exista algún extracto preparado de la manera que necesitas. Habría que investigar o consultar a algún desarrollador con experiencia. Por ejemplo creo que Graphhopper internamente divide las vías cuando se cruzan en un nodo.

El criterio es que solo se divide cuando cambian los atributos de la vía (nombre, carriles, superficie, etc.) o cuando una parte pertenece a una relación. De esta manera es más simple y se reduce el volumen de los datos.

Es lo que te planteaba, en este caso sería la herramienta que estás desarrollando la que tiene que realizar la tarea de acuerdo a la necesidad de tu proyecto, y no lo datos.

La licencia de OSM no es compatible con Waze, asi que solo podrias enviar a Waze datos sobre los cuales tengas derechos de autor, o sea datos que vos sos el autor (sin derivarlos de ninguna forma desde OSM), podrias subirlos a OSM y tambien a Waze, pero no podes tomar datos de OSM y enviarlos a Waze. No te lo permite la licencia.

https://www.openstreetmap.org/copyright

Cualquiera podria consumir datos de OpenStreetMap pero si los distribuye de alguna forma, tiene que distribuirlos con licencia ODBL (la de OSM), por lo tanto ni Waze ni StreetView cumplen con eso, y por lo tanto no les seria legal su uso.

Los ruteadores arman esa red segmentada en las intersecciones justamente porque la precisan. Hay varios ruteadores opensource que podes ver.
Supongo que eso lo hacen una vez en preproceso y arman la base de ruteo sobre la que despues calculan.
Quizas la performance no sea tanto problema en esos casos.

Muy buena la página, me gusto como muestra las restricciones, no la conocía gracias.

Claro como esta ahora, se buscó facilitar el trabajo al editor y reducir la cantidad de datos. Desde mi punto de vista no justifica, se pierde cohesión explícita, sería mejor segmentos cortos como lo hace Waze y USIG, pero bueno, es mi opinión.

Me refería a las herramientas para los editores, el proyecto en el que estoy no modifica los datos del mapa. Obviamente siempre que se desarrolla utilizando una fuente externa hay que adaptarse a ella, eso no se discute.

Por lo que entiendo, el fin último de OSM es la gente utilice los datos para explotarlos, pero tampoco me olvido que sin los editores no habría datos, y por este peso y contrapeso se llegó a esta forma de estructurar las calles.
La discusión para mí es si se facilita la tarea a los desarrolladores o a los editores, por eso dije que las herramientas para editar deben ayudar a los editores, los datos siempre tienen que estar normalizados y de forma que faciliten el uso para el mayor tipo de utilidades posible. En el ámbito de la programación es más fácil/rápido unir segmentos con el mismo nombre que dividir elementos geográficos que se interceptan.

No se envía nada a Waze que pueda afectar el copyright de OSM, se envía información de un corte que no fue generado por OSM en un punto de coordenadas. OSM no es dueño de ninguna coordenada, ni podría serlo.

De todas formas, por ahora vamos por el camino de usar la red de USIG que tiene los segmentos cortados por esquina, aunque la incompatibilidad que hay con Waze se da con todos los mapas (lamentablemente ellos no proveen los vectores). Estamos viendo de hacer un equilibrio entre mantener actualizado el mapa de USIG y el de Waze.

OSM es dueño de la base de datos geografica, claro que si, y la distribuye bajo licencia ODBL, y eso incluye las coordenadas y todos los demas datos.
Si vos usas esas coordenadas o cualquier otra informacion con origen en OSM, y eso lo procesas de la forma que quieras, sea automatico o manual, NO LO PODES SUBIR A WAZE, no son licencias compatibles.

Lo que vos haces se considera un trabajo derivado de OSM, y si lo distribuis tenes que distribuirlo bajo licencia ODBL (esto es obligatoriamente expresado por la ODBL).
Si por el motivo que sea usas datos provenientes de OSM en el procesamiento, asi sea poner una capa del mosaico web abajo, eso es un trabajo derivado. Si no podes cumplir con la licencia de algo es mejor no usarlo.

Ver https://wiki.openstreetmap.org/wiki/Legal_FAQ#If_I_have_data_derived_from_OSM_data.2C_do_I_have_to_distribute_it.3F

La unica manera de que subas tu trabajo derivado de OSM a Waze, y cumplir con las exigencias de la licencia de OpenStreetMap, seria que Waze publique sus datos en licencia ODBL, cosa que creo no hace por el momento.

Y tambien estarias violando los terminos de uso de Waze (que eso seria problema de ellos y tuyo), porque te pide que tengas los derechos de autor sobre el material (que no lo tenes porque, reitero, es trabajo derivado de OSM, y estas obligado si lo redistribuis a distribuirlo con licencia ODBL)) y se lo licencies a ellos con una licencia no compatible con ODBL.