Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Доброго времени суток

Исполняю код

declare @g geography,@h geography
set @g=geography::STGeomFromText('POINT(59.942235 30.467350)', 4326);
set @h=geography::STGeomFromText('POINT(59.943237 30.463963)', 4326);

declare @x1 float,@y1 float,@x2 float,@y2 float
select
	@x1=radians(59.942235),@y1=radians(30.467350),
	@x2=radians(59.943237),@y2=radians(30.463963)
	
select 6372795.0*acos(sin(@x1)*sin(@x2) + cos(@x1)*cos(@x2)*cos(@y1-@y2)) a,@h.STDistance(@g) b


Получаю результат:


ab
219.143433334096 387.617561197204


Я бы решил что я ошибся в написании формулы (величина "a"), но
вот например не только я так веду расчеты.

Что я деляю не так?
13 ноя 12, 17:03    [13466794]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
Glory
Member

Откуда:
Сообщений: 104751
и какому SRID соответствует расчет по этой формуле ?
13 ноя 12, 17:25    [13466958]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
VladimirKr
Доброго времени суток

Исполняю код

declare @g geography,@h geography
set @g=geography::STGeomFromText('POINT(59.942235 30.467350)', 4326);
set @h=geography::STGeomFromText('POINT(59.943237 30.463963)', 4326);

declare @x1 float,@y1 float,@x2 float,@y2 float
select
	@x1=radians(59.942235),@y1=radians(30.467350),
	@x2=radians(59.943237),@y2=radians(30.463963)
	
select 6372795.0*acos(sin(@x1)*sin(@x2) + cos(@x1)*cos(@x2)*cos(@y1-@y2)) a,@h.STDistance(@g) b


Получаю результат:


ab
219.143433334096 387.617561197204


Я бы решил что я ошибся в написании формулы (величина "a"), но
вот например не только я так веду расчеты.

Что я деляю не так?
В каких единицах результат получился? Может, в милях?
Небольшой люфт можно, наверно, объяснить различиями между эллипсоидной и сферической моделями Земли?

Но это всё мои догадки, однако. Может, и глупость сморозил

Примечание
Методы, вызываемые для типа данных geography и вычисляющие площадь или расстояние, будут возвращать различные результаты в зависимости от идентификатора SRID экземпляра. Дополнительные сведения об идентификаторах SRID
см. в разделе идентификаторы пространственных ссылок (SRID).
STDistance (географический тип данных)
13 ноя 12, 17:35    [13467033]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Glory
и какому SRID соответствует расчет по этой формуле ?

Если касаемо величины "a", то на сфере с радиусом 6372795. Какой это srid - я не знаю. Эта формула есть в википедии, да и на этом форуме неоднократно мелькала. Величина "b" - SRID 4326, что прекрасно видно из кода.
Земля, конечно эллипсоид, не не на столько же...
iap
В каких единицах результат получился? Может, в милях?
Небольшой люфт можно, наверно, объяснить различиями между эллипсоидной и сферической моделями Земли?

Но это всё мои догадки, однако. Может, и глупость сморозил


Тогда уж скорее в футах...

Однако, нигде в документации не нашел единиц измерения расстоянния, и решил, что скорее всего значит в метрах(СИ).

Проблема актуальна...
13 ноя 12, 18:40    [13467399]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
Glory
Member

Откуда:
Сообщений: 104751
VladimirKr
Если касаемо величины "a", то на сфере с радиусом 6372795. Какой это srid - я не знаю. Эта формула есть в википедии, да и на этом форуме неоднократно мелькала. Величина "b" - SRID 4326, что прекрасно видно из кода.
Земля, конечно эллипсоид, не не на столько же...

Ну тогда может вы узнаете, по какой формуле считает SRID 4326 ?
13 ноя 12, 18:58    [13467523]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Glory
VladimirKr
Если касаемо величины "a", то на сфере с радиусом 6372795. Какой это srid - я не знаю. Эта формула есть в википедии, да и на этом форуме неоднократно мелькала. Величина "b" - SRID 4326, что прекрасно видно из кода.
Земля, конечно эллипсоид, не не на столько же...

Ну тогда может вы узнаете, по какой формуле считает SRID 4326 ?


Я попробую уточнить вопрос.

Я не понимаю, почему вычисление расстояния на сфере с радиусом 6372795 и результат вызова geography.STDistance с теми же координатами дают настолько разные результаты в моей версии SQL:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30 Copyright (c) Microsoft Corporation Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Вопрос: может ли кто-нибудь объяснить это расхождение или указать на мою ошибку?

Кстати, мне абсолютно фиолетово, по каким мудреным формулам считает STDistance для SRID 4326 . Я всего лишь хотел узнать, насколько этот замечательный метод быстрее первой формулы.
13 ноя 12, 19:26    [13467648]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
Glory
Member

Откуда:
Сообщений: 104751
VladimirKr
Я не понимаю, почему вычисление расстояния на сфере с радиусом 6372795 и результат вызова geography.STDistance с теми же координатами дают настолько разные результаты в моей версии SQL:

Почему вы считаете, что два разных вычисления должны давать одинаковый результат ?


VladimirKr
Кстати, мне абсолютно фиолетово, по каким мудреным формулам считает STDistance для SRID 4326 . Я всего лишь хотел узнать, насколько этот замечательный метод быстрее первой формулы.

Тогда почему вы спрашиваете про различие в результатах ?
13 ноя 12, 19:47    [13467752]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Glory
Почему вы считаете, что два разных вычисления должны давать одинаковый результат ?


Мда... Два тела движутся навстречу друг к другу со скоростями v1 и v2. Скорость сближения какая? v1+v2 или (v1+v2)/(1+v1*v2/c^2). Для небольших скоростей (например, v1=M и v2=M) две разные формулы дадут примерно один и тот же результат. Первая формула чуть проще и не требует знаний СТО. А различия меньше 1/(9*10^10)

VladimirKr
... Я всего лишь хотел узнать, насколько этот замечательный метод быстрее первой формулы.



Glory

.... Тогда почему вы спрашиваете про различие в результатах ?

Просто по пути узнал, что две разные методики в моем исполнении различаются на 76%.

Уважаемый Glory, если вы видите мою ошибку, может Вас не затруднит все же указать конкретное место?
13 ноя 12, 20:14    [13467871]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
Glory
Member

Откуда:
Сообщений: 104751
VladimirKr
Уважаемый Glory, если вы видите мою ошибку, может Вас не затруднит все же указать конкретное место?

Ошибка в том, что вы думаете, что все во всем мире должны считать расстояние по вашей формуле.
14 ноя 12, 00:27    [13468700]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
Glory
Ошибка в том, что вы думаете, что все во всем мире должны считать расстояние по вашей формуле.

Интересная подмена тезиса. :)
Я разве где-нибудь это утверждал?
Это риторический вопрос. Не утруждайтесь ответом.

Вопрос остается.
Еще раз.
Я считаю, что расчет методом расстояний на сфере и geography.STDistance должны давать результаты с различием менее 2%. Однако, вижу недопустимое расхождение. Предполагаю, что где-то допустил ошибку. Ошибка в формуле "а" возможна, но я не могу ее рассмотреть. Кроме того, приведенная выше ссылка дает сходный результат. Наверно я неправильно пользуюсь типом geography. Прошу помощи у человека, который часто сталкивался срешением подобных задач. Уверен, что на данном форуме есть такие люди. И, возможно, специалист одним взглядом заметит ошибку.
14 ноя 12, 09:31    [13469313]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
AnaceH
Member

Откуда:
Сообщений: 109
VladimirKr,

declare @g geography,@h geography
set @g=geography::STGeomFromText('POINT(30.467350 59.942235 )', 4326);
set @h=geography::STGeomFromText('POINT(30.463963 59.943237 )', 4326);

declare @x1 float,@y1 float,@x2 float,@y2 float
select
	@x1=radians(59.942235),@y1=radians(30.467350),
	@x2=radians(59.943237),@y2=radians(30.463963)
	
select 6372795.0*acos(sin(@x1)*sin(@x2) + cos(@x1)*cos(@x2)*cos(@y1-@y2)) a,@h.STDistance(@g) b

ab
219.143433334096 219.783232149339

Читайте чем отличается
geography::STGeomFromText('POINT(_ _)', 4326);
от
geography::Point(_ _, 4326)
14 ноя 12, 11:00    [13469847]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
AnaceH,

Огромное спасибо!
14 ноя 12, 11:05    [13469880]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
Имеет место быть баг функции STGeomFromTexт (X и Y поменяны местами). Если владеете английским, много дискусий на эту тему на сайте MS.
Или поменяйте местами координаты или дайте их в явном виде:
declare @g geography,@h geography
set @g=geography::Point(59.942235,30.467350,4326);
set @h=geography::Point(59.943237,30.463963, 4326);

declare @x1 float,@y1 float,@x2 float,@y2 float
select
	@x1=radians(59.942235),@y1=radians(30.467350),
	@x2=radians(59.943237),@y2=radians(30.463963)
	
	DECLARE @Lat1 float=@x1
	DECLARE @Lat2 float=@x2,@Lon1 float=@y1,@Lon2 float=@y2
select 6372795.0*acos(sin(@x1)*sin(@x2) + cos(@x1)*cos(@x2)*cos(@y1-@y2)) a,@h.STDistance(@g)


Получаем:
аб
219.327130474969219.783232149339

О причинаx разницы тут уже писали - модель Земли есть геоид, а в формуле как шар.
14 ноя 12, 11:11    [13469936]     Ответить | Цитировать Сообщить модератору
 Re: Непонятка с geography.STDistance  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1062
dalex1973,

Спасибо!
14 ноя 12, 11:24    [13470043]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить