'Name: great-cirlces.ave 'Function: Calculate distance and initial bearing between points basing on a sphere 'Author: Maxim Dubinin ' sim@gis-lab.info 'Created: 31.05.2006 'Last Update: 02.11.2006 'Notes: This script is also used in Argos-tools for distance calculation 'pnt1, pnt2 - точки между которыми вычисляются расстояния 'pi - число pi, rad - радиус сферы (Земли), num - количество знаков после запятой pi = 3.14159265358979 rad = 6372795 'получение координат точек в радианах lat1 = pnt1.getY*pi/180 lat2 = pnt2.getY*pi/180 long1 = pnt1.getX*pi/180 long2 = pnt2.getX*pi/180 'косинусы и синусы широт и разниц долгот cl1 = lat1.cos cl2 = lat2.cos sl1 = lat1.sin sl2 = lat2.sin delta = long2 - long1 cdelta = delta.cos sdelta = delta.sin 'вычисления длины большого круга p1 = (cl2*sdelta)^2 p2 = ((cl1*sl2) - (sl1*cl2*cdelta))^2 p3 = (p1 + p2)^0.5 p4 = sl1*sl2 p5 = cl1*cl2*cdelta p6 = p4 + p5 p7 = p3/p6 anglerad = (p7.atan).SetFormatPrecision (num) dist = anglerad*rad 'вычисление начального азимута x = (cl1*sl2) - (sl1*cl2*cdelta) y = sdelta*cl2 z = (-y/x).ATan.AsDegrees if (x < 0) then z = z+180 end z = -(z + 180 mod 360 - 180).AsRadians anglerad2 = z - ((2*pi)*((z/(2*pi)).floor)) angledeg = (anglerad2*180)/pi 'возврат значений длины большого круга и начального азимута distlist = {dist, angledeg} return distlist