如何从谷歌地图数据层中删除数据
How to remove data from a Google Maps Data Layer?
我看到谷歌地图支持geojson。查看此处的文档:https://developers.google.com/maps/documentation/javascript/datalayer#load_geojson
举最后一个"谷歌"的例子,我如何才能点击一个按钮添加一个新的Geojson层,并点击另一个按钮切换/删除"谷歌"甚至一个字母?在我看来,map.data似乎是单层,而不是多层。
数据层是单层,这一点是正确的。但是,如果手动检索GeoJSON并使用addGeoJson
函数而不是loadGeoJson
,则会返回添加的特性。你可以稍后删除这些。
所以不是
map.data.loadGeoJson('https://storage.googleapis.com/maps-devrel/google.json');
您可以这样做(本例使用jQuery获取数据,并假设有一个ID为removeBtn的按钮):
// 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]);
});
});
(请参阅此JSbin,以获得可以使用的工作示例)
在更复杂的情况下,您可能需要跟踪用户加载的数据源以及因此创建的功能,以便在请求时删除它们。
这对我有效:
map.data.forEach(function(feature) {
// filter...
map.data.remove(feature);
});
虽然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
作为@mensi回答的后续内容,跟踪从不同数据源加载的不同特征集可能很重要。你可以通过为每个功能添加一个属性来做到这一点:
feature.setProperty('kind', 'region');
feature.setProperty('kind', 'lake');
但是,创建多个数据层可能更容易。默认情况下,谷歌地图从一个数据层开始,但您并不局限于此。你可以做:
var datalayer = new google.maps.Data({ map: mymap });
(设置map
选项很重要,否则您的数据层将不会显示。)
这样,可以更容易地按层对功能进行分组,并打开或关闭整个层。
map.data.forEach((feature)=>map.data.remove(feature))
相关文章:
- 如何在iOS应用程序中从Firebase中删除超过6小时的数据
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记
- 如何从表中的api中删除表tr数据comping
- 单击文本时删除文本框的默认数据
- 停止JSON.parse()从JSON字符串数据中删除尾随零
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 使用AJAX传递的数据编辑XML文件-正在删除XML数据
- 如何删除Localstorage中的数据
- 如何在字符串中的值之前删除字符串中的动态数据?/ 使用 Lodash 的 _.trimStart 与动态数据
- 从服务器中删除映射数据,丢失订阅
- 如何根据某些条件向可编辑的jquery数据表添加或删除按钮
- jQuery:从数据属性中删除除前4个字符外的所有字符
- 使用nodeJS进行重复数据删除
- 改进JS重复数据删除函数的性能
- 我如何合并包含对象的JavaScript数组,重复数据删除并保留新对象
- 编辑对新添加的数据删除不起作用
- Typeahead.js预取和远程数据源之间的重复数据删除
- 在NodeJS中使用gridfs通过元数据删除文件
- Ajax javascript数据删除最后一次
- 如何使用来自其他数组的数据删除数组项