public class GeoJudgeUtils {
/**
* 地球半径(米)
*/
private static final double EARTH_RADIUS = 6378137.0;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 计算是否在圆内
* @param radius 半径(单位/米)
* @param p1 圆心坐标
* @param p2 判断点坐标
* @return: boolean true:在圆内,false:在圆外
* @date: 2019/10/25 10:27
*/
public static boolean isInCircle(double radius, Point p1, Point p2) {
double radLat1 = rad(p1.getLat());
double radLat2 = rad(p2.getLat());
double a = radLat1 - radLat2;
double b = rad(p1.getLng()) - rad(p2.getLng());
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return !(s > radius);
}
/**
* 是否在矩形区域内
* @param lat 测试点经度
* @param lng 测试点纬度
* @param minLat 纬度范围限制1
* @param maxLat 纬度范围限制2
* @param minLng 经度范围限制1
* @param maxLng 经度范围限制2
* @return boolean true:在矩形内, false:在矩形外
* @Title: isInArea
*/
public static boolean isInRectangleArea(double lat, double lng, double minLat,
double maxLat, double minLng, double maxLng) {
if (isInRange(lat, minLat, maxLat)) {
//如果在纬度的范围内
电子围栏进出判断工具类
最新推荐文章于 2023-04-15 10:39:53 发布