高德地圖面積計算公式

高德地圖面積計算公式 判斷一個點是否在圈範圍內 java代碼

1,根據不規則圖形的邊界經緯度獲取這個封閉圖形圍成的面積

 

 

高德面積測量網址: https://lbs.amap.com/api/javascript-api/example/mouse-operate-map/measure-area/

高德座標拾取網址:https://lbs.amap.com/console/show/picker


import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 高德計算工具類
 * @author: Adobe Chow
 * @date: 2018/6/7 14:36
 * @Copyright: www.winshang.com Inc. All rights reserved.
 */
public class GaodeUtils {

    public static class Poi{
        private Double lat;
        private Double lng;
        public Poi(Double lng,Double lat){
            this.lat = lat;
            this.lng = lng;
        }

    }

    /**
     * 計算經緯度圍成的實際面積(平方公里)
     * @return
     */
    public static BigDecimal getArea(List<Poi> ring){
        double sJ = 6378137;
        double Hq = 0.017453292519943295;
        double c = sJ *Hq;
        double d = 0;

        if (3 > ring.size()) {
            return new BigDecimal( 0);
        }

        for (int i = 0; i < ring.size() - 1; i ++){
            Poi h = ring.get(i);
            Poi k = ring.get(i + 1);
            double u = h.lng * c * Math.cos(h.lat * Hq);

            double hhh = h.lat * c;
            double v = k.lng * c * Math.cos(k.lat *Hq);
            d = d + (u * k.lat * c - v * hhh);
        }

        Poi g1 = ring.get(ring.size()-1);
        Poi point = ring.get(0);
        double eee = g1.lng * c * Math.cos(g1.lat * Hq);
        double g2 = g1.lat * c;

        double k = point.lng * c * Math.cos(point.lat * Hq);
        d += eee * point.lat * c - k * g2;
        return new BigDecimal( 0.5*Math.abs(d)).divide(new BigDecimal(1000000));
    }





}

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章