见下图:
我想知道的是:
如果您可以使用Google Maps API V2为我提供Java代码示例或者专门针对Android的代码示例
答案 0 :(得分:26)
你基本上需要的是地图上两点之间的距离:
float[] results = new float[1];
Location.distanceBetween(centerLatitude, centerLongitude, testLatitude, testLongitude, results);
float distanceInMeters = results[0];
boolean isWithin10km = distanceInMeters < 10000;
如果您已经有Location
个对象:
Location center;
Location test;
float distanceInMeters = center.distanceTo(test);
boolean isWithin10km = distanceInMeters < 10000;
以下是使用的API的有趣部分: https://developer.android.com/reference/android/location/Location.html
答案 1 :(得分:1)
你是否经历了新的GeoFencing API。它应该对你有所帮助。正常实施需要花费很多时间。 This应该可以帮助您轻松实施。
答案 2 :(得分:1)
请参阅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);
答案 3 :(得分:0)
如果您的意思是“如何创建区域”,那么您想要在地图上绘制区域,您将在地图V2参考doc for the class Circle中找到一个示例。
为了检查圆心和点之间的距离是否大于10 km,我建议使用静态方法Location.distanceBetween(...),因为它可以避免不必要的对象创建。
如果区域是多边形而不是圆形,请参阅here(在答案的最后)以获取代码示例。
答案 4 :(得分:0)
检查:
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];
}
答案 5 :(得分:0)
位置不适合我,这就是我所做的。
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)大(外)或小(内)
答案 6 :(得分:0)
以防万一有人在使用 GoogleMap 并尝试通过 long&lat 应用位置范围。你可以试试google.maps.Circle()
即(mkr 是你的标记)
<块引用>git push --force
答案 7 :(得分:0)
Kotlin 版本
使用实例方法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) }
除了使用上述答案中所述的位置 API 的 distanceTo
或 distanceBetween
外,您还可以使用 Google Map Utility Library 的 SphericalUtil
的 computeDistanceBetween
,但是它需要 LatLng
作为输入。