如何防止用户将他的位置标记靠近已经存在的位置标记
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)));
}
}
});
在我的应用程序中,用户使用地图来标记他们的位置。当新用户想要创建他们的位置时,我想阻止他们将他们的标记放在靠近现有标记的地方,如果可能的话,指定标记之间的强制距离,例如 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)));
}
}
});