高德地圖面積計算公式 判斷一個點是否在圈範圍內 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));
}
}