用java 写 经纬度范围是否在 经纬度点的 范围内范围单位km
以下是一种可能的实现方式:
import java.util.*;
public class GeoUtils {
private static final double EARTH_RADIUS = 6371; // 地球半径,单位km
/**
* 计算两个经纬度点之间的距离
* @param lat1 点1的纬度,单位度
* @param lng1 点1的经度,单位度
* @param lat2 点2的纬度,单位度
* @param lng2 点2的经度,单位度
* @return 两点之间的距离,单位km
*/
public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = radLat1 - radLat2;
double b = Math.toRadians(lng1) - Math.toRadians(lng2);
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)));
return s * EARTH_RADIUS;
}
/**
* 判断给定的经纬度点是否在指定的经纬度范围内
* @param lat 给定经度点的纬度,单位度
* @param lng 给定经度点的经度,单位度
* @param rangeLat1 范围的纬度1,单位度
* @param rangeLng1 范围的经度1,单位度
* @param rangeLat2 范围的纬度2,单位度
* @param rangeLng2 范围的经度2,单位度
* @return 是否在范围内
*/
public static boolean isInRange(double lat, double lng, double rangeLat1, double rangeLng1, double rangeLat2, double rangeLng2) {
double rangeDistance = getDistance(rangeLat1, rangeLng1, rangeLat2, rangeLng2);
double pointDistance1 = getDistance(lat, lng, rangeLat1, rangeLng1);
double pointDistance2 = getDistance(lat, lng, rangeLat2, rangeLng2);
double rangeDistance1 = Math.sqrt(Math.pow(rangeDistance, 2) + Math.pow(pointDistance1, 2));
double rangeDistance2 = Math.sqrt(Math.pow(rangeDistance, 2) + Math.pow(pointDistance2, 2));
return pointDistance1 <= rangeDistance1 && pointDistance2 <= rangeDistance2;
}
}
使用示例:
double lat = ...; // 给定经度点的纬度,单位度
double lng = ...; // 给定经度点的经度,单位度
double rangeLat1 = ...; // 范围的纬度1,单位度
double rangeLng1 = ...; // 范围的经度1,单位度
double rangeLat2 = ...; // 范围的纬度2,单位度
double rangeLng2 = ...; // 范围的经度2,单位度
boolean isInRange = GeoUtils.isInRange(lat, lng, rangeLat1, rangeLng1, rangeLat2, rangeLng2);
``
原文地址: http://www.cveoy.top/t/topic/fEUB 著作权归作者所有。请勿转载和采集!