2009-07-17 6 views
23

C'è un modo per catturare l'immagine di una mappa di Google? Non posso usare la mappa statica perché ho le mie polilinee sulla mappa e le voglio nello "screenshot".Immagine di Google Maps?

Fondamentalmente voglio che un utente navighi sulla mappa, aggiunga alcune polilinee e quando fa clic su Salva sto salvando le linee, le coordinate, lo zoom, ma vorrei anche avere un'immagine da presentare come miniatura in elenchi .

Tks in anticipo.

+4

Ho appena scoperto che la mappa statica può anche disegnare linee. I punti sono inviati attraverso l'URL. Per esempio. ? http: //maps.google.com/staticmap centro = 52.09259895866942,4.310945570468903 & zoom = 17 & size = 300x200 & maptype = satellite & key = 12345 & format = jpg & path = RGBA: 0xff0000ff, peso: 5 | 52.09254128161833,4.309733211994171 | 52.092371545864,4.309856593608856 | 52.092503379515605,4.31052178144455 | 52.092661579383304,4.310438632965088 Questo non è ancora una soluzione perché se ho 50 punti da tracciare in linee otterrò un URL enorme che non sarà accettato. Altre idee? – Dante

+0

50 punti su una mappa statica non sono molti. Hai 8K con cui giocare su quell'URL, quindi impazzisci! –

+0

ecco [snashotcontrol 2.0] (http://code.google.com/p/snapshotcontrol/) – Timeless

risposta

17

Masashi Katsumata ha messo a punto un Snapshot Control che prende un'istantanea di un Google Maps con un percorso su di esso e crea un'immagine da esso.

+1

Penso che questa sia la soluzione "ufficiale" al problema. – Kensai

+0

Sebbene gli consenta di esportare facilmente i poligoni, utilizza ancora la mappa statica API. Se vuoi la mappa mentre la disegni, salvando la tela è anche un metodo valido (vedi la mia risposta) – Arkiliknam

2

È possibile utilizzare ThinkGeo Map Suite. Essi supportano il rendering di immagini da servizi Google, Yahoo o MS Mappa, mentre si può disegnare le linee poli, ecc su quella mappa ...

Lavorare con loro Map Suite V3 è un pezzo di torta

+1

Guardandolo. Tks per la punta. Servizio – Dante

0

Impossibile fallo con l'API delle mappe, come menzionato sopra, ma Yahoo ne offre uno ed è piuttosto semplice da usare.

Yahoo: Map Image API

+0

rimosso 13 settembre 2011 –

8

Utilizzando Google Maps contenuto al di fuori del servizio è una violazione delle Google Maps API Condizioni di utilizzo, quindi anche se esistono tecniche per creare le istantanee, Google non lo fa darti il ​​permesso di farlo.

Per raggiungere legalmente le funzionalità previste, è necessario utilizzare le mappe statiche (possibilmente con contenuto ridotto, in particolare se l'utente utilizza MSIE dove la lunghezza massima dell'URL è piuttosto piccola) o le piccole e reali Google Maps.

Sembra che non abbia ancora il privilegio di aggiungere o modificare commenti alla domanda, quindi menzionerò qui che il limite dell'URL in almeno alcune versioni compatibili con Mappe di MSIE è 2083 caratteri, non 8k come è nella maggior parte degli altri browser.

+0

Tks per l'avviso;) – Dante

+0

Non è davvero un problema se l'utente utilizza una vera mappa di Google per generare lo screenshot innanzitutto. – NickG

+0

Riceverai un errore 400 dai server di Google se l'URL supera la limitazione della dimensione dell'URL di 2048 caratteri. Non importa quale browser utilizzi. – Codezilla

3

Se si desidera salvare più di google maps API statico permette (come ad esempio le sovrapposizioni personalizzati disegnati su di esso troppo complessa/grandi per passare attraverso la querystring), si potrebbe esportare il contenitore della mappa per una tela utilizzando qualcosa di simile html2Canvas (http://html2canvas.hertzen.com/), quindi convertirlo in un URL di dati e utilizzarlo come si desidera.

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 + '"/>'); 
     } 
    }); 
} 

Credo che è necessario impostare l'opzione useCORS a true al fine di consentire la funzione di scaricare le immagini da Google.

Lo svantaggio di questo approccio è che potrebbe lasciarti con circa un megabyte di dati seduti sulla tua pagina.

Ho provato a utilizzare questo approccio per esportare una mappa in un'immagine da scaricare, ma ho incontrato dei problemi su come ottenere questa immagine alla persona in un bel maniero. Puoi usare un collegamento ipertestuale che ha il suo attributo href impostato sul dataUrl che hai creato, ma il nome del file non può essere impostato a meno che non usi attributi HTML come download = "nomefile.png", che per me è stato problematico su diversi browser. Un altro approccio è quello di inviare il dataUrl al server affinché il server risponda come necessario, ma caricare un'immagine di grandi dimensioni solo per scaricarlo di nuovo sembra un modo strano per gestirlo.

+0

Grazie per l'opzione useCORS, stavo usando la stessa lib html2canvas ma l'immagine della mappa non veniva correttamente, con l'opzione useCORS che sta arrivando come previsto – shivgre