以下是一种可能的实现方式:

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);
``
用java 写 经纬度范围是否在 经纬度点的 范围内范围单位km

原文地址: http://www.cveoy.top/t/topic/fEUB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录