Ho molti grandi insiemi di dati KML, che vengono serviti utilizzando una gerarchia di collegamenti di rete basati sulla regione; come descritto nella KML reference:Collegamenti di rete basati sulla regione nell'API di Google Earth
Utilizzando Regioni in collaborazione con networklinks, è possibile creare una gerarchia di puntatori, ognuno dei quali fa riferimento a uno specifico sub-regione. Lo
<viewRefreshMode>
, come mostrato nel seguente file KML, ha un'opzione onRegion, che specifica di caricare i dati Region solo quando Region è attivo. Se fornisci regioni nidificate con più livelli di dettaglio, quantità maggiori di dati vengono caricate solo quando il punto di vista dell'utente attiva il carico successivo.
Funziona bene quando caricato in Google Earth.
Ora desidero caricarli in un'applicazione utilizzando Google Earth plug-in. E ho bisogno di accedere ai contenuti caricati tramite l'API di Google Earth; (Ad esempio, allegare eventi di clic, alterare stili) per integrare il contenuto nell'applicazione.
Il problema è che non ho trovato alcun riferimento a un evento 'on-load' per i collegamenti di rete. Nella mia mente, il modo in cui funzionerebbe è:
- Caricare il collegamento di rete di livello superiore tramite l'API, allegando una funzione di richiamata che verrà richiamata quando viene caricato il collegamento di rete.
- Nella funzione di richiamata, analizzare il KML restituito dal collegamento di rete. Per i livelli intermedi nella gerarchia della regione, questo KML conterrà solo i collegamenti di rete al livello di regione successivo. Caricali nel plug-in tramite l'API, specificando nuovamente la stessa funzione di richiamata, che verrà richiamata quando questi vengono caricati (ad esempio quando la loro area diventa visibile).
- Alla fine, il file KML restituito conterrà il "contenuto" effettivo. In questa fase cariciamo il contenuto effettivo (cioè i segnaposto) nel plug-in, dopo aver apportato le modifiche desiderate (ad esempio allegando i listener di eventi, gli stili di impostazione e così via).
Sto pensando che il javascript sarebbe simile al seguente.
Nota: questo è solo un abbozzo per aiutare a capire la mia domanda. I am NON chiedendo perché questo codice non funziona.
//create network link
var networkLink = ge.createNetworkLink("");
networkLink.setName("Regionated hierarchy root");
// create a Link object
//the network-links contained in the kml that will be returned in this file
//are region-based; they will only be loaded when the user zooms into the relevant
//region.
var link = ge.createLink("");
link.setHref("http://foo.com/regionatedRoot.kml");
// attach the Link to the NetworkLink
networkLink.setLink(link);
//specify the callback function to be invoked when the network link is loaded
//this is is the part that doesn't actually exist; pure fiction...
networkLink.onLoad = networkLinkLoaded;
// add the NetworkLink feature to Earth
ge.getFeatures().appendChild(networkLink);
// function which will be invoked when a network-link is loaded
// i.e. when its region becomes active
function networkLinkLoaded(kml) {
//parse the kml returned for child network links,
//this will create the network link KmlObject, with a
//region specified on it.
for (childNetworkLink in parseNetworkLinks(kml)) {
//and append them, again hooking up the call-back
childNetworkLink.onLoad = networkLinkLoaded;
ge.getFeatures().appendChild(childNetworkLink);
}
//if the user has zoomed in far enough, then the kml returned will
//contain the actual content (i.e. placemarks).
//parse the kml returned for content (in this case placemarks)
for (placemark in parsePlacemarks(kml)) {
//here we would attach event-listeners to the placemark
ge.getFeatures().appendChild(placemark);
}
}
È possibile?
Ho preso una svolta sbagliata nel mio modo di pensare? Credo di aver seguito le pratiche consigliate per la gestione di set di dati KML di grandi dimensioni, ma non sono sicuro di come utilizzarle tramite l'API.
Addendum:
Come esempio del tipo di problema che sto cercando di risolvere: Immaginate si sta costruendo un'applicazione web utilizzando il plug-in di Google Earth, e si desidera visualizzare un segnaposto per ogni set di semafori nel mondo. I segnaposto devono essere visualizzati solo con un livello di dettaglio appropriato (ad esempio quando la telecamera si trova a un'altitudine di 5 km). Quando un utente fa clic su un segnaposto, vogliamo che l'app Web carichi statistiche per quel set di semafori e li visualizzi in una barra laterale.
Come progetteresti questo?
Hai ragione. Impostando gestori di eventi di livello 'globale', posso quindi filtrare l'ID di destinazione per determinare come gestire l'evento. Grazie! –
Nessun problema, felice di aver aiutato. – Fraser