package com.sikey.wa04.common.utils;

import cn.hutool.core.util.StrUtil;
import lombok.experimental.UtilityClass;

@UtilityClass
public class LocationUtil {

    /**
     * 拆分位置
     *
     * @param location 位置
     * @return 拆分后的位置
     */
    public String[] splitPoint(String location) {
        if (StrUtil.isBlank(location)) {
            return new String[]{};
        }
        return location.split(",");
    }

    /**
     * Unit is kilometers meters
     *
     * @param lat1
     * @param lng1
     * @param lat2
     * @param lng2
     * @return
     */
    public double haversine(double lat1, double lng1, double lat2, double lng2) {
        double radius = 6371000.0; // 地球半径，单位：米
        // 将角度转换为弧度
        lat1 = Math.toRadians(lat1);
        lng1 = Math.toRadians(lng1);
        lat2 = Math.toRadians(lat2);
        lng2 = Math.toRadians(lng2);

        double theta = lng2 - lng1;
        // 使用球面三角公式计算角距离
        double a = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(theta);
        // 处理计算精度导致的值域越界问题
        a = Math.max(Math.min(a, 1.0), -1.0);
        // 计算结果弧长
        double dist = Math.acos(a);
        // 转换为米
        return (dist * radius);
    }

    /**
     * 点位是否是在国内
     *
     * @param lat
     * @param lon
     * @return
     */
    public boolean isWithinChina(double lat, double lon) {
        return lat >= 18.0 && lat <= 54.0 && lon >= 73.0 && lon <= 135.0;
    }

}
