consulta postgis para direcciones (con datos osm)

Quiero hacer consultas para las direcciones a la database postgis con datos de openstreetmap, verificar si dicha dirección existe en la database y, de ser así, get coorderadas. La database se llenó del file .pbf usando ósmosis. Este es el esquema para la database http://pastebin.com/Yigjt77f . Tengo direcciones en forma de nombre de la ciudad, nombre de la calle y número de calle. Lo más importante para mí es esta tabla:

CREATE TABLE node_tags ( node_id BIGINT NOT NULL, k text NOT NULL, v text NOT NULL ); 

La columna k está en forma de tags, una que me interesa son: addr:housenumber , addr:street , addr:city yv es el valor correspondiente. Primero estoy buscando si el nombre de la ciudad coincide con uno en la database, que en el set de resultados estoy buscando la calle y el número de casa. El problema es que no sé cómo hacer una consulta SQL que obtenga este resultado al preguntar solo una vez. Puedo preguntar primero solo por el nombre de la ciudad, get todos los node_id que coincidan con mi ciudad y savelos en el progtwig java, que hacer consultas preguntando por cada encontrado (coincidencia con mi ciudad) id_number (list de mi progtwig java) para la calle, y así sucesivamente . De esta manera es muy lento, porque al solicitar información más detallada (ciudad que calle), tengo que hacer más y más consultas y además tengo que verificar muchas direcciones. Una vez que tengo matching node_id, puedo encontrar coorderadas fácilmente, así que eso no es un problema.

Ejemplo de esta tabla:

  node_id | k | v <br> 123 | addr:housenumber | 50 123 | addr:street | Kingsway 123 | addr:city | London 123 | (some other stuff) | ..... 100 | addr:housenumber | 121 100 | addr:street | Edmund St 100 | addr:city | London 

Espero haber explicado claramente cuál es mi problema.

Esto no es tan fácil como podrías pensar Las direcciones en OSM son jerárquicamente, como en el mundo real. No todos los elementos en OSM tienen una dirección completa adjunta. Algunos solo tienen addr:housenumber y simplemente pertenecen a la calle más cercana. Algunos tienen addr:housenumber y addr:street pero no addr:city porque simplemente pertenecen a la ciudad más cercana. O están encerrados por una relación de límite que especifica la ciudad correspondiente. Y en lugar de addr:housenumber veces también hay solo interpolaciones de direcciones descritas por el addr:interpolation key de addr:interpolation . Consulte la página wiki de la tecla addr para get más información.

La página de Karlsruhe Schema en el wiki de OSM explica mucho acerca de las direcciones en OSM. También menciona relaciones de Street asociadas que a veces se usan para agrupar numbers de casas y sus calles correspondientes.

Como puede ver, una sola consulta en la database probablemente no sea suficiente. Si necesita inspiración, puede echar un vistazo al motor de búsqueda de direcciones de OSM, Nominatim . Pero tenga en count que Nominatim usa un esquema de database diferente al habitual para optimizar las consultas de direcciones. También puede echar un vistazo a una de las muchas aplicaciones de routing que tienen que hacer todas las búsquedas de direcciones.

    Intereting Posts