Výpočet stávající:
//predvypocty (zrychleni)-----
pi180 := pi/180;
xbase:=StrToFl(Geoget_RefX);
ybase:=StrToFl(Geoget_RefY);
xbase180:=xbase*pi180;
ybase180:=ybase*pi180;
//----------------------------
try
while not tab.eof do begin
Inc(i);
fx:=StrToFloat(tab.FieldByName['x']);
fy:=StrToFloat(tab.FieldByName['y']);
//
fd:=PointDistanceEx(xbase,ybase,fx,fy,fu);
//predvypocty (zrychleni)-------------------
fx180 := fx*pi180;
fy180 := fy*pi180;
cfx180 := cos(fx180);
//------------------------------------------
fu2 := RadToDeg(ArcTan2((SIN(fy180 - ybase180) * cfx180) ,
(COS(xbase180) * SIN(fx180) - SIN(xbase180) * cfx180 * COS(fy180 - ybase180))));
if fu2 < 0 then fu2 := 360 + fu2;
//if i<30 then stmp := stmp + FloatToStr(fu) + ',' + FloatToStr(fu2) + '|';
//
GEOGET_DB.AddParamText(':dis',FloatToStr(fd));
GEOGET_DB.AddParamText(':ang',FloatToStr(fu));
GEOGET_DB.AddParamText(':ang2',FloatToStr(fu2));
GEOGET_DB.AddParamText(':id',tab.FieldByName['id']);
GEOGET_DB.ExecSQL(sSql);
tab.Next();
if (i mod 50) = 0 then GeoBusyValue(IntToStr(i));
end;
finally
GeoBusyValue(IntToStr(i));
tab.Free();
end;
hodně záleží kdo a jak zaokrouhluje...
fu2 je výpočet pro Great-circle