View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002276SAS.Планета[All Projects] Хотелкаpublic27-11-2013 13:0628-11-2013 06:15
Reporterzed 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilityN/A
StatusresolvedResolutionfixed 
PlatformOSOS Version
Product Version131111 
Target Version140303Fixed in Version140303 
Summary0002276: Добавить альтернативный алгоритм расчёта расстояний
DescriptionАлгоритм Винсента (обратный), который сейчас используется в SAS, не всегда может рассчитать расстояние между двумя точками. И вот тому яркий пример: http://sasgis.org/forum/viewtopic.php?f=2&t=2211&start=10#p33545

Оказывается (внезапно), что есть ещё один популярный алгоритм, лишённый таких недостатков, да к тому же ещё и более быстрый (по заверениям). Этот алгоритм настолько втёрся в доверие, что его даже решили включить в состав proj4 в следующем релизе (4.9.xx).

Алгоритм уже реализован на нескольких популярных языках (к сожалению, Delphi среди них нету), в том числе и на Си: http://geographiclib.sourceforge.net/html/C/ но на счастье, там довольно простое API и с использованием либы проблем быть не должно.
Additional InformationТеоретическое обоснование алгоритма: Algorithms for geodesics by Karney (2012)
TagsNo tags attached.
Attached Fileszip file icon geodesic.zip [^] (14,575 bytes) 28-11-2013 06:11

- Relationships

-  Notes
(0013339)
vdemidov (manager)
27-11-2013 13:13

Может прост дождемся реализации в proj4 и просто заюзаем его, раз уж все равно пользуемся этой dll?
(0013340)
zed (manager)
27-11-2013 13:16

Да вот мне загорелось и хочется попробовать прямо сейчас :) Поэтому сделаю пока отдельной либой, а как обновится proj4, можно будет перейти и на него.

Алгоритм Винсента выбрасывать по-любому не буду и он будет использоваться в случае если либа будет недоступна.
(0013341)
vdemidov (manager)
27-11-2013 14:08

Ну, тогда может стоит передавать в датум уже готовые алгортимы вычисления площади и расстояния, а не создавать в конструкторе. Тогда фабрика датумов сможет управлять этим всем хозяйством.
(0013343)
zed (manager)
27-11-2013 20:57

Пока что сделал в лоб.

И столкнулся с проблемой в dll: там объявляется переменная double NaN (назначение аналогично дельфийской константе NAN, которая объявлена как NAN = 0.0/0.0), которой при инициализации присваивается значение NaN = sqrt(-1.0) и на этой вот строчке либа вылетает с ошибкой floating point operation.
(0013346)
zed (manager)
28-11-2013 06:14
edited on: 28-11-2013 06:14

Сделал так:

> *(long long*)&NaN = 0x7ff8000000000000;

там внутри либы этот NaN используется только для возвращения наружу неопределённого результата (при каких-либо ошибках), так что проблем не будет.


- Users who viewed this issue
User List Anonymous (1387x)
Total Views 1387
Last View 25-05-2020 09:03

- Issue History
Date Modified Username Field Change
27-11-2013 13:06 zed New Issue
27-11-2013 13:06 zed Status new => assigned
27-11-2013 13:06 zed Assigned To => zed
27-11-2013 13:07 zed Description Updated View Revisions
27-11-2013 13:13 vdemidov Note Added: 0013339
27-11-2013 13:16 zed Note Added: 0013340
27-11-2013 14:08 vdemidov Note Added: 0013341
27-11-2013 20:57 zed Note Added: 0013343
28-11-2013 06:11 zed File Added: geodesic.zip
28-11-2013 06:14 zed Note Added: 0013346
28-11-2013 06:14 zed Note Edited: 0013346 View Revisions
28-11-2013 06:15 zed Status assigned => resolved
28-11-2013 06:15 zed Fixed in Version => 140303
28-11-2013 06:15 zed Resolution open => fixed



Copyright © 2007 - 2020 SAS.Planet Team