标记 Google 地图 Android 自动 Hide/Show

Marker Google Maps Android Auto Hide/Show

我正在使用 Google 地图 API 开发带有大量标记的地图。这是我的绘图标记函数:

    //Draw marker to google map
private void drawMarker(LatLng point,String title,String snipped){
    Marker marker=mGoogleMap.addMarker(new MarkerOptions()
            .title(title)
            .snippet(snipped)
            .position(point));
}

并覆盖 Onconnected:

    @Override
public void onConnected(Bundle bundle) {
    //Get Last Know Location
    mLastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    Log.i(TAG, "Connection Success");
    if(mLastLocation!=null){
        curLatLng=new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude());
        //Get All Wifi to Draw to Google Map
        allListWifi=data.getAllLocations();
        mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(curLatLng, 17));
        for(int j=0;j<allListWifi.size();j++){
            //Item wifi
            LatLng desLatLng=new LatLng(Double.valueOf(allListWifi.get(j).get("LAT")), Double.valueOf(allListWifi.get(j).get("LNG")));
            int distance=Math.round(distancePoints(curLatLng, desLatLng));
            drawMarker(desLatLng, String.valueOf(allListWifi.get(j).get("NAME")), String.valueOf(distance));
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adapter.notifyDataSetChanged();
            }
        });
    }
}

问题是:1/ 我的应用程序花费大量时间在 google 地图上绘制标记,而且我的应用程序非常延迟。然后我想只在当前屏幕地图上绘制标记,我是 seeing.When 我移动地图,新标记将出现,旧标记将消失。
2/ 我想在我缩小时将相邻位置聚集在一个组中,并在我放大时它们自动分离。
3/ 非常感谢。祝大家有美好的一天:)

您可以使用 OnCameraChangeListner() 执行此操作。您可以在 onCameraChange() 方法中检查 MarkOption 是否在您的可见区域内。

示例代码:

        final List<MarkerOptions> markerOptions = new ArrayList<MarkerOptions>();
        markerOptions.add(markerOne);
        markerOptions.add(markerTwo);

        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
                for (MarkerOptions option : markerOptions) {
                    if (bounds.contains(option.getPosition())) {
                        mMap.addMarker(option);
                    }
                }
            }
        });