4 votos

¿Encontrar todos los nombres de calles o direcciones dentro del polígono?

Tengo una lista geojson de coordenadas lat/long que conforman un polígono personalizado de una sección de mi condado. Lo ideal sería poder encontrar todas las direcciones que están dentro de los límites del polígono.

El departamento de SIG de mi condado proporciona gratuitamente una lista geojson de todas las coordenadas de los polígonos que componen cada uno de los edificios del condado.

¿Hay alguna manera de utilizar estos dos archivos juntos para determinar todas las direcciones dentro del polígono personalizado?

Si esto no es realmente posible, otra posibilidad es enumerar todos los nombres de las calles dentro del polígono.

El objetivo final es proporcionar una lista de todos los nombres, números de teléfono y direcciones del polígono, todo ello realizado de forma programada.

1voto

nanonerd Puntos 101

Podría utilizar una base de datos espacial (como PostGIS). En primer lugar, pones todas tus direcciones en una tabla "direcciones" con una columna "Punto" de tipo Punto y una columna "Dirección".

CREATE TABLE addresses (Point Point, Address Varchar(50));

A continuación, se coloca el polígono en otra tabla, llamémosla "poly". Puede tener una columna "Polygon" de tipo Polygon y otra columna "PolygonId".

CREATE TABLE poly (Polygon Polygon, PolygonId numeric);

Digamos que usted insertó su polígono con el PolygonId=1 .

Entonces puede utilizar la siguiente solicitud:

SELECT ad.Address
FROM ad addresses, pol poly
WHERE contains(pol.Polygon, ad.Point) = 1 AND
pol.PolygonId=1;

No cubrí la inserción de los datos en la base de datos, yo lo haría con un script (uso Node JS) pero puede haber otras formas. Si quieres hacer todo eso programáticamente, puedes implementar fácilmente un script que dispare la petición SQL. Yo usaría NodeJS con el módulo pg para comunicarme con una base de datos PostgreSQL + PostGIS pero hay otros stacks ;-)

Edición: la declaración "Contiene" no es específica del proveedor, para postgis, debe utilizar ST_Contains.

0 votos

Esta es una solución fantástica, sin embargo... no tengo las direcciones. Sólo tengo las coordenadas de los polígonos donde están las direcciones. Supongo que podría hacer algún tipo de geocodificación inversa por lotes para todas las direcciones, pero sería una molestia y llevaría mucho tiempo.

0 votos

Ooh difícil. ¿Tal vez podrías extraer un par de longitudes y latitudes de cada edificio que recibas en la solicitud y utilizar la geocodificación inversa de la API de Google Maps? developers.google.com/maps/documentation/geocoding

0 votos

Sí, eso fue lo primero que pensé. Trabajaré en esa idea e informaré cuando tenga algo.

0voto

Felix the Wary Puntos 81

Si ha importado el archivo osm en una base de datos, entonces puede utilizar esta consulta:

SELECT distinct polygon.name,line.name 
FROM planet_osm_line AS line CROSS JOIN planet_osm_polygon AS polygon 
WHERE polygon.admin_level = '8' 
AND ST_Contains(polygon.way, line.way) 
AND line.highway in ('primary', 'secondary', 'tertiary', 'road', 'residential','motorway', 'trunk', 'unclassified') 
AND polygon.name like 'K%nigstein'
ORDER BY line.name

1 votos

Por favor, esfuérzate en escribir correctamente, realmente no es tan difícil escribir, ni yo tampoco.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X