2014-06-25 14 views
6

Kiedyś coś takiego:Usuń wszystkie funkcje z warstwy danych

var map; 
function initialize() { 
    map = new google.maps.Map(document.getElementById('map-canvas'), { 
    zoom: 4, 
    center: {lat: -28, lng: 137.883} 
    }); 
    map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json'); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

załadować shapefile GeoJSON do warstwy map.data mojej mapie. W pliku kształtu znajduje się kilka klas "cech" definiujących wieloboki do narysowania na mapie. Do tego czasu nie mam żadnych problemów.

Później jednak chcę załadować kolejny plik geojsona nad drugim (zastępując narysowane "funkcje" na mapie). Kiedy po prostu ładujesz inny plik nad drugim, po prostu przerysowuje się go nad drugim. Jak na Ziemi wyczyścisz warstwę map.data wszystkich funkcji przed załadowaniem w nowym pliku kształtu geojsona?

Próbowałem używać z pętli map.data.remove(feature) , ale nie mogę uzyskać wszystkich funkcji z warstwy map.data.

+0

Może [** to **] (http://stackoverflow.com/questions/2948097/google-maps-api-v3-how-to-clear -przeczyty # answer-7882263) przyda Ci się? – blex

+0

Niestety, znaczniki znajdują się w innej warstwie niż warstwa map.data. Ale już znalazłem rozwiązanie dzięki. Plus ostatecznym rozwiązaniem jest dla google maps api v2 – Aernor

+0

OK, dobrze dla ciebie;) – blex

Odpowiedz

16

To będzie iteracyjne nad wszystkie funkcje i usunąć je z map.data.

map.data.forEach(function(feature) { 
    // If you want, check here for some constraints. 
    map.data.remove(feature); 
}); 

Edit 1: Wyjaśnienie callbacks Mapa użyć funkcji forEach danych, więc trzeba dać funkcji zwrotnej jako parametru:

var callback = function(){ alert("Hi, I am a callback"); }; 
map.data.forEach(callback); 

Teraz dla każdego elementu danych pokaże alert . Możliwe jest również wywoływanie zwrotne z parametrem, jak w powyższym kodzie.

var callback = function(feature) { 
     // If you want, check here for some constraints. 
     map.data.remove(feature); 
    }; 
    map.data.forEach(callback); 

Dalsze przykłady i wyjaśnienie: http://recurial.com/programming/understanding-callback-functions-in-javascript/

+1

Próbowałem 'map.data.forEach (map.data.remove)' ale wystąpił błąd. Czy nie powinien zrobić tego samego, co napisałeś? – Jayen

+0

Wypróbowałeś mój kod lub tylko 'map.data.forEach (map.data.remove)'? – Gidy

+0

Próbowałem obu. Twoja droga działa dobrze. Mój nie. Sądzę, że nie rozumiem javascriptu na tyle dobrze, aby tak nazywać skróty. – Jayen

1

Wydaje się, że map.data jest zbiorem klas "cech".

Więc można użyć map.data iterację i usunąć każdą funkcję w kolekcji