高德 面积计算公式 js版

高德 面积计算公式 js版 

计算一个经纬度围成的实际面积,下面是js方法

var ring = [
[ 116.169465, 39.932670],
[ 116.160260, 39.924492],
[ 116.186138, 39.879817],
[ 116.150625, 39.710019],
[ 116.183198, 39.709920],
[ 116.226950, 39.777616],
[ 116.421078, 39.810771],
[ 116.442621, 39.799892],
[ 116.463478, 39.790066],
[ 116.588276, 39.809551],
[ 116.536091, 39.808859],
[ 116.573856, 39.839643],
[ 116.706380, 39.916740],
[ 116.657285, 39.934545],
[ 116.600293, 39.937770],
[ 116.540039, 39.937968],
[ 116.514805, 39.982375],
[ 116.499935, 40.013710],
[ 116.546520, 40.030443],
[ 116.687668, 40.129961],
[ 116.539697, 40.080659],
[ 116.503390, 40.058474],
[ 116.468800, 40.052578]
];

var area = getArea( ring);

console. info( "面积", area);

/**
*面积算法 zdb
*/
function getArea( ring) {
var sJ = 6378137;
var Hq = 0.017453292519943295;

var arr = [];
for ( var i = 0; i< ring. length; i++){
var poi = {
lng:ring[ i][ 0],
lat:ring[ i][ 1]
};
arr[ i] = poi;
}

ring = arr;

var c = sJ * Hq , d = 0 , e = ring. length;

if ( 3 > e) {
return 0;
}
for ( var g = 0; g < e - 1; g += 1){
var h = ring[ g], k = ring[ g + 1];
var u = h. lng * c * Math. cos( h. lat * Hq);
var h = h. lat * c;
var v = k. lng * c * Math. cos( k. lat * Hq);
var d = d + ( u * k. lat * c - v * h);
}

g = ring[ g];
ring = ring[ 0];
e = g. lng * c * Math. cos( g. lat * Hq);
g = g. lat * c;
k = ring. lng * c * Math. cos( ring. lat * Hq);
d += e * ring. lat * c - k * g;
return 0.5* Math. abs( d)
}



版权声明:本文为zdb1314原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。