请参阅此插图:
我想知道的是:
- 如何在给定纬度和经度以及距离(10 公里)时创建区域(圆)
- 如何检查(计算)纬度和经度是在区域内还是区域外
我更希望您能提供 Java 代码示例或专门针对带有 Google Maps API V2 的 Android 代码示例
请参阅此插图:
我想知道的是:
我更希望您能提供 Java 代码示例或专门针对带有 Google Maps API V2 的 Android 代码示例
检查这个:
private boolean isMarkerOutsideCircle(LatLng centerLatLng, LatLng draggedLatLng, double radius) {
float[] distances = new float[1];
Location.distanceBetween(centerLatLng.latitude,
centerLatLng.longitude,
draggedLatLng.latitude,
draggedLatLng.longitude, distances);
return radius < distances[0];
}
您是否了解过新的GeoFencing API。它应该可以帮助你。正常的实施需要很多时间。这应该可以帮助您轻松实现它。
见https://developer.android.com/reference/android/location/Location.html
Location areaOfIinterest = new Location;
Location currentPosition = new Location;
areaOfIinterest.setLatitude(aoiLat);
areaOfIinterest.setLongitude(aoiLong);
currentPosition.setLatitude(myLat);
currentPosition.setLongitude(myLong);
float dist = areaOfIinterest.distanceTo(currentPosition);
return (dist < 10000);
以防万一是否有人在使用GoogleMap并尝试通过 long&lat 应用位置范围。你可以试试google.maps.Circle()
即(mkr 是你的标记)
let yourcircle = new google.maps.Circle({ strokeColor: "#0079C3", strokeOpacity: .8, strokeWeight: 2, fillColor: "#0079C3", fillOpacity: 0.2, map: this.map, center: {'lat':your latitude, 'lng':your longitude}, radius: Math.sqrt(your distance range) * 1000, });
如果您的意思是“如何创建区域”,即您想在地图上绘制该区域,您将在地图 V2 参考文档中找到 Circle 类的示例。
为了检查圆心和您的点之间的距离是否大于 10 公里,我建议使用静态方法Location.distanceBetween(...)因为它避免了不必要的对象创建。
另请参见此处(在答案的最后)以获取代码示例,以防该区域是多边形而不是圆形。
位置对我不起作用,这就是我所做的。
import 'dart:math' show cos, sqrt, asin;
double calculateDistanceBetweenTwoLatLongsInKm(
double lat1, double lon1, double lat2, double lon2) {
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
return 12742 * asin(sqrt(a));
}
然后只需检查该距离是否大于(外部)或小于(内部)以 KM 为单位的半径
科特林版
使用实例方法distanceTo
,类似这样的扩展函数形式:
fun Location.checkIsInBound(radius: Double,center:Location):Boolean
= this.distanceTo(center)<radius
用法示例:
fusedLocationClient.lastLocation
.addOnSuccessListener { location : Location? ->
val isWithin2km = location?.checkIsInBound(2000.0,center) }
除了使用 Location APIdistanceTo
或distanceBetween
如上述答案中所述,您还可以使用Google Map Utility Library的SphericalUtil
's computeDistanceBetween
,但它需要LatLng
作为输入。
您基本上需要的是地图上两点之间的距离:
如果您已经有
Location
对象:这是所用 API 的有趣部分:https : //developer.android.com/reference/android/location/Location.html