我正在使用谷歌地图,并希望能够使用用户当前位置检测用户是否在标记的半径(放置在地图上)。我有用户当前位置坐标(纬度和经度)和标记的坐标,但不知道如何计算用户是否在该区域。下面的图片可能最能描述我想做的事情。
我有这样的算法:
map.OnInfoWindowClickListener(new OnInfoWindowClickListener()){
public void isUserInArea(Marker marker){
float[] distance = new float[2];
//users current location
Location.distanceBetween(currentLocation.getLatitude(),currentLocatiocation.getLongitude(),
marker.getPosition().latitude, marker.getPosition().longitude, distance);
}
如果当前位置在标记区域内,则无法找到,因为我无法抓住标记圈。然而,这是我最接近它的。非常感谢帮助。
为了提供帮助,我在这样的地图上添加了一个圆圈
// adding circle to map
circleOptions = new CircleOptions();
circleOptions.center(new LatLng(locationlist.get(i)
.getLatitude(), locationlist.get(i).getLongitude()));
circleOptions.radius(20);
circleOptions.strokeColor(Color.BLUE);
circleOptions.fillColor(Color.BLUE);
map.addCircle(circleOptions);
//check that all tasks are in circle radius
Marker locationMarker = map.addMarker(markerOp);
locationMarker.showInfoWindow();
答案 0 :(得分:10)
我用这个:
Location.distanceBetween(mMarker.getPosition().latitude,
mMarker.getPosition().longitude, mCircle.getCenter().latitude,
mCircle.getCenter().longitude, distance);
if (distance[0] > mCircle.getRadius()) {
//Do what you need
}else if (distance[0] < mCircle.getRadius()) {
//Do what you need
}
答案 1 :(得分:2)
为什么不使用接近警报?
这是你可以做的:不是画一个圆圈,而是将Marker
放在地图上,如下所示:
map.addMarker(new MarkerOptions()
.title(name)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.gpsmap))
.position(coordinates)
.flat(true)
.rotation(90));
然后向其添加一个接近警报,调用以下方法:
// Proximity alert
private void addProximityAlert(double lat, double lng, int id){
Intent intent = new Intent(PROX_ALERT_INTENT);
PendingIntent proximityIntent = PendingIntent.getBroadcast(this, id, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
locationManager.addProximityAlert(lat, lng, POINT_RADIUS, EXPIRATION, proximityIntent);
}
其中EXPIRATION = -1
(因此接近警报不会过期)和POINT_RADIUS
获取前一个圆的半径值。
然后,您需要向地图添加一个接近警报监听器:
IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
registerReceiver(new ProximityIntentReceiver(), filter);
其中PROX_ALERT_INTENT = "yourProjectPackageName.ProximityActivity";
希望这有帮助
答案 2 :(得分:1)
本教程可以帮助您满足您的要求。 User entry exit proximity alert
一切顺利。