2014-04-14 21 views
17

Tôi thấy Google Maps hỗ trợ geojson. Nhìn vào tài liệu ở đây: https://developers.google.com/maps/documentation/javascript/datalayer#load_geojsonLàm cách nào để xóa dữ liệu khỏi gmap?

Ví dụ cuối cùng với "Google", làm cách nào để tôi có thể nhấp vào nút để thêm lớp Geojson mới và nút khác để chuyển/xóa " Google "hoặc thậm chí một lá thư? Dường như với tôi rằng map.data dường như là một lớp duy nhất và không phải là nhiều lớp.

Trả lời

26

Bạn chính xác trong đó Lớp dữ liệu là một lớp duy nhất. Tuy nhiên, nếu bạn truy xuất GeoJSON theo cách thủ công và sử dụng chức năng addGeoJson thay vì loadGeoJson, bạn sẽ nhận được các tính năng bổ sung được trả lại. Bạn có thể xóa chúng sau này.

Vì vậy, thay vì

map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json'); 

Bạn có thể làm một cái gì đó như thế này (ví dụ này sử dụng jQuery để lấy dữ liệu và giả định có một nút với removeBtn ID):

// Load the GeoJSON manually (works cross-origin since google sets the required HTTP headers) 
$.getJSON('https://storage.googleapis.com/maps-devrel/google.json', function (data) { 
    var features = map.data.addGeoJson(data); 

    // Setup event handler to remove GeoJSON features 
    google.maps.event.addDomListener(document.getElementById('removeBtn'), 'click', function() { 
    for (var i = 0; i < features.length; i++) 
     map.data.remove(features[i]); 
    }); 
}); 

(See this JSbin for a working example you can play around with)

Trong các trường hợp phức tạp hơn, bạn có thể phải theo dõi nguồn dữ liệu nào người dùng đã tải và các tính năng đã tạo do đó, do đó bạn có thể xóa chúng khi được yêu cầu.

+0

Cảm ơn bạn. Điều này đã trả lời một câu hỏi khác, nhưng tương tự như tôi đã làm việc trong một vài giờ ngay bây giờ. – Giganticus

13

Trong khi map.data được thiết kế để thay thế cho các trường hợp chung của một nguồn dữ liệu duy nhất, bạn có thể có nhiều, và vẫn sử dụng addGeoJSon sử dụng một cái gì đó như:

// load data - do the same for data2, data3 or whatever 
data1 = new google.maps.Data(); 
data1.loadGeoJson(url1); 

// create some layer control logic for turning on data1 
data1.setMap(map) // or restyle or whatever 

// turn off data1 and turn on data2 
data1.setMap(null) // hides it 
data2.setMap(map) // displays data2 
+0

Giải pháp jlivni không hoạt động: phương thức addGeoJson dường như muốn có đối tượng Feature. > InvalidValueError: không phải là tính năng hoặc tính năng sưu tập –

+0

Cảm ơn bạn đã nắm bắt; Tôi có nghĩa là loadGeoJson (mà chấp nhận một url) không addGeoJson; sửa chữa trong câu trả lời của tôi. – jlivni

14

này đã làm việc cho tôi:

map.data.forEach(function(feature) { 
    // filter... 
    map.data.remove(feature); 
}); 
Các vấn đề liên quan