2008-10-06 32 views
7

Estoy tratando de encontrar algo, preferiblemente F/OSS, que pueda generar una superposición de Google Maps desde KML y/o datos KMZ.Google Maps Overlays

Tenemos un sitio de eventos en el que estamos trabajando que necesita para acomodar ~ 16,000 marcadores de lugar el año pasado y es probable que tenga al menos otros tantos este año. El año pasado, la compañía que había hecho el sitio simplemente alimentó los datos KML directamente a la API de gMaps y le permitió colocar todos los marcadores del lado del cliente. Obviamente, eso se convirtió en una pesadilla de rendimiento y tendía a "congelar" los navegadores antiguos (o al menos aparecer congelados durante varios minutos a la vez).

Idealmente, esta secuencia de comandos del lado del servidor tomaría el KML, el centro de latitud/longitud del mapa y el nivel de zoom del mapa y fusionaría adecuadamente todos los marcadores de lugar visibles en una sola superposición de GIF o PNG.

Cualquier orientación o recomendación sobre esto sería muy apreciada.

ACTUALIZACIÓN 10/8/2008 - La mayor parte de la información que he encontrado aquí y en otros lugares parece indicar que la disminución del número de puntos en el mapa es el camino a seguir (es decir, utilizando un marcador de represente varios cuando se ve desde un nivel de altitud/zoom más alto). Si bien es probable que sea un buen enfoque en algunos casos, no funcionará aquí. Estamos buscando el impacto visual de un mapa de EE. UU. Con muchos miles de marcadores en él. Una opción que he explorado es un servicio llamado PushPin, que cuando se alimenta (presumiblemente) KML creará, en el lado del servidor, una superposición que tiene todos los puntos visibles (en función del centro lat/lon y nivel de zoom) representados en una sola imagen , entonces, en lugar de realizar varios miles de manipulaciones DOM por el lado del cliente, fusionamos todos esos marcadores en un único lado del servidor de imágenes y hacemos una única manipulación DOM en el extremo del cliente. El servicio PushPin es realmente ingenioso y definitivamente funcionaría si no fuera por los costos asociados. Realmente estamos buscando algo F/OSS que nosotros pudiéramos ejecutar en el servidor para generar esa superposición nosotros mismos.

Respuesta

0

Esta es una pregunta difícil. Puede usar custom tilesets with Google Maps, pero aún necesita alguna forma de generar los mosaicos (que no sea manualmente).

Me temo que eso es todo lo que tengo =/

+0

sí, eso es ciertamente mi idea al tener la superposición, pero lo que específicamente espero es algo del lado del servidor que genere la superposición basada en KML, centro lat/lon y nivel de zoom. – theraccoonbear

4

Es posible que desee ver en algo así como Geoserver o Mapserver. Son clones de mapas de Google y mucho más.

Puedes generar una superposición que te guste, y Geoserver (creo que el servidor de mapas también) puede darte KML, PDF, png y otros resultados para mezclar tus mapas, o podrías generar todo el mapa tú solo, pero eso lleva tiempo.

+0

Estos parecen interesantes, veré si funcionan para nuestros propósitos. – theraccoonbear

+1

Definitivamente estaremos buscando GeoServer y GeoWebCache. – Adrian

+4

Desafiante? "¡Solo trata de detenernos!" ;) – DanM

1

No sé cómo te va con tu proyecto, pero tal vez puedas echarle un vistazo al GeoDjango? Esta versión modificada de Django incluye todo tipo de herramientas para almacenar ubicaciones; convertir coordenadas y visualizar mapas, de la manera más fácil. Por supuesto, necesitas algo de experiencia en Python y un servidor para ejecutarlo, pero una vez que tienes el truco de Django funciona rápido y bien.

Si solo quiere una solución para su problema intente agrupar sus resultados con niveles de zoom más bajos, un buen ejemplo de esta implementación se puede encontrar en here.

+0

No sé si Django/Python sería un factor decisivo, pero nunca antes había trabajado con ninguna tecnología. El núcleo de este sitio se donará en Drupal, según lo solicite el cliente, de modo que un backend de PHP sería una idea. Voy a verificar esta opción sin embargo. – theraccoonbear

0

OpenLayers es una excelente aplicación de JavaScript para múltiples servicios de mapas o sus propios servidores de mapas. Acaba de lanzar la versión 2.7, que agrega algunas características y controles bastante sorprendentes.

2

No estoy seguro de por qué quieres ir a una superposición GIF/PNG, puedes hacerlo directamente en KML.Supongo que la mayor parte de su problema de rendimiento fue causado por puntos fuera de la vista actual del usuario, es decir, el usuario está mirando a Nueva York pero tiene puntos en Los Ángeles que están desperdiciando memoria porque no son visibles. Si realmente tiene 16,000 puntos que son visibles a la vez para un típico, entonces sí, tendrá que seguir una estrategia diferente.

Si lo anterior se aplica, el procedimiento sería el siguiente:

  1. determinar el grado centro & del mapa
  2. Teniendo en cuenta que usted debe ser capaz de calcular la latitud/longitud de la parte superior izquierda y esquina inferior derecha del mapa.
  3. Examine su base de datos de puntos y compruebe cada ubicación en las dos esquinas. La longitud debe ser mayor (¡con signo!) Que la longitud superior izquierda y menor que la longitud inferior derecha. Latitude debe ser menor que la latitud superior izquierda (¡firmado!) Y mayor que la latitud inferior derecha. Solo comparaciones simples, no se requieren cálculos extravagantes aquí.
  4. Muestra los puntos coincidentes para un KML temporal para el usuario.
  5. Puede alimentar KML directly into Google Maps y dejar que lo asigne, o puede usar el Javascript maps API para cargar los puntos a través de KML.

Puede que no resuelva su problema exacto aquí, pero para cuestiones relacionadas también puede consultar el Google Static Maps API. Esto le permite crear un archivo de imagen estática con marcadores de posición que se cargarán muy rápidamente, pero no tendrán la interactividad de un mapa de Google normal. Sin embargo, debido a la forma en que está diseñada la API, tampoco puede manejar cerca de 16,000 puntos, por lo que aún tendrá que filtrar a la vista.

+0

El plan es tener una vista de nivel nacional que muestre el conjunto completo de datos, así que sí, realmente necesitamos hacer que todos los puntos aparezcan simultáneamente. Permitiremos el acercamiento y podremos trabajar con radios de visualización de nivel de zoom para utilizar conjuntos de datos KML más pequeños a medida que el usuario profundice, pero debemos poder mostrarlos todos. – theraccoonbear

+0

Adoptaría una estrategia para encontrar grupos de eventos que puede reducir a un marcador en el mapa nacional que luego se hiperconecta a una vista de esa ciudad. El método sería similar, pero necesitaría usar una versión de la fórmula de Haversine para encontrar puntos que estuvieran dentro de "x" millas. –