标签: markerclusterer

Google Maps v2 for Android中的刷新制作者(ClusterItems)

我正在使用谷歌地图Android API实用程序库,我正在从互联网上下载我想用作标记的某些图像.我正在做的方式就像在下面的代码片段:

class MarkerItemClusterRenderer extends DefaultClusterRenderer<MarkerItem> {
...
    @Override
        protected void onBeforeClusterItemRendered(MarkerItem item,
                final MarkerOptions markerOptions) {
            super.onBeforeClusterItemRendered(item, markerOptions);
            mImageLoader.get(item.getImageUrl(), new ImageListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i("XXX", error.toString());
                }

                @Override
                public void onResponse(ImageContainer response, boolean isImmediate) {
                    if (response != null && response.getBitmap() != null) {
                        mImageIcon.setImageBitmap(response.getBitmap());
                        Bitmap icon = mIconGenerator.makeIcon();
                        Bitmap bhalfsize = Bitmap.createScaledBitmap(icon, 150,
                                150, false);
                        markerOptions.icon(BitmapDescriptorFactory
                                .fromBitmap(bhalfsize));
                    }
                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

问题是,当下载图像时,地图(以及标记)不会刷新,因此大多数时候(但并非总是如此)我仍然会看到红色的默认标记.

我试过,mImageIcon.invalidate(); mImageIcon.requestLayout();但仍然没有运气.

反正有没有实现这个目标?非常感谢提前.

android google-maps google-maps-markers markerclusterer google-maps-android-api-2

10
推荐指数
2
解决办法
1896
查看次数

如何使用适用于Android的Android Maps Utility Library显示InfoWindow

我正在使用Google Maps Android API Utility Library,以便以群集方式在地图中显示多个标记.我按照说明使其工作,以及查看库中的示例,但我无法弄清楚如何显示InfoWindow单击标记的时间.

我想getMap().setOnMarkerClickListener(mClusterManager);是管理onClick事件的人,如果注释掉了,我可以使用它来覆盖它,getMap().setInfoWindowAdapter(new InfoWindowAdapter() {));但我无法访问我的自定义标记对象.然而,如果我使用getMap().setOnMarkerClickListener(mClusterManager);,我找不到一种方法来显示InfoWindow点击标记的时间.

有没有人知道如何实现这一目标?

非常感谢提前!

android google-maps markerclusterer

9
推荐指数
1
解决办法
4676
查看次数

如何在Android Iconnenerator上居中文本

我正在开发一个使用大量放置在地图上的标记的应用程序,我正在使用自定义ClusterRenderer来显示它们.问题是我无法在自定义标记图标的中心绘制群集的大小,请参阅附带的屏幕截图.我已经尝试将contentPadding添加到IconGenerator,但仍然没有运气,因为显示的位数变化.你能帮我把文字集中在生成的图标上吗?

码:

 IconGenerator clusterIconGenerator = new IconGenerator(context);
 clusterIcon = context.getResources().getDrawable(R.drawable.map_cluster);
 clusterIconGenerator.setBackground(clusterIcon);

@Override
protected void onBeforeClusterRendered(Cluster<MyType> cluster, MarkerOptions markerOptions) {

    Bitmap clusterIcon = clusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));
    markerOptions.icon(BitmapDescriptorFactory.fromBitmap(clusterIcon));
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

android bitmap google-maps-markers markerclusterer google-maps-android-api-2

9
推荐指数
1
解决办法
3909
查看次数

自动缩放地图以适合所有标记

举个例子,你可以看到她的http://plnkr.co/edit/lJHyP3dhT3v8aHVdt3D3?p=preview

无论在初始化地图时提供什么缩放值,我都想自动缩放地图,以便所有标记都在视图内.这是我的代码

var tiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        maxZoom: 18,
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors, Points &copy 2012 LINZ'
    }),
    latlng = L.latLng(-37.82, 175.24);

var map = L.map('map', {center: latlng, zoom: 10, layers: [tiles]});

var markers = L.markerClusterGroup();

for (var i = 0; i < addressPoints.length; i++) {
    var a = addressPoints[i];
    var title = a[2];
    var marker = L.marker(new L.LatLng(a[0], a[1]), { title: title });
    marker.bindPopup(title);
    markers.addLayer(marker);
}

map.addLayer(markers);

var group = new L.featureGroup(markers);

map.fitBounds(group.getBounds());
Run Code Online (Sandbox Code Playgroud)

markerclusterer leaflet

9
推荐指数
1
解决办法
5546
查看次数

服务器端集群?

我已经拼命寻找能够处理多达50 000个标记的正确解决方案(如果服务器可以处理它,为什么不能更多),同时在我的服务器上很容易,而且我已经这样做了好几天了.


概念是这样的:

在此输入图像描述


  • 集群服务器端的最佳解决方案/语言是什么?我不是在寻找一个巨大的工作代码,但我需要被推向正确的方向.
  • 如何"缓存""标记"已加载的群集/标记,以便在地图放大/缩小或平移时不会重新加载已加载的标记/群集?

理论:

正确的方式似乎与此类似:

  • 如果地图缩小并且有很多标记,请在服务器中处理群集
  • 如果地图放大到所有标记不再适合视口的点,则仅聚类视口中的标记 - 也是服务器
  • 如果缩放变得如此之大以至于视口中的标记数量变小(例如<500),则通过JS在浏览器中进行集群

我可以在服务器端使用的数据,我也可以通过JSON发送到浏览器:

  • 在发出请求时,通过ajax将映射边界映射到服务器
  • 数据库查询中的标记总数
  • 来自数据库查询的标记坐标
  • 可能是我目前没有意识到的其他重要/有用的东西

php ajax google-maps google-maps-api-3 markerclusterer

9
推荐指数
1
解决办法
888
查看次数

基于聚合值而不是点数计算mapboxgl中的标记聚类

我一直在寻找MapBox GL中的聚类标记(https://www.mapbox.com/mapbox-gl-js/example/cluster/),但我希望这样做有点不同.

从本质上讲,我有一个geojson文件,其中包含我们校园内每栋建筑物(点)的事件数.我想在标记中显示该数字,然后当缩小时,标记会折叠并将该标记的值添加到一起.

我看到的聚类示例只是计算点数,但似乎没有提供聚合属性.这样的事情可行吗?

markerclusterer mapbox mapbox-gl-js

9
推荐指数
2
解决办法
1424
查看次数

使用GMUClusterManager的自定义标记

我想显示自定义标记使用GMUClusterManager.我在这里遵循标记聚类的所有步骤.

但是有这样的蓝色和红色图标. 在此输入图像描述

但是,当我放大该地图时,它只显示红色标记,但我不希望这样.

有实例方法,我已经实现了我的逻辑,但没有用.

    - (instancetype)initWithMapView:(GMSMapView *)mapView clusterIconGenerator:(id<GMUClusterIconGenerator>)iconGenerator
{
    if ((self = [super init])) {

        GMSMarker *marker= [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(24.0, 75.30)];

        UIView *customMarker =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 63, 40)];
        customMarker.backgroundColor = [UIColor blueColor];

        marker.iconView = [self EmployeeMarker:0] ;
        marker.appearAnimation = kGMSMarkerAnimationPop;
        marker.map = mapView;
    }
    return self;
}

-(UIView *)EmployeeMarker:(int)labelTextInt{
    UIView *customMarker =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 63, 40)];
    UIImageView *imgViewCustomMarker = [[UIImageView alloc]initWithFrame:CGRectMake(0, 15, 24, 25)];
    imgViewCustomMarker.image = [UIImage imageNamed:@"iconMapUser.png"];
    [customMarker addSubview:imgViewCustomMarker];
    UIView *viewRatingCustom = [[UIView alloc] …
Run Code Online (Sandbox Code Playgroud)

google-maps objective-c markerclusterer ios

9
推荐指数
2
解决办法
3384
查看次数

如何在谷歌地图中隐藏和显示MarkerClusterer

我正试图在用户点击某些按钮时隐藏/显示markerClusterer:

这是我正在尝试做的事情:

    map = new google.maps.Map(document.getElementById("mappa"),mapOptions);
    var marker_tmp = [];
    var markers_tmp = [];
    $.each(json,function(index,value){
        var latLng = new google.maps.LatLng(value.lat,value.lng);
        var marker = new google.maps.Marker({'position': latLng});
        if((value.candidato in markers_tmp)==false){
            markers_tmp[value.name]=[];
        }
        markers_tmp[value.name].push(marker);
    });
    for(var name in markers_tmp){
        markers[name]= new MarkerClusterer(map,markers_tmp[name]);
    }
Run Code Online (Sandbox Code Playgroud)

我创建了多个markerClusterer,每个都与一个特定的名称相关联.

所以我有一些与这些特定名称相关的按钮,我需要隐藏/显示与该按钮关联的标记聚类.

/*This is the function associated to a button when it is clicked*/
function hide_show_cluster(name,visible){
    var tmp_cluster = markers[name];
    //call a function of markerClusterer (tmp_cluster) to hide/show it
}
Run Code Online (Sandbox Code Playgroud)

我做了很多测试,但没有人满足我的要求.有人能帮我吗?谢谢!

javascript show-hide google-maps-markers markerclusterer

8
推荐指数
2
解决办法
1万
查看次数

谷歌地图API V3- MarkerClusterer未定义

我按照库和youtube指南将标记聚类器添加到我的地图但我遇到了问题.

MarkerClusterer undefined
Run Code Online (Sandbox Code Playgroud)

我已将MarkerClusterer定义为指南中的show,但仍然出现上述错误.下面是我的代码

<!DOCTYPE html>
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemasmicrosoft-
com:vml">
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<meta charset="UTF-8" />
<title>Ma Page de Google Maps V3</title>
<style>
        html, body, #map_canvas {
    margin: 3;
    padding: 3;
    height: 100%;
  }
</style>
<style type="text/css">
    .tooltip {
    background-color:#ffffff;
    font-weight:bold;
    border:2px #006699 solid; 
    width:150px}
</style>
<script src="http://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script src="http://www.google.com/jsapi"></script>
<script src="../src/data.json" type="text/javascript"></script>
<script type="text/javascript">
  var script = '<script type="text/javascript" src="../src/markerclusterer';
  if (document.location.search.indexOf('compiled') !== -1) {
    script += '_compiled';
  }
  script += '.js"><' + '/script>';
  document.write(script);
</script> …
Run Code Online (Sandbox Code Playgroud)

javascript google-maps-api-3 markerclusterer

8
推荐指数
2
解决办法
2万
查看次数

使用ClusterManager时如何在Map上更新标记

我正在尝试使用来自服务器的更新数据更新我的地图,但我无法弄清楚如何从地图中删除旧项目(标记和群集 - 使用ClusterManager)( - 在我看来,我只能在ClusterManager中添加.

我有BroadcastReceiver,当有新数据时它会获得意图.我正在尝试这样的事情:(但它在"... getMarkers().clear();"上给了我UnsupportedOperationException .

private BroadcastReceiver myRefrestMapBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive");
        mClusterManager.clearItems();
        mClusterManager.getMarkerCollection().getMarkers().clear();
        mClusterManager.getClusterMarkerCollection().getMarkers().clear();
        mClusterManager.addItems(LocationGetter.getReports());
    }
};
Run Code Online (Sandbox Code Playgroud)

添加的数据仅用于此功能.

java.util.Collection<Marker> userCollection = mClusterManager.getMarkerCollection().getMarkers();
            ArrayList<Marker> userList = new ArrayList<Marker>(userCollection);
            // now is userList empty
            for(Marker marker: userList){
                marker.remove();
            }

            java.util.Collection<Marker> userCollection2 = mClusterManager.getClusterMarkerCollection().getMarkers();
            ArrayList<Marker> userList2 = new ArrayList<Marker>(userCollection2);
            // now is userList2 empty
            for(Marker marker: userList2){
                marker.remove(); …
Run Code Online (Sandbox Code Playgroud)

java android google-maps google-maps-api-3 markerclusterer

8
推荐指数
3
解决办法
7413
查看次数