在尝试使用客户端方法聚类大量Google标记后,我认为我的项目(拥有28,000多名用户的社交网络)是不可能的.
是否有任何在服务器端聚类坐标的例子 - 最好是在Python/Django中?
我希望这样做的方法是根据标记的接近度(半径)和缩放级别逐渐索引标记.
换句话说,当新用户注册时,他/她被自动分配给彼此接近的某个"组"标记,从而增加了"组"计数器.发送到服务器的只是少数"组".仅当地图的缩放级别/比例为1:1时 - 实际用户才会显示在地图上.
这样,客户端每个请求/缩放级别只需要处理10-50个标记.
所以我有一个包含带有(几百个)标记的地图的应用程序.我使用Google提供的markerclusterer.js来聚类我的标记,让整个事情更容易看.我正在使用API V3.
我对所有这一切都很好.但我想要做的是当markerclusterer完成聚类所有标记时执行一些操作.我试过自己做但不看.
有什么建议?(我假设这比我想象的要容易,我的大脑只是油炸)
我在地图上有数十万个对象.并且从基数中选择几乎所有这些(在小规模的地图容器矩形内)是非常糟糕的做法.需要在DB内部进行聚类.在关系数据库中经常使用附加表 - 集群,它首先被选中.MongoDB中是否有一些地理空间聚类的最佳实践?谷歌没有说什么.
UPD.想要这样,但是在MongoDB中:https://gis.stackexchange.com/questions/11567/spatial-clustering-with-postgis
有人可以告诉我如何更改markerclusterer标记的字体颜色.这是我目前用于标记样式的代码
mcOptions = {styles: [{
height: 27,
url: "image.png",
width: 35
}],
maxZoom: 8
}
var markerCluster = new MarkerClusterer(map, markers, mcOptions);
Run Code Online (Sandbox Code Playgroud) javascript css google-maps google-maps-api-3 markerclusterer
我想在使用Leaflet MarkerCluster的同时为我的标记使用自定义图标.
我已经设法实现我的自定义图标,但现在标记弹出窗口不再工作了.
我的代码看起来像这样:
var markers1 = new L.MarkerClusterGroup();
// add markers with popup info
var geoJsonLayer1 = L.geoJson(Myplaces, {
onEachFeature: function(feature, layer) {
layer.bindPopup(feature.properties.Name);
}
})
// add markers with custom icons
var geoJsonLayer1 = L.geoJson(Myplaces, {
onEachFeature: onEachFeature,
pointToLayer: function(feature, latlng) {
var iconURL = feature.properties.img;
return new L.Marker(new L.LatLng(feature.geometry.coordinates[1], feature.geometry.coordinates[0]), {
icon: L.icon({
iconAnchor: [0, 0],
popupAnchor: [0, 0],
iconUrl: iconURL
})
});
}
})
// add markers to map
markers1.addLayer(geoJsonLayer1);
map.addLayer(markers1); …Run Code Online (Sandbox Code Playgroud) 对不起我的英语不好
我尝试了该ClusterManager<?>.getMarkerCollection().getMarkers()方法,但它返回空集合.
我在我的应用中使用Google Maps Utility Library.每次屏幕旋转后,我都会创建AsynkTask并在后台线程中从DB读取数据并将项目添加到ClusterManager:
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
SomeData row = readSomeDataRow(cursor);
clusterManager.addItem(new ClusterItemImpl(row));
cursor.moveToNext();
}
Run Code Online (Sandbox Code Playgroud)
当AsyncTask完成它的工作(即在主线程中)我试图从以下所有标记ClusterManager:
clusterManager.cluster();
// cluster manager returns empty collection \|/
markers = clusterManager.getMarkerCollection().getMarkers();
Run Code Online (Sandbox Code Playgroud)
但是ClusterManager返回空集合.
可在那一刻,当我打电话getMarkers()的ClusterManager却没有放置标记在地图上和稍后会做(可在后台线程).如果是这样,那我怎么能抓住那一刻呢?
我在http上使用谷歌地图,它工作得非常好.但是当我在同一时间安装ssl证书时,它就停止了工作.它给了我错误
混合内容:" https:// url "页面是通过HTTPS加载的,但请求了一个不安全的脚本" http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/ markerclusterer.js?_ = 1***************'.此请求已被阻止; 内容必须通过HTTPS提供.
我正在尝试将InfoWindow放在与MarkerClusterer分组的多个标记中,但没有成功.我只能生成带有infowindows或带有集群的地图; 不是两个在同一时间.在网上搜索让我更加困惑....
起点是谷歌开发者页面:根据我的需求,我创建了以下代码:
<div id="map"></div>
<script>
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 5,
center: {lat: -15.7942357, lng: -47.8821945}
});
// Add some markers to the map.
// Note: The code uses the JavaScript Array.prototype.map() method to
// create an array of markers based on a given "locations" array.
// The map() method here has nothing to do with the Google Maps API.
var markers = locations.map(function(location, i) {
return new google.maps.Marker({
position: location,
}); …Run Code Online (Sandbox Code Playgroud) 我正在使用HTML地图与Leaflet一起进行一些测试.服务器端我有一个Ruby Sinatra应用程序,提供由MySQL表提取的json标记.使用2k-5k和可能更多标记的最佳实践是什么?
谢谢,卢卡
谷歌地图有一个很好的功能叫做Marker Clusterer,它允许你将基于网格的聚类应用于一组标记.
Marker Clusterer将每个标记计为一个,它总结了网格中标记的数量.不同的是,我想为每个标记分配权重,并在群集中总结这些权重.是否可以使用Google Maps API?你知道其他任何提供类似功能的javascript库吗?
javascript google-maps marker google-maps-markers markerclusterer
markerclusterer ×10
google-maps ×6
javascript ×2
leaflet ×2
marker ×2
android ×1
css ×1
django ×1
geospatial ×1
https ×1
icons ×1
json ×1
mongodb ×1
popup ×1
python ×1
ssl ×1