Добрый всем день!
Совсем недавно обнаружил ошибку в модуле расширения “Координатные сетки” (GratGrid.avx), поставляемым с AV.
Эта ошибка связана с тем, что когда отображается градусная сетка, уже на расстоянии 0.5 градуса от осевого меридиана ошибка по широте составляла 4 секунды (~120 м!)
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Оказывается, эта ошибка связана с неверным кодом скрипта на основе которого сделано это расширение (GratLay.ave, в расширении это скрипт GratGrids.LayoutGraticule Creat).
Чтобы избавиться от этой ошибки, необходимо заменить в скрипте 4 строки
….
point5=Point.Make(xMin+((xMax-xMin)/2),yMin)
point6=Point.Make(xMax,yMin+((yMax-yMin)/2))
point7=Point.Make(xMin+((xMax-xMin)/2),yMax)
point8=Point.Make(xMin,yMin+((yMax-yMin)/2))
…
на
point5=Point.Make((xMin+(xMax-xMin)/2),yMin)
point6=Point.Make(xMax,(yMin+(yMax-yMin)/2))
point7=Point.Make((xMin+(xMax-xMin)/2),yMax)
point8=Point.Make(xMin,(yMin+(yMax-yMin)/2))
здесь просто нарушен порядок скобок и не верно вычислялись точки на серединах сторон описывающего прямоугольника. В принципе эти точки не сильно влияют на дальнейший расчет, просто он может идти дольше по времени.
ГЛАВНАЯ ОШИБКА вот в чем
Посмотрите код:
latList = {}
for each lat in latStart .. latEnd by latInterval
aLine = Line.Make( lonStart@lat, lonEnd@lat )
prjLine = aLine.ReturnProjected( thisPrj ).ReturnClipped( xyRect )
if ( prjLine <> nil ) then
latList = latList.Add( {lat, prjLine} )
end
end
Здесь при построении линии широты используется линия, построенная по ДВУМ!!!</F