- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在制作一张使用 slider 显示或隐藏标记的 map ,我想添加聚类功能,每个单独的功能都能完美运行,但我希望 slider 显示标记,如果标记非常接近使用集群。问题是,个体和标记簇都在显示,我希望显示的标记成簇,而不是一直存在的簇
<script type="text/javascript">
var sliderControl = null;
//creating layers
var cities = new L.LayerGroup();
var mbAttr = 'Map data © <a href="http://openstreetmap.org">OpenstreetMap</a> contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="http://mapbox.com">Mapbox</a>',
mbUrl = 'https://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png';
var grayscale = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {id: 'remote-sensing.n8k508ak', attribution: mbAttr, accessToken: 'pk.eyJ1IjoicmVtb3RlLXNlbnNpbmciLCJhIjoiYWNiYzg0ZWU2Mjk3ZTU5NjE4MmQyZWEzZTY2ZWNlYjIifQ.U7mp4MXdcjaIwW_syAqriQ'})
, streets = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {id: 'remote-sensing.84f6c85a', attribution: mbAttr, accessToken: 'pk.eyJ1IjoicmVtb3RlLXNlbnNpbmciLCJhIjoiYWNiYzg0ZWU2Mjk3ZTU5NjE4MmQyZWEzZTY2ZWNlYjIifQ.U7mp4MXdcjaIwW_syAqriQ'});
//create and add the layers to the map
var map = L.map('map', {
center: [33.9, 35.877],
zoom: 10,
layers: [ streets, cities]
});
//get length of the entries array
var len = "{{events|length}}";
var date = 1;
var time = 2;
var lat = 4;
var lon = 5;
//get events from database
var stri = "{% for event in events %} {{event.timestamp|date:"Y-m-d H"}} {{event.lat}} {{event.lon}} <br> {% endfor %}";
var entry = stri.split(" ");
//create the clustermarker object
var markers = new L.markerClusterGroup();
//create markers and add to cluster
var mymark;
for (var t = 0; t < len; t++) {
mymark = new L.marker([entry[lat], entry[lon]], {time: "\"" + entry[date] + entry[time] + "+01\""});
mymark.bindPopup("<b>Accident</b><br>this is marker number " + (t + 1) + " with coordinates :[" + entry[lat] + "," + entry[lon] + "]").openPopup();
markers.addLayer(mymark);
date += 8;
time += 8;
lat += 8;
lon += 8;
}
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
mymark = new L.marker([33.8,35.5]);
markers.addLayer(mymark);
//add cluster to map
// map.addLayer(markers);
//baseLayers for the map
var baseLayers = {
"Grayscale": grayscale,
"streets": streets
};
layerGroup = L.layerGroup(markers);
// $.getJSON("data.geojson", function(data) {
// var testlayer = L.geoJson(data);
var sliderControl = L.control.sliderControl({ position: "topright", layer: markers, range: false , follow: 3});
// ({position: "topright", layer: testlayer, follow: 3});
map.addControl(sliderControl);
sliderControl.startSlider();//});
</script>
抱歉有些评论,有些只是作为调试评论的实际代码
最佳答案
2016 年 3 月编辑:
您现在可以简单地使用插件 Leaflet.MarkerCluster.LayerSupport实现这一点,而无需更改 Leaflet Slider 插件代码。
查看演示 LayerSupport with LeafletSlider plugin .
在你的情况下,你会这样做:
var markers = L.layerGroup();
// Add all your markers into `markers` Layer Group.
// Check into MCG Layer Support!
// Add to map first before checking in.
L.markerClusterGroup.layerSupport().addTo(map).checkIn(markers);
var sliderControl = L.control.sliderControl({
position: "topright",
layer: markers,
range: false,
follow: 3
});
map.addControl(sliderControl);
sliderControl.startSlider();
Disclosure: I am the author of that plugin.
原答案:
避免将单个标记直接添加(删除)到(从) map 中,当它们由同时位于 map 上的 MarkerClusterGroup 处理时。
MCG 预计是唯一管理标记的组,如果你想显示/隐藏一些标记,你必须使用 markers.addLayer(myMarker);
(或 removeLayer
),其中 markers
是您的 MCG。
Leaflet Time-Slider (sliderControl) 插件因此与 MCG 不兼容:它直接向(从) map 添加(删除)标记。它对您的 MCG 一无所知。
不过,您应该能够通过将任何 map.addLayer
替换为 markers.addLayer
使其与 MCG 兼容(与 removeLayer
相同) ) 在插件代码中。不要忘记将您的 MCG 添加到 map 中。
关于javascript - 如何在 Javascript 中使用传单 slider 和 markercluster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886588/
我仅在同一位置的标记上进行聚类(即 maxClusterRadius = 0)。单击集群时,我希望它以特定的缩放级别(不是最大缩放)居中并放大,然后立即 spiderfy。使用以下代码,spiderf
与 Leaflet.Markercluster ,如何检查标记是否在集群中? 最佳答案 使用Leaflet的hasLayer()函数 常规可见标记在技术上作为图层存在于 map 中。 Leaflet
当您放大和缩小时,markerclusters 会自动“重新聚类”,因为它会再次计算聚类。 是否可以选择在更改缩放比例时禁用自动重新聚类? 最佳答案 根据您要实现的目标,您可能会对 Leaflet.M
我正在尝试使用包含纬度、经度、弹出信息和图层定义的多维数组来填充传单 map 。问题是 2 个标记应该去 layer1,另外两个去 layer2。事实上,所有四个标记都属于两个层。感谢您的帮助。 va
我正在使用 Leaflet.markercluster将我的标记聚集在我的 Mapbox Map 中.将使用 json 填充标记。文件。我只需要一个搜索功能,它可以根据搜索字符串弹出必要的标记。我认识
使用Leaflet.markercluster人们可以在example中看到一个不错的动画。 。启用动画,例如: L.markerClusterGroup({ animate: true, a
有没有办法将 onEachFeature 事件(见下文)中通过 .getCenter() 创建的中心点添加到 L.Marker 或类似对象,该对象包含所有创建的中心点该事件可以被 Leaflet.Ma
我正在使用 MarkerCluster 在 folium 中创建传单 map 。我已经查阅了所有文档并搜索了示例,但我无法弄清楚如何为给定的 MarkerCluster 或 FeatureGroup
所以我的 map 上有几家商店作为图层。我的所有商店都已添加到 MarkerCluster,并且该商店已添加到 map ,一切正常。但我想在商店位于我的 viewPort 中时显示有关该商店的简短信息
我试图显示一张 map ,上面有很多标记(~36.000),其中必须包含一些信息。 首先,我从数据库中选择元素,然后使用 PHP 将其编码为 JSON 数组,然后使用 JSS 获取它,最后将其添加到我
我想为我的标记使用自定义图标,同时使用传单 MarkerCluster . 我已经设法实现了我的自定义图标 ,但是 现在标记弹出不再工作了。 我的代码如下所示: var markers1 = new
我目前正在使用外部 geojson 文件作为数据输入的传单项目。由于 json 包含很多对象,我想使用 MarkerCluster我从 Mappbox 得到的插件: 在没有集群的情况下显示 js
首先我使用 JSON//Work 获取车站位置 JSON 结构: [{"number":31705,"name":"31705 - CHAMPEAUX (BAGNOLET)","address":"R
是否有可能在没有用户交互的情况下显示 Markercluster 内的 Leaflet 标记? 现在我正在使用 panTo 方法 ( http://leafletjs.com/reference.ht
我正在使用 github 上的 MarkerCluster_compiled.js。但虽然逻辑有效,但它的图形从昨天开始就开始失效。 问题似乎是由“https://google-maps-utilit
我的情况是我有很多地理数据,其中许多具有相同的纬度和经度。 我想让 MarkerCluster 的 zoomOnClick 处理程序保持事件状态,但是本地图保持放大并获得最大缩放级别时,集群中相同的纬
我有一个 Leaflet + MarkerCluster 应用程序,它在 map 上有一些标记,并在打开与标记关联的弹出窗口时(单击标记时)将图像叠加层添加到 map 的一些逻辑。我使用 bindPo
假设我们有以下 map : https://jsfiddle.net/fcumj09w/5/ 在上面的示例中,我们有 2 个标记集群组(clustRed 和 clustYellow)和这些组之外的单个
我正在尝试选择显示和隐藏带有类别的标记。它工作正常,但如果 map 上有标记簇则无法工作。例如。当我选择 map 上的类别酒吧标记时,类别餐厅消失,但标记簇仍在 map 上。这是我的 intin 函数
我在 python 中使用 folium 包来显示我的数据的 MarkerClusters。 当您没有完全放大时,集群看起来不错,但它们似乎显示该集群内子标记数量的计数。我理解为什么这是默认行为,但出
我是一名优秀的程序员,十分优秀!