欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java判断经纬度是否在某个区域内

程序员文章站 2024-02-14 23:03:28
...

只需要获取对角经纬度即可

 /**
     * 判断是否在区域内
     * @param latitue
     * @param longitude
     * @param areaLatitude1
     * @param areaLatitude2
     * @param areaLongitude1
     * @param areaLongitude2
     * @return
     */
    public static boolean isInArea(double latitue, double longitude, double areaLatitude1, double areaLatitude2, double areaLongitude1, double areaLongitude2) {
        if (isInRange(latitue, areaLatitude1, areaLatitude2)) {//如果在纬度的范围内
            if (areaLongitude1 * areaLongitude2 > 0) {//如果都在东半球或者都在西半球
                if (isInRange(longitude, areaLongitude1, areaLongitude2)) {
                    return true;
                } else {
                    return false;
                }
            } else {//如果一个在东半球,一个在西半球
                if (Math.abs(areaLongitude1) + Math.abs(areaLongitude2) < 180) {//如果跨越0度经线在半圆的范围内
                    if (isInRange(longitude, areaLongitude1, areaLongitude2)) {
                        return true;
                    } else {
                        return false;
                    }
                } else {//如果跨越180度经线在半圆范围内
                    double left = Math.max(areaLongitude1, areaLongitude2);//东半球的经度范围left-180
                    double right = Math.min(areaLongitude1, areaLongitude2);//西半球的经度范围right-(-180)
                    if (isInRange(longitude, left, 180) || isInRange(longitude, right, - 180)){
                        return true;
                    }else {
                        return false;
                    }
                }
            }
        } else {
            return false;
        }
    }

    public static boolean isInRange(double point, double left, double right) {
        if (point >= Math.min(left, right) && point <= Math.max(left, right)) {
            return true;
        } else {
            return false;
        }
    }

 

相关标签: 工具类