6 votos

¿Cómo se muestran los polígonos geojson en un mapa?

Aquí hay una pregunta muy básica para todos ustedes.

Tengo 17.000 polígonos en una base de datos GeoDjango. Cómo puedo crear un mapa web deslizante que pueda mostrar estos polígonos?

En otras palabras, lo hago yo:

  • cargar un GMap, obtener los límites, cada vez que el mapa se mueve, hacer una llamada Ajax a la db de Django, cargar los polígonos...
  • hacer mis propias fichas de mapa por adelantado (si es así, ¿cómo?)
  • ¿algo más?

Me gustaría que los usuarios pudieran ver los polígonos en el mapa. También me gustaría que los usuarios pudieran buscar un punto, utilizando el geocodificador de GMaps o algo similar, y cargar los polígonos dentro de los límites del mapa.

¿Qué tecnología del lado del cliente debería utilizar?

Gracias.

5voto

dariapra Puntos 1976

En el lado del cliente recomiendo OpenLayers. Se trata de una librería del lado del cliente, puramente JavaScript, que se utiliza para mostrar mapas interactivos en los navegadores web. En la página web encontrarás muchos ejemplos con su código fuente.

OpenLayers es capaz de dibujar polígonos, y puede consumir datos en formato GeoJSON (entre otros), como se muestra en el "Ejemplo GeoJSON" de OpenLayers. OpenLayers también puede solicitar características en la ventana gráfica actual utilizando la estrategia BBOX, como se muestra en " Ejemplo de estrategia de BBOX ".

Al utilizar estas capacidades de OpenLayers (capas vectoriales + GeoJSON + estrategia BBOX), habría que configurar GeoDjango para responder a las peticiones de OpenLayers vía HTTP en formato GeoJSON.

4voto

Adam Ernst Puntos 6939

Con 17.000 polígonos vas a querer utilizar un renderizador del lado del servidor, ya que el navegador se bloqueará o morirá lentamente, sea cual sea la tecnología de mapeo que elijas (Google, OpenLayers, lo que sea).

Yo recomendaría usar un servidor WMS para renderizar los polígonos y OpenLayers para mostrarlos. Hay varios Tile Caches disponibles para acelerar aún más las cosas si es necesario.

No conozco ningún servidor WMS que pueda leer desde una base de datos GeoDjango, pero espero que alguien más pueda señalar uno, o podrías importar tus datos en PostGIS y luego usar MapServer o GeoServer para producir tus mapas. GeoServer puede incluso dar salida a las capas WMS como KML que pueden ser mostradas en Google Maps directamente si realmente lo necesitas.

3voto

¿Has pensado en utilizar la nueva API de Google Maps v3? KmlLayer ? Básicamente, lo que sucede aquí es que Google actúa como un proxy para agarrar cualquier capa KML disponible públicamente, y la divide automáticamente en mosaicos. Esta capa en mosaico también puede responder a los eventos de clic de forma muy similar a como lo haría una capa vectorial.

3voto

Slayd Puntos 111

No estoy seguro de cómo es el soporte de los navegadores (ya que utiliza SVG, creo que los usuarios de IE tendrán que esperar a IE9 a menos que haya un fallback), pero http://polymaps.org/ es (a) muy bonito, y (b) soporta capas GeoJSON desde el principio.

En particular, creo que puedes dividir tu GeoJSON en pequeños mosaicos y soportará la carga incremental en mosaico. Como tienes 17.000 polígonos, eso será importante.

Su documentación no parece completa, pero creo que se divide en archivos geoJSON más pequeños con nombres consistentes y con el azulejo X, Y y el zoom como parte de su ruta.

0voto

ChrisThomas123 Puntos 966

Acabo de empezar a usar Mapstraction . Es una librería javascript que proporciona una capa de abstracción entre tu código y las APIs de Google, Bing, Openlayers, Multimap y otras. De este modo, puedes codificar una vez y luego cambiar los mapas base sobre la marcha. La documentación es un poco escasa y todavía se está desarrollando activamente, pero no he tenido ningún problema con ella y parece funcionar bien.

No soporta GeoJSON por defecto, pero hay un parche por ahí.

En respuesta a tu pregunta sobre lo que ocurre si alejas el zoom al máximo, deberías poder limitar la cantidad de registros que devuelve el ajax poniendo un límite en el comando SQL. Sé que Mapstraction proporciona alguna funcionalidad para simplificar las formas y reducir los conjuntos de puntos, pero probablemente querrás hacerlo en el lado del servidor. No he tocado GeoDjango, así que te lo dejo a ti.

Editar: Demostración de Mapstraction

Edición 2 2012-03-20: Desde entonces he empezado a usar Leaflet para todos mis mapas web. Es mucho más suave en apariencia que OpenLayers e incluso los mapas de Google. También es muy ligero y fácil de trabajar. Aquí tienes un tutorial sobre cómo utilizar geoJSON con Leaflet.

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