谷歌地图饼图集群[batchgeo样](Pie charts clustering on Googl

2019-07-31 19:21发布

任何人都知道如何改造类似于Batchgeo做动态饼图当集群/组标记的东西吗?

例如: batchgeo地图馅饼聚类

谢谢,

问候

Answer 1:

我没有一个完整的如何为你,但确实有一些指针,这可能会帮助你,似乎由BatchGeo使用。

我研究了谷歌地图的集群例如: https://developers.google.com/maps/articles/toomanymarkers

覆盖聚类不错......那么你就需要看标记图像改变成以谷歌图表的电话: https://developers.google.com/chart/image/docs/gallery/pie_charts

注:这是过时的和将降至2015年的支持......但用于BatchGeo我相信。

还有这里的例子可能会帮助你在使用自定义集群标记图像,这是我不能发布(如限制为2个链接)(如心,人们等..在CLUSTER样式集)的方式。 如果谷歌“谷歌地图V3集群例如”你应该在顶部结果发现它。

如果你把所有在一起,然后我想你应该到那里。

问候,

詹姆士



Answer 2:

我需要一个解决方案,以同样的问题,所以我解决它通过扩展谷歌地图标记集群图书馆使用饼图代替簇标记。 你可以从我的GitHub库下载解决方案: https://github.com/hassanlatif/chart-marker-clusterer



Answer 3:

已经很晚了,但我需要用谷歌地图复制BatchGeo地图。 所以在这里我提出我的CustomRendererClass这是我用来绘制饼图与集群大小集群图标为好。 通过数据集,按您的定制要求。

public class TbmClusterRenderer extends DefaultClusterRenderer<VenueItemData> {

    private IconGenerator mClusterIconGenerator;
    private Context context;

    public TbmClusterRenderer(Context context, GoogleMap map,
                              ClusterManager<VenueItemData> clusterManager) {
        super(context, map, clusterManager);
        this.context = context;
        mClusterIconGenerator = new IconGenerator(context);
    }

    @Override
    protected void onBeforeClusterItemRendered(VenueItemData item,
                                               MarkerOptions markerOptions) {

        try {
            int markerColor = item.getMarkerColor();
            Bitmap icon;
            icon = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.map_marker).copy(Bitmap.Config.ARGB_8888, true);
            Paint paint = new Paint();
            ColorFilter filter = new PorterDuffColorFilter(markerColor,
                    PorterDuff.Mode.SRC_IN);
            paint.setColorFilter(filter);
            Canvas canvas = new Canvas(icon);
            canvas.drawBitmap(icon, 0, 0, paint);

            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
        } catch (Exception ex) {
            ex.printStackTrace();
            Crashlytics.logException(ex);
        }
    }

    @Override
    protected void onClusterItemRendered(VenueItemData clusterItem, Marker marker) {
        super.onClusterItemRendered(clusterItem, marker);
    }

    @Override
    protected void onBeforeClusterRendered(Cluster<VenueItemData> cluster, MarkerOptions markerOptions) {
        ArrayList<VenueItemData> a = (ArrayList<VenueItemData>) cluster.getItems();
        Canvas canvas;
        @SuppressLint("UseSparseArrays")
        HashMap<Integer, Integer> markerColors = new HashMap<>();
//        ConcurrentHashMap<Integer, Integer> markerColors = new ConcurrentHashMap<>();
        for (VenueItemData data : a) {
            if (data.getMarkerColor() != 0) {
                if (!markerColors.containsValue(data.getMarkerColor())) {
                    markerColors.put(data.getMarkerColor(), 0);
                }
            }
        }
        Set set = markerColors.entrySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            Object aSet = iterator.next();
            Map.Entry<Integer, Integer> entry = (Map.Entry<Integer, Integer>) aSet;
            for (VenueItemData data : a) {
                if (data.getMarkerColor() == entry.getKey()) {
                    entry.setValue(entry.getValue() + 1);
                }
            }
        }

        Log.e("graph values", new Gson().toJson(markerColors));
        Bitmap myBitmap = Bitmap.createBitmap(70, 70, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(myBitmap);
        Paint paint = new Paint();
        paint.setAntiAlias(true);

        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(1f);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        RectF rectf = new RectF(2, 2, myBitmap.getWidth() - 2, myBitmap.getHeight() - 2);
        set = markerColors.entrySet();
        float startAngle = 0.0f;
        for (Object aSet : set) {
            Map.Entry<Integer, Integer> entry = (Map.Entry<Integer, Integer>) aSet;
            float angle = (360.0f / (float) cluster.getSize()) * (float) entry.getValue();
            paint.setColor(entry.getKey());
            canvas.drawArc(rectf, startAngle, angle, true, paint);
            startAngle += angle;
        }

        BitmapDrawable clusterIcon = new BitmapDrawable(context.getResources(), myBitmap);
        if (set.isEmpty()) {
            mClusterIconGenerator.setBackground(context.getResources().getDrawable(R.drawable.circle1));
        } else {
            mClusterIconGenerator.setBackground(clusterIcon);
        }
        mClusterIconGenerator.setTextAppearance(R.style.ClusterTextAppearance);
        Bitmap icon = mClusterIconGenerator.makeIcon(String.valueOf(cluster.getSize()));
        markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
        mClusterIconGenerator.setContentPadding(20, 20, 20, 20);
    }
}

在这里,我将屏幕截图以供参考:



文章来源: Pie charts clustering on Google Maps [batchgeo-like]