高德 面积计算公式 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)
}