Javascript 如何从Google地图数据层删除数据?

Javascript 如何从Google地图数据层删除数据?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我看到谷歌地图支持geojson。查看此处的文档: 在最后一个“Google”示例中,我如何使其能够单击一个按钮添加新的Geojson层,以及另一个按钮切换/删除“Google”甚至一个字母?在我看来,map.data似乎是一个单层,而不是多层 数据层是一个单层,这是正确的。但是,如果手动检索GeoJSON并使用addGeoJson函数而不是loadGeoJson,则会返回添加的功能。您可以稍后删除这些 所以不是 map.data.loadGeoJson('https://storage.go

我看到谷歌地图支持geojson。查看此处的文档:


在最后一个“Google”示例中,我如何使其能够单击一个按钮添加新的Geojson层,以及另一个按钮切换/删除“Google”甚至一个字母?在我看来,map.data似乎是一个单层,而不是多层

数据层是一个单层,这是正确的。但是,如果手动检索GeoJSON并使用
addGeoJson
函数而不是
loadGeoJson
,则会返回添加的功能。您可以稍后删除这些

所以不是

map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
您可以这样做(本例使用jQuery获取数据,并假设有一个ID为removeBtn的按钮):

//手动加载GeoJSON(由于google设置了所需的HTTP头,因此可以跨源工作)
$.getJSON('https://storage.googleapis.com/maps-devrel/google.json,函数(数据){
var features=map.data.addGeoJson(数据);
//设置事件处理程序以删除GeoJSON功能
google.maps.event.addDomListener(document.getElementById('removeBtn'),'click',函数(){
对于(变量i=0;i
()


在更复杂的情况下,您可能必须跟踪用户加载的数据源以及因此而创建的功能,以便您可以在请求时删除它们。

虽然
map.data
被设计为单个数据源的常见情况的占位符,但您可以有多个,并且仍然使用
addGeoJSon
使用类似以下内容:

// 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
这对我很有用:

map.data.forEach(function(feature) {
    // filter...
    map.data.remove(feature);
});

作为@mensi答案的后续,跟踪从不同数据源加载的不同功能集可能很重要。您可以通过向每个功能添加属性来实现这一点:

feature.setProperty('kind', 'region');
feature.setProperty('kind', 'lake');
但是,创建多个数据层可能更容易。默认情况下,谷歌地图从单个数据层开始,但并不限于此。你可以做:

var datalayer = new google.maps.Data({ map: mymap });
(设置
映射
选项很重要,否则数据层将不会显示。)


这样,就更容易按层对功能进行分组,并打开或关闭整个层。

jlivni解决方案不起作用:addGeoJson方法似乎需要一个功能对象。>InvalidValueError:不是功能或功能集合感谢捕获;我的意思是loadGeoJson(接受url)而不是addGeoJson;修正我的答案,谢谢。这回答了一个不同但又相似的问题,我已经研究了几个小时了。非常感谢。这也帮了我解决了一个问题。你能详细说明一下为什么你必须循环使用你的特性变量,为什么你不能仅仅添加map.data.remove(特性)?
var datalayer = new google.maps.Data({ map: mymap });