2009-07-17 24 views
23

¿Hay alguna forma de capturar la imagen de un mapa de Google? No puedo usar el mapa estático porque tengo mis propias polilíneas en el mapa y las quiero en la "captura de pantalla".imagen de Google Maps?

Básicamente quiero que un usuario navegue por el mapa, agregue algunas polilíneas, y cuando hace clic en Guardar estoy guardando las líneas, las coordenadas, el zoom, pero también me gustaría tener una imagen para presentar como una miniatura en las listas .

Tks por adelantado.

+4

Acabo de descubrir que el mapa estático también puede dibujar líneas. Los puntos se envían a través de la URL. P.ej. ? http: //maps.google.com/staticmap centro = 52.09259895866942,4.310945570468903 y zoom = 17 & size = 300x200 y MapType = satélite & key = 12345 y formato jpg y = path = RGBA: 0xff0000ff, peso: 5 | 52.09254128161833,4.309733211994171 | 52.092371545864,4.309856593608856 | 52.092503379515605,4.31052178144455 | 52.092661579383304,4.310438632965088 Esto todavía no es una solución porque si tengo 50 puntos para dibujar en líneas obtendré una gran URL que no será aceptada. ¿Alguna otra idea? – Dante

+0

50 puntos en un mapa estático no son muchos. Tienes 8K para jugar en esa URL, ¡así que vete loco! –

+0

aquí está el [snashotcontrol 2.0] (http://code.google.com/p/snapshotcontrol/) – Timeless

Respuesta

17

Masashi Katsumata ha llegado con un Snapshot Control que toma una instantánea de una cuenta de Google Maps con un camino en él y crea una imagen de ella.

+1

Creo que esta es la solución "oficial" para el problema. – Kensai

+0

Aunque le permite exportar polígonos fácilmente, sigue usando api de mapas estáticos. Si quiere el mapa como lo dibujó, guardar el lienzo también es un método válido (ver mi respuesta) – Arkiliknam

2

Puede usar ThinkGeo Map Suite. Apoyan representar imágenes de los servicios de Google, Yahoo o MS Mapa, mientras que usted puede sacar sus líneas de polietileno, etc ... en ese mapa

Trabajando con su Suite de Mapa V3 es un pedazo de pastel

+1

Voy a verlo. Tks por la propina – Dante

0

No se puede hágalo con la API de mapas, como se mencionó anteriormente, pero Yahoo ofrece una y es bastante fácil de usar.

Yahoo: Map Image API

+0

servicio eliminado 13 de septiembre de 2011 –

8

Uso de Google Maps contenido fuera del servicio es una violación de los Términos de la API de Google Maps de uso, por lo que aunque existen técnicas para la creación de las instantáneas, Google no lo hace darte permiso para hacerlo.

Para lograr legalmente su funcionalidad deseada, o bien necesita utilizar mapas estáticos (posiblemente con contenido reducido, especialmente si el usuario está usando MSIE donde la longitud máxima de la URL es bastante pequeña) o pequeños Google Maps reales.

Parece que todavía no tengo el privilegio de agregar o editar comentarios a la pregunta, así que mencionaré aquí que el límite de URL en al menos algunas versiones compatibles de Mapas de MSIE es de 2083 caracteres, no de 8k como está en la mayoría de los otros navegadores.

+0

Tks para la alerta;) – Dante

+0

No es realmente un problema, si el usuario está usando un mapa de Google real para generar la captura de pantalla en primer lugar. – NickG

+0

Recibirá un error 400 de los servidores de Google si la URL excede la restricción de tamaño de URL de 2048 caracteres. No importa qué navegador usas. – Codezilla

3

Si desea guardar más de API de Google Maps estática permite (como superposiciones personalizadas dibujados en demasiado complejo/grande para pasar a través de la cadena de consulta), puede exportar el contenedor mapa a un lienzo utilizando algo así como html2Canvas (http://html2canvas.hertzen.com/), luego conviértalo en una URL de datos y hazlo como quieras.

function saveMapToDataUrl() { 

    var element = $("#mapDiv"); 

    html2canvas(element, { 
     useCORS: true, 
     onrendered: function(canvas) { 
      var dataUrl= canvas.toDataURL("image/png"); 

      // DO SOMETHING WITH THE DATAURL 
      // Eg. write it to the page 
      document.write('<img src="' + dataUrl + '"/>'); 
     } 
    }); 
} 

Creo que es necesario establecer la opción useCORS a cierto con el fin de permitir que la función para descargar imágenes de Google.

La desventaja de este enfoque es que podría dejarle cerca de un megabyte de datos en su página.

He intentado utilizar este enfoque para EXPORTAR un mapa a una imagen para descargar, pero me he encontrado con problemas para obtener esta imagen a la persona en una casa señorial. Podría usar un hipervínculo que tenga su atributo href establecido en el dataUrl que creó, pero el nombre del archivo no se puede establecer a menos que use atributos HTML como download = "filename.png", lo cual ha sido problemático en diferentes navegadores para mí. Otro enfoque es publicar el dataUrl en el servidor para que el servidor lo distribuya como lo necesita, pero cargar una imagen grande solo para descargarlo nuevamente parece una forma extraña de manejar esto.

+0

Gracias por la opción useCORS, estaba usando la misma lib de html2canvas, pero la imagen del mapa no venía correctamente, con la opción useCORS está viniendo como estaba previsto – shivgre