Giter Site home page Giter Site logo

android-cluster-marker's Introduction

本工程为基于高德地图Android SDK进行封装,实现了Marker聚合效果的例子

前述

功能描述

基于3D地图SDK进行封装,在大量点需要显示的场景下可以对点进行聚合显示,提高地图响应显示效率。在之前的开源工程版本基础上做了一些修改,提高了显示速度和内存优化使用,支持的聚合点更多,效果更好。主要修改包括:

  • 将marker处理线程和聚合算法线程进行分离,提高效率。
  • 聚合过程中减少不必要的运算,提高聚合显示速度。
  • 适配新版SDK应用场景,对用到的图标,统一管理,减少内存使用和提高效率,
  • 加入了动画效果,聚合切换过程更为平滑

效果图如下

Screenshot

扫一扫安装##

Screenshot

使用方法##

###1:配置搭建AndroidSDK工程###

###2:接口使用###

  • 初始化聚合和加入元素

1:批量初始化,适合一次大量加入

List<ClusterItem> items = new ArrayList<ClusterItem>();
 //随机10000个点
 for (int i = 0; i < 10000; i++) {
     double lat = Math.random() + 39.474923;
     double lon = Math.random() + 116.027116;
     LatLng latLng = new LatLng(lat, lon, false);
     RegionItem regionItem = new RegionItem(latLng,
             "test" + i);
     items.add(regionItem);

 }
mClusterOverlay = new ClusterOverlay(mAMap, items,
         dp2px(getApplicationContext(), clusterRadius),
               getApplicationContext());

2:初始化之后,有新的聚合点加入

double lat = Math.random() + 39.474923;
double lon = Math.random() + 116.027116;

LatLng latLng1 = new LatLng(lat, lon, false);
RegionItem regionItem = new RegionItem(latLng1,
        "test");
mClusterOverlay.addClusterItem(regionItem);
  • 设置渲染render和聚合点点击事件监听
mClusterOverlay.setClusterRenderer(MainActivity.this);
mClusterOverlay.setOnClusterClickListener(MainActivity.this);
  • 自定义渲染
public Drawable getDrawAble(int clusterNum) {
    int radius = dp2px(getApplicationContext(), 80);
    if (clusterNum == 1) {
        Drawable bitmapDrawable = mBackDrawAbles.get(1);
        if (bitmapDrawable == null) {
            bitmapDrawable =
                    getApplication().getResources().getDrawable(
                    R.drawable.icon_openmap_mark);
            mBackDrawAbles.put(1, bitmapDrawable);
        }

        return bitmapDrawable;
    } else if (clusterNum < 5) {

        Drawable bitmapDrawable = mBackDrawAbles.get(2);
        if (bitmapDrawable == null) {
            bitmapDrawable = new BitmapDrawable(null, drawCircle(radius,
                    Color.argb(159, 210, 154, 6)));
            mBackDrawAbles.put(2, bitmapDrawable);
        }

        return bitmapDrawable;
    } else if (clusterNum < 10) {
        Drawable bitmapDrawable = mBackDrawAbles.get(3);
        if (bitmapDrawable == null) {
            bitmapDrawable = new BitmapDrawable(null, drawCircle(radius,
                    Color.argb(199, 217, 114, 0)));
            mBackDrawAbles.put(3, bitmapDrawable);
        }

        return bitmapDrawable;
    } else {
        Drawable bitmapDrawable = mBackDrawAbles.get(4);
        if (bitmapDrawable == null) {
            bitmapDrawable = new BitmapDrawable(null, drawCircle(radius,
                    Color.argb(235, 215, 66, 2)));
            mBackDrawAbles.put(4, bitmapDrawable);
        }

        return bitmapDrawable;
     }
}
  • 聚合点击事件
public void onClick(Marker marker, List<ClusterItem> clusterItems) {
    mClusterItems = clusterItems;
    mCenterLat = marker.getPosition();
    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (ClusterItem clusterItem : clusterItems) {
        builder.include(clusterItem.getPosition());


    }
    LatLngBounds latLngBounds = builder.build();
    mAMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 0)
    );
}

android-cluster-marker's People

Contributors

qiyy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-cluster-marker's Issues

聚合点不会分裂向下分裂

我这边遇到个问题,就是说几个经纬度点相差4米以下的情况下,距个点不会分裂,请问能给个思路么

marker移动到屏幕上方的边缘时突然消失

你好,我想问一下为什么当移动地图使maker移近屏幕边缘(maker大约出屏幕1/2时突然消失)时会突然消失?我自己开发的app也有这个问题。有什么解决方案么?

screenshot_2017-01-22-19-23-32-378_com amap apis cluster

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.