Ответить | Перейти к списку сообщений | Предыдущее сообщение | Следующее сообщение | Предыдущее в ветке | Следующее в ветке

Cavers Mailing List     № 7005

RE:

Автор: Roman
Дата: 10 Mar 2005



-----Original Message-----
From: [] On Behalf Of
gremlin
Sent: Wednesday, March 09, 2005 11:12 PM
To: CML
Subject: [CML #7004] Re:

Липченко Юрий wrote:

> Кто может подсказать, как перевести георгафические координаты
> в прямоугольные?

Именно алгоритм? Увы, не знаю...

> Может, где-то есть соответствующая программа (не под ДОС)?


Вот процедура вычисляющая прямоугольные координаты объектов и возвращающая в
качестве результата расстояние между ними.

CREATE FUNCTION dbo.fn_baseCalcDistance (
@LonPt1 gps, -- долгота 1 объекта в мин.
@AltPt1 gps, -- широта 1 объекта в мин.
@LonPt2 gps, -- долгота 2 объекта в мин.
@AltPt2 gps ) -- широта 2 объекта в мин.
RETURNS float

-- процедура вычисляет расстояние между объектами. Входные параметры в
минутах градуса, результат в метрах
AS
BEGIN
declare @x1 as float
declare @y1 as float
declare @z1 as float
declare @x2 as float
declare @y2 as float
declare @z2 as float
DECLARE @r as float
SET @r = 6400000

DECLARE @result as float

set @x1 = @r * cos( @LonPt1 * pi() / 60 / 180 ) * cos( @AltPt1 *
pi()/ 60 / 180 )
set @y1 = @r * sin( @LonPt1 * pi() / 60 / 180 ) * cos( @AltPt1 *
pi()/ 60 / 180 )
set @z1 = @r * sin( @AltPt1 * pi() / 60 / 180 )

set @x2 = @r * cos( @LonPt2 * pi() / 60 / 180 ) * cos( @AltPt2 *
pi()/ 60 / 180 )
set @y2 = @r * sin( @LonPt2 * pi() / 60 / 180 ) * cos( @AltPt2 *
pi()/ 60 / 180 )
set @z2 = @r * sin( @AltPt2 * pi() / 60 / 180 )

declare @chord as float
set @chord = SQRT((@x1 - @x2 )*( @x1 - @x2 ) + ( @y1 - @y2 )*( @y1
- @y2 ) + ( @z1 - @z2 )*( @z1 - @z2 ))

set @result = 2* @r * asin( @chord / 2 / @r )

return @result
END

Если диаметр Земли задать в километрах, то результат соответственно будет в
километрах.
Если убрать все делители "/60" - то входные параметры в градусах.

Ответить | Перейти к списку сообщений | Предыдущее сообщение | Следующее сообщение | Предыдущее в ветке | Следующее в ветке

CML archive browser created by Pavel Gulchouck