首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android中的谷歌地图标记集群

Android中的谷歌地图标记集群
EN

Stack Overflow用户
提问于 2013-01-07 21:43:33
回答 3查看 2.7K关注 0票数 1

在Android应用程序中,有什么共同的方法来实现谷歌地图的标记集群呢?

我有一个大约10,000个位置的数据库,我想以更智能的方式显示它们,而不仅仅是在一个很少比匹配框大的显示器上倾倒数千个标记.理想情况下,从网站URL中检索标记应该是可能的,尽管我不确定从可用性的角度来看,使用通常的异步函数是否有意义。

EN

回答 3

Stack Overflow用户

发布于 2013-04-29 20:50:17

克鲁斯特克拉夫会为你工作。示例应用程序中的高级模式( Advanced )选项之一是在全球范围内聚集10,000个随机点。集群是在后台线程上完成的,因此即使在较旧的设备上也能相当好地工作。要使它在大数据集中执行,关键是将“展开边界因子(透支)”设置为0。它飞在我的星系Nexus上。

票数 3
EN

Stack Overflow用户

发布于 2015-11-03 07:40:22

下面的代码是为我工作的:

主类

代码语言:javascript
复制
                MapView mMapView;
                private GoogleMap googleMap;
                ClusterManager<MyItem> mClusterManager;


                        mClusterManager = new ClusterManager<MyItem>(getActivity(), googleMap);

                        mMapView = (MapView) v.findViewById(R.id.mapView);
                        mMapView.onCreate(savedInstanceState);

                        mMapView.onResume();// needed to get the map to display immediately

                        try {
                            MapsInitializer.initialize(getActivity().getApplicationContext());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                       googleMap = mMapView.getMap();

                       //below code use in onPost() of Asynctask
                       googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentlat,currentlng), 15));

                                        mClusterManager = new ClusterManager<MyItem>(getActivity(), googleMap);

                                        googleMap.setOnCameraChangeListener(mClusterManager);
                                        googleMap.setOnMarkerClickListener(mClusterManager);
                                        CustomRenderer customRenderer = new CustomRenderer(getActivity(), googleMap, mClusterManager);                          
                                         mClusterManager.setRenderer(customRenderer);


                                for(int i=0;i<jarray.length();i++)
                                {

                                    JSONObject jobj_root=jarray.getJSONObject(i);
                                    JSONObject j_j_record=jobj_root.getJSONObject("Record");
                                    lat=j_j_record.getDouble("latitude");
                                    lng=j_j_record.getDouble("longitude");

                                     Location loc1 = new Location("");
                                    loc1.setLatitude(temp_lat);
                                    loc1.setLongitude(temp_lng);

                                    Location loc2 = new Location("");
                                    loc2.setLatitude(lat);
                                    loc2.setLongitude(lng);

                                    float distanceInMeters = loc1.distanceTo(loc2);
                                    if(distanceInMeters<2000)
                                    {
                                        //Toast.makeText(getActivity(), " kresp="+distanceInMeters, 34).show();
                                         MyItem offsetItem = new MyItem(lat,lng);
                                            mClusterManager.addItem(offsetItem);
                                    }

                                }

CustomRenderer.class

代码语言:javascript
复制
public class CustomRenderer extends DefaultClusterRenderer<MyItem>{

    private boolean shouldCluster = true;
    private static final int MIN_CLUSTER_SIZE = 1;

    public CustomRenderer(Context context, GoogleMap map,ClusterManager<MyItem> clusterManager) {
        super(context, map, clusterManager);
        // TODO Auto-generated constructor stub
    }

    public void setMarkersToCluster(boolean toCluster)
    {
        this.shouldCluster = toCluster;
    }

    @Override
    protected boolean shouldRenderAsCluster(Cluster<MyItem> cluster) {

        if(shouldCluster)
        {
            return cluster.getSize() > MIN_CLUSTER_SIZE;
        }
        else
        {
            return shouldCluster;
        }

    }

}

MyItem.class

代码语言:javascript
复制
public class MyItem implements ClusterItem {
    private final LatLng mPosition;

    public MyItem(double lat, double lng) {
        mPosition = new LatLng(lat, lng);
    }

    @Override
    public LatLng getPosition() {
        return mPosition;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-02-25 07:50:33

我用了这个解决方案,对我来说效果很好,我希望它能帮上忙。

http://code.google.com/p/android-playground-erdao/wiki/PhotSpot

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14204554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档