如何在 google 地图中创建半径并检查从数据库中获取的标记是否在圆内 (Android)
How to create a radius in google map and check if marker being fetched from the database is inside circle (Android)
我想知道如何在我当前位置创建一个范围为 800 米的半径。以及如何检查我从数据库中获取的标记是否在我的圈子内。
对于这样的任务,我有一个静态助手 class。这是我用来创建圆圈的代码:
public static CircleOptions setMapCircleMeters(LatLng latLng, float meters){
CircleOptions options = null;
try {
options = new CircleOptions();
options.center(latLng);
options.radius(meters);
options.fillColor(Color.argb(70, 80, 80, 80));
options.strokeWidth(2.0f);
}
catch (Exception ex){
Log.e(TAG, " CircleOptions --- " + ex.getMessage());
}
return options;
}
您可以轻松更改 fillColor
或 strokeWidth
的属性以满足您的需要。
现在,要确定某个位置是否在您要检查的距离内:
public static boolean isInRangeMeters(LatLng pt1, LatLng pt2, double meters){
boolean inRange = false;
try{
double distance = getDistanceMeters(pt1, pt2);
inRange = (distance <= meters);
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return inRange;
}
public static double getDistanceMeters(LatLng pt1, LatLng pt2){
double distance = 0d;
try{
double theta = pt1.longitude - pt2.longitude;
double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
+ Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude))
* Math.cos(Math.toRadians(theta));
dist = Math.acos(dist);
dist = Math.toDegrees(dist);
distance = dist * 60 * 1853.1596;
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return distance;
}
我在 Whosebug 上找到了关于如何添加半径的代码片段。
//radius in meters
Circle circle = mMap.addCircle(new CircleOptions().center(new LatLng(latitude, longitude)).radius(800).strokeColor(Color.RED));
circle.setVisible(true);
关于如何检查从数据库中获取的标记是否在半径范围内的问题,我使用
Location.distanceBetween()Google Maps | Calculate Distance Between 2 Locations (Android Tutorials)
然后我添加了一个 if 语句
if (result[0] >= 450 && result[0] <= 800) {
Toast.makeText(this, "distance: "+ result[0] + "\nBus is inside radius", Toast.LENGTH_SHORT).show();
}
我想知道如何在我当前位置创建一个范围为 800 米的半径。以及如何检查我从数据库中获取的标记是否在我的圈子内。
对于这样的任务,我有一个静态助手 class。这是我用来创建圆圈的代码:
public static CircleOptions setMapCircleMeters(LatLng latLng, float meters){
CircleOptions options = null;
try {
options = new CircleOptions();
options.center(latLng);
options.radius(meters);
options.fillColor(Color.argb(70, 80, 80, 80));
options.strokeWidth(2.0f);
}
catch (Exception ex){
Log.e(TAG, " CircleOptions --- " + ex.getMessage());
}
return options;
}
您可以轻松更改 fillColor
或 strokeWidth
的属性以满足您的需要。
现在,要确定某个位置是否在您要检查的距离内:
public static boolean isInRangeMeters(LatLng pt1, LatLng pt2, double meters){
boolean inRange = false;
try{
double distance = getDistanceMeters(pt1, pt2);
inRange = (distance <= meters);
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return inRange;
}
public static double getDistanceMeters(LatLng pt1, LatLng pt2){
double distance = 0d;
try{
double theta = pt1.longitude - pt2.longitude;
double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
+ Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude))
* Math.cos(Math.toRadians(theta));
dist = Math.acos(dist);
dist = Math.toDegrees(dist);
distance = dist * 60 * 1853.1596;
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return distance;
}
我在 Whosebug 上找到了关于如何添加半径的代码片段。
//radius in meters
Circle circle = mMap.addCircle(new CircleOptions().center(new LatLng(latitude, longitude)).radius(800).strokeColor(Color.RED));
circle.setVisible(true);
关于如何检查从数据库中获取的标记是否在半径范围内的问题,我使用
Location.distanceBetween()Google Maps | Calculate Distance Between 2 Locations (Android Tutorials)
然后我添加了一个 if 语句
if (result[0] >= 450 && result[0] <= 800) {
Toast.makeText(this, "distance: "+ result[0] + "\nBus is inside radius", Toast.LENGTH_SHORT).show();
}