Android Google Map如何检查用户是否在标记圈区域

时间:2014-02-28 18:04:12

标签: google-maps distance area marker

我正在使用谷歌地图,并希望能够使用用户当前位置检测用户是否在标记的半径(放置在地图上)。我有用户当前位置坐标(纬度和经度)和标记的坐标,但不知道如何计算用户是否在该区域。下面的图片可能最能描述我想做的事情。

enter image description here

我有这样的算法:

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();

3 个答案:

答案 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

一切顺利。