到目前为止,我可以借助此tutorial向地图添加单一地理围栏。实际上,我在地图点击事件中向地图添加标记,允许我在触摸时添加多个标记。我不想为我添加的所有标记添加地理围栏。我已尝试对上述教程的特定方法进行少量更改
ArrayList<LatLng> locs= new ArrayList<LatLng>();
// Create a marker for the geofence creation
private void markerForGeofence(LatLng latLng) {
Log.i(TAG, "markerForGeofence(" + latLng + ")");
String title = latLng.latitude + ", " + latLng.longitude;
// Define marker options
MarkerOptions markerOptions = new MarkerOptions()
.position(latLng)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE))
.title(title);
if (map != null) {
// Remove last geoFenceMarker
// if (geoFenceMarker != null)
// geoFenceMarker.remove();
geoFenceMarker = map.addMarker(markerOptions);
gfmarkr.add(geoFenceMarker);
}
}
...
// Start Geofence creation process
private void startGeofence() {
Log.i(TAG, "startGeofence()");
if (geoFenceMarker != null) {
for (int i = 0; i < gfmarkr.size(); i++) {
Geofence geofence = createGeofence(locs.get(i), GEOFENCE_RADIUS);
GeofencingRequest geofenceRequest = createGeofenceRequest(geofence);
addGeofence(geofenceRequest);
}
} else {
Log.e(TAG, "Geofence marker is null");
}
}
简而言之,添加多个地理围栏的方法是什么。任何解决方案都会有很大的帮助。三江源。
答案 0 :(得分:1)
它解决了。我将locs.get(i)
传递给负责创建特定地理围栏的所有方法,并将其用作位置的参考点。我也删除了陈述
if (geoFenceLimits != null)
geoFenceLimits.remove();
来自drawGeofence()
方法。
答案 1 :(得分:0)
当您获得位置更新时,如果您所有地理围栏的ArrayList超过100,请删除所有受监控的地理围栏,然后使用harvesine公式计算100个最近的地理围栏:
public static final double R = 6372.8; // In kilometers
public static double haversine(double lat1, double lon1, double lat2, double lon2) {
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.asin(Math.sqrt(a));
return R * c;
}
这将为您提供两个位置之间的距离。之后,您可以将该距离与地理围栏区域半径进行比较,以了解是否在该区域内。 注意:如果半径为米,则此距离将以千米为单位,然后将半径方法结果乘以1000,以便将其转换为米。
答案 2 :(得分:0)
这是一个很好的问题。我经历过这种情况,我不知道添加多个地理围栏的方法。这段视频Android Development Tutorial - Geo Fencing multiple location with GeoFire and Firebase帮助我解决了很多问题。