5 votos

Google maps : ¿Es posible dibujar un polígono y recuperar todos los nombres de las calles dentro de él?

Utilizando la API v3 de Google Maps, ¿es posible dibujar un polígono en un mapa de Google y obtener una lista de todos los nombres de las calles que caen dentro de ese polígono?

enter image description here

2 votos

¿Has probado algo? No veo un método explícito para eso, pero se me ocurren algunos hacks terribles. Calcula una cuadrícula fina (2m x 2m) de puntos sobre el polígono, invierte el código geográfico y obtén el nombre de la calle a partir de la respuesta. O utilizar OpenStreetMap en su lugar, y la API Overpass que (creo) puede hacer esto.

0 votos

Usted puede enviar el lat,lng de su polígono como direcciones como maps.googleapis.com/maps/api/directions/

5voto

Hypermattt Puntos 121

Así que he utilizado la solución (OpenStreetMap) de @Spacedman:

  1. Descargue el .pbf de su país http://download.geofabrik.de
  2. Descargue el archivo de polígonos del municipio deseado desde https://github.com/JamesChevalier/cities o cree su archivo de polígonos (.poly) aquí : http://share.mapbbcode.org/
  3. Descargue la versión actualizada de Osmosis https://wiki.openstreetmap.org/wiki/Osmosis#Latest_stable_version
  4. Haz esto:

    osmosis --read-pbf-fast you_file_country-latest.osm.pbf file="your_file_country-latest.osm.pbf" --bounding-polygon file="your_municipality_polygon.poly" --write-xml file="your_file_out.osm"

enter image description here 5. En el archivo .osm, se obtienen todos los nombres de las calles, para extraer los nombres utilice la opción (regex) del notepad++

enter image description here

Es complejo pero funciona, pero todavía tengo que encontrar la manera de hacerlo directamente desde la API de Google

2 votos

Creo que deberías echar un vistazo a Overpass API, la siguiente consulta te devolverá todas las autopistas=* con un nombre en tu bounding box: overpass-turbo.eu/s/AD5 ... También sería posible la selección de polígonos.

0 votos

Consulte mi responder si te ayuda.

1voto

fishfinboy1 Puntos 16

Sandra's solución me puso en la dirección correcta y me ayudó mucho. Sin embargo, estoy convencido de que la forma en que " analiza " el archivo de salida no es correcto y la expresión regular no cubre todas las calles - al menos en España ya que una calle puede empezar por Calle y este tipo de calles no tienen la addr:street clave.

Esta es una solución de Linux que se basa en la respuesta de Sandra:

bin/osmosis -q ... --bp file="My.poly" \
            --tf accept-nodes way=* --wk keyList=highway --wx file=- \
    | sed -e 's/[ ]*<nd [^>]*>//g' \
    | sed -r '/^\s*$/d' \
    | perl -lne 'print $1 if /k="name" v="(.+)"/' \
    | sort \
    | uniq

Lo que sucede:

  1. Obtenga sólo el way nodos que contienen el highway clave.
  2. Retire el <nd..> elementos. Aquí me refiero a este pregunta con respecto a la eliminación de la misma.
  3. Elimine las líneas vacías.
  4. Ejecutar perl para obtener el nombre de la calle del elemento.
  5. Ordena el resultado.
  6. Eliminar los duplicados que puede haber, cuando por ejemplo la calle es de un solo sentido y tiene varias entradas.

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