高德地图面积计算公式 判断一个点是否在圈范围内 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));
}
}