2014-04-11 24 views
7

Ho alcuni GeoJSON restituiti da una chiamata a un database PostGIS. Mi piacerebbe essere in grado di aggiungere un marcatore per ogni funzione, ed essere in grado di attivare diversi tipi di marcatore/funzione. Attualmente sto usando JavaScript per generare un marcatore per ogni funzione, aggiungendoli agli array in base al tipo, e quindi passando attraverso l'impostazione degli array mostra/nascondi come appropriato per attivare i 'livelli'.Google maps GeoJSON- attiva/disattiva livelli marker?

Questo funziona correttamente, ma mi chiedo se la nuova funzionalità di GeoJSON offre un modo migliore per farlo. Per quanto posso vedere, tutte le funzionalità vengono aggiunte allo stesso datalayer e le serie di attivazioni potrebbero coinvolgere gli stili di impostazione o semplicemente la sostituzione con un nuovo GeoJSON pre-filtrato.

Quindi la domanda è che è possibile avere più di un livello dati e aggiungerli/rimuoverli facilmente dalla mappa o è meglio guardare qualcosa come OpenLayers?

MODIFICA: altre ricerche mostrano che è abbastanza semplice.

Per ogni tipo di funzionalità nella raccolta di funzionalità che si desidera attivare, creare un nuovo oggetto dati. Aggiungi tutte le funzionalità rilevanti a quell'oggetto dati.

var datalayer = new google.maps.Data(); 
datalayer.addGeoJson(feature); 
datalayer.setMap(mainmap); 

Quindi memorizzare ciascun oggetto dati/tipo di funzionalità come coppia chiave-valore. Sulla levetta, estrarre l'oggetto dati pertinenti e setMap come appropriato:

var datalayer= featuretypesobj["feature type to toggle"]; 
datalayer.setMap(mymap); //or 
datalayer.setMap(null); 

risposta

10

È inoltre possibile creare livelli separati

var layer_1 = new google.maps.Data(); 
var layer_2 = new google.maps.Data(); 

quindi popolare esso, ad esempio con i dati JSON

layer_1.loadGeoJson('/path/to/data.json'); 
layer_2.loadGeoJson('/path/to/data2.json'); 

poi aggiungere/rimuovere loro sulla mappa

layer_1.setMap(map); 
layer_2.setMap(map); 
layer_1.setMap(null); 
2

da aggiungere: var layer_1 = new google.maps.Data(); dovrebbe essere fatto all'interno della funzione di inizializzazione della mappa, come:

var map; 

    var data_layer_for_ramps; 



    function initialize() { 

      map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 12, 
       center: new google.maps.LatLng(-33.897907, 151.179138),//-33.8151,151.0032 
       mapTypeId: 'roadmap' 
      }); 

      data_layer_for_ramps = new google.maps.Data(); 
     }