安卓谷歌地图如何检查用户是否在标记圆形区域内

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

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个回答

12

我使用以下内容:

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
}

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"; 翻译成中文。

希望这能帮到您。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接