但我一直收到错误:
markers.setFilter不是函数
<script>
L.mapbox.accessToken = '*******';
var map = L.mapbox.map('map', 'mapbox.streets').setView([38, -95], 4);
var markers = omnivore.csv('/test.csv', L.mapbox.featureLayer())
.on('ready', function(layer) {
this.eachLayer(function(marker) {
if (marker.toGeoJSON().properties.AGE > '70') {
marker.setIcon(L.mapbox.marker.icon({
'marker-color': '#258369',
'marker-size': 'large'
}));
} else {
marker.setIcon(L.mapbox.marker.icon({}));
}
marker.bindPopup(marker.toGeoJSON().properties.FN + ', ' +
marker.toGeoJSON().properties.LN + ', ' + marker.toGeoJSON().properties.GENDER);
});
}).addTo(map);
console.log(markers);
$('.menu-ui a').on('click', function() {
// For each filter link, get the 'data-filter' attribute value.
var filter = $(this).data('filter');
$(this).addClass('active').siblings().removeClass('active');
markers.setFilter(function(f) {
// If the data-filter attribute is set to "all", return
// all (true). Otherwise, filter on markers that have
// a value set to true based on the filter name.
return (filter === 'all') ? true : f.properties[filter] === true;
});
return false;
});
</script>
我的CSV包含一些属性,我希望用它来过滤此结果。当我console.log
标记时,我看到它们在Layers-&gt; feature-&gt;属性中传递到数组内。
现在,教程和我的实现之间的区别在于我使用的是Omnivore而不是setGeoJson
。我不知道它是否重要,但这包含在laravel 5.2的blade.php
模板中
提前感谢您的帮助。
答案 0 :(得分:0)
我怀疑这是因为markers
变量的结果是omnivore.csv()
,这是一个普通的L.GeoJSON
对象,而不是地图集要素图层。
默认情况下,库将在内部构建
L.geoJson()
图层
这就是为什么你不能使用markers.setFilter()
。
您可以事先为markers
变量分配一个新的L.mapbox.featureLayer()
,并将其作为customLayer
的第三个参数(omnivore.csv
)传递。
请注意,您还缺少第二个参数parser_options
(请参阅传单 - 杂食性API)。
var markers = L.mapbox.featureLayer();
omnivore.csv('/test.csv', {}, markers).on(/* etc. */);
如果这不能解决您的问题,请尝试提供一个JSFiddle或Plunker来重现您的问题和错误消息。