2010-10-26 15 views
6

Al momento sto codificando un'applicazione Web che importa i dati delle immagini da Google Maps tramite l'API Static - http://code.google.com/apis/maps/documentation/staticmaps/ - in un canvas HTML5.Cosa significa e come aiuta?

Purtroppo, ho riscontrato il problema di non essere in grado di manipolare i dati dei pixel da Google Maps a causa di restrizioni incrociate del dominio.

Tuttavia, ho letto questo post del blog dal Sig Doob, una delle persone che stanno dietro il video Wilderness Downtown (http://thewildernessdowntown.com), che impiega tela con Google Maps - http://mrdoob.com/blog/post/705 - e si legge:

" Un'altra sfida è stata che con voi non avete accesso ai dati dei pixel delle immagini caricate da un altro dominio ... Tuttavia, anche se l'accesso ai pixel è vietato, context.drawImage() è consentito per copiare le aree da immagini ospitate su altri domini. "

mi sento questa potrebbe essere la soluzione al mio problema, come più avanti nel post mostra la manipolazione dei pixel dell'immagine, ma non riesce quasi mai che cosa esattamente intende per 'context.drawImage() è consentito per copiare le aree da immagini ospitate su altri domini 'e sarebbe davvero utile se qualcuno potesse chiarirle per me.

Grazie,

DLiKS

Edit: Ecco il codice che sto usando per disegnare l'immagine di Google Maps alla tela:

var ctx = document.getElementById('canvas').getContext('2d'); 
var img = new Image(); 
img.src = 'LINK TO GOOGLE MAPS IMAGE'; 
img.onload = function(){ 
ctx.drawImage(img,0,0); 
} 

L'immagine mostra OK, ma quando provo per usare getImageData per manipolare questa immagine incorporata sulla tela, ottengo un errore di sicurezza

+0

domanda interessante, +1. Come nota a margine, tieni presente che le mappe di Google sono materiale protetto da copyright, quindi esistono alcune limitazioni su ciò che puoi fare legalmente con loro. –

+0

'Sfortunatamente, ho riscontrato il problema di non essere in grado di manipolare i dati dei pixel da Google Maps a causa di restrizioni incrociate dei domini. Che codice usi? – Harmen

+0

Ho aggiunto il codice come modifica alla domanda. – DLiKS

risposta

3

Dopo aver letto l'articolo penso che male interpretato quello che Mr.doob detto:

"[Jamie] quindi iniziato la ricerca di altri modi di disegno le mappe di dati in un modo per creare lo stesso effetto. "

Fa nessuna manipolazione pixel, si usa per context.drawImage

"... ritaglio colonne dell'immagine originale e posizionamento una dopo l'altra orizzontale."

+3

Com'è possibile ... Davvero! Stavo SOLO per dare ESATTAMENTE la stessa risposta, ma mi hai battuto in 13 secondi incredibili! – Harmen

+1

Perché io sono l'Uno. :) – galambalazs

+0

Ah, capisco! Grazie per la risposta! – DLiKS

-1

context.drawImage() credo sia un modo di manipolare un HTML 5 Ca nvas. Dai un'occhiata a queste pagine web.

http://dev.opera.com/articles/view/html-5-canvas-the-basics/
http://diveintohtml5.ep.io/canvas.html

+0

heh. Ero a metà della pubblicazione di una risposta quasi identica. Nessun punto ora, quindi aggiungerò il mio peso al tuo (non posso fare +1 perché ho esaurito i voti per il giorno) – Spudley

+0

context.drawImage() è solo il modo standard per posizionare un'immagine sulla tela . Tuttavia, il solo utilizzo come negli esempi collegati non consente la manipolazione di immagini basate su pixel di immagini remote (che è ciò che sto cercando di ottenere). Quello che sto cercando di capire è come Mr. Doob è riuscito a aggirare questa restrizione attraverso una manipolazione intelligente di questa funzione. Grazie per la risposta però! – DLiKS

+0

In effetti, questa non è una risposta alla domanda. Ho provato a usare 'drawImage' ma dà un'eccezione:' SECURITY_ERR: DOM Exception 18' – Harmen

2

Assegna src di immagine utilizzando una pagina aspx, e che la pagina aspx risponderà con il testo all'immagine.

Ad esempio:

image.src="CreateImage.aspx"; 
image.onload = function() { 
    ctx.drawImage(image,5,5,width,height); 
}