如何防止用户将他的位置标记靠近已经存在的位置标记

How to prevent user to put his location marker to close to already existing one

在我的应用程序中,用户使用地图来标记他们的位置。当新用户想要创建他们的位置时,我想阻止他们将他们的标记放在靠近现有标记的地方,如果可能的话,指定标记之间的强制距离,例如 10 或 20 米。

谢谢。

这个其实很简单,你只需要检查用户点击的点是否比你要求的距离远,然后移除之前的Marker并添加新的Marker。

您可以使用Location.distanceBetween()方法进行距离检查。

首先,将您的标记引用创建为 Activity:

的实例变量
Marker marker;

然后,在您的 OnMapClickListener 中,添加逻辑以仅在距离大于定义的最小距离(本例中为 20 米)时移动用户选择作为当前位置的标记:

   mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

        @Override
        public void onMapClick(LatLng point) {

            if (marker != null) {
                LatLng markerPoint = marker.getPosition();

                float[] distance = new float[2];

                Location.distanceBetween(point.latitude, point.longitude,
                        markerPoint.latitude, markerPoint.longitude, distance);

                //check if new position is at least 20 meters away from previous selection
                if( distance[0] > 20 ){
                    //remove previous Marker
                    marker.remove();

                    //place marker where user just clicked
                    marker = mMap.addMarker(new MarkerOptions().position(point).title("My Location")
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));

                }
                else{
                    //Alert the user to select a location further away from the one already selected
                    Toast.makeText(MainActivity.this, "Please select a different location.", Toast.LENGTH_SHORT).show();
                }
            }
            else {

                //No previous selection, place marker where user just clicked
                marker = mMap.addMarker(new MarkerOptions().position(point).title("My Location")
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));
            }
        }
    });