1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function GEO_PolySurfaceKm2(var Points : array of Point) : single ;
// s = (1/2) * abs(sigma(i=1->n,Xi*(Yi+1 - Yi-1)))
// Yn+1 = Y1, Y0 = Yn
i,j : integer;
s : single;
pprev,pcur,pnext : Point ;
begin
result:=-1;
s:=0;
// on suppose que le polygone est fermé,
// c'est à dire que Points[Points.Count-1]=Points[0]
j=Points.count ;
if (j>3) then for i:=1 to j-1 do begin
if i=1 then pprev:=points[j-1] else pprev:=points[i-1];// previous point
pcur:=points[i];// current point
if (i=j-1) then pnext:=points[1]else pnext:=points[i+1];// next point
// surface (lat et lon exprimés en radian)
s:=s+(pcur.lon*cos(pcur.lat)*MINPARRAD)*((pnext.lat-pprev.lat)MINPARRAD);
end;
result:=abs(s/2) / sqr(NMPerKm);
end; |
Partager