SASGIS - SAS.Планета
View Issue Details
0002932SAS.ПланетаРефакторингpublic20-12-2015 14:2609-09-2023 18:37
zed 
 
normalminorhave not tried
newopen 
151111 
 
0002932: Сделать универсальную поддержку различных систем координат
Немного поразмыслив над тем, как сделана поддержка СК-42, пришёл к мысли, что можно сделать лучше и универсальнее.

1. Сделать базовый интерфейс "система координат" (ICoordSystem), с параметрами:
- id данной СК
- отображаемое имя

2. Сделать интерфейс "геодезическая СК" IGeodeticCoordSystem = interface(ICoordSystem) с методами:
- конвертирование lonlat в/из wgs84
- парсинг/сереализация lonlat в строку

3. Сделать интерфейс "прямоугольная СК" IProjectedCoordSystem = interface(ICoordSystem) с методами:
- конвертирование XY в lonlat (wgs84) и обратно
- парсинг/сереализация XY в строку
Так же, тут надо держать ссылку на геодезическую СК (IGeodeticCoordSystem) с которой работает данная СК.

Таким образом, можно будет создать список СК и даже подгружать СК динамически из ini, так же, в конвертере координат CoordToStringConverter и парсере CoordFromStringParser полностью абстрагироваться от СК и лишь вызывать нужные методы у интерфейса активной СК.
No tags attached.
related to 0000376resolved zed Отображение координат в СК42 
related to 0002576resolved zed Add support for MGRS coordinates 
related to 0003871resolved zed Система координат ГСК-2011 
has duplicate 0003257closed zed Import custom prj coordinate system 
related to 0003766closed zed Координаты в таблице. Работа с местными системами координат. 
related to 0003856resolved zed Добавить отображение и ввод UTM координат 
Issue History
20-12-2015 14:26zedNew Issue
20-12-2015 14:26zedRelationship addedrelated to 0000376
20-12-2015 14:28zedRelationship addedrelated to 0002576
20-12-2015 19:39vdemidovNote Added: 0016951
20-12-2015 20:43zedNote Added: 0016955
20-12-2015 21:05vdemidovNote Added: 0016956
20-12-2015 21:21zedNote Added: 0016958
20-12-2015 22:13vdemidovNote Added: 0016959
22-12-2015 14:39zedNote Added: 0016961
22-12-2015 21:22vdemidovNote Added: 0016962
11-07-2017 14:12zedRelationship addedrelated to 0003257
11-07-2017 16:35zedRelationship replacedhas duplicate 0003257
18-06-2021 07:35zedRelationship addedrelated to 0003766
04-07-2023 10:20zedRelationship addedrelated to 0003856
09-09-2023 18:37zedRelationship addedrelated to 0003871

Notes
(0016951)
vdemidov   
20-12-2015 19:39   
То что ты назваешь IGeodeticCoordSystem уже есть и называется датум - интерфейс IDatum. Когда нибудь будут и не совместимые напрямую c WGS84.
(0016955)
zed   
20-12-2015 20:43   
У предлагаемого интерфейса будет несколько иная задача. При создании объекта, он будет инициализироваться строкой для proj4 и при помощи этой либы будет выполнять необходимые преобразования координат.
(0016956)
vdemidov   
20-12-2015 21:05   
Ну, я думал ты это с самого начала так сделаешь, вместо огорода с отдельными функциями geodetic_wgs84_to_sk42 и тд. Но донести в комментариях к тому коммиту не сумел. А вообще я только за, но рассчитывай, что бы экземпляры IGeodeticCoordSystem могли использоваться как IDatum. Я сейчас пилю IConverteProjectionToProjection. Пока он будет делать для одинаковых типов проекций пересчет через Relative координаты, для разных - через LonLat, а в перспективе для разных датумов еще добьавится пересчет самих координат.

Просто сейчас все эти операции пересчета координат расскиданы по куче мест и добавлять туда еще пересчет координат между разными датумами это проще застрелиться. А так оно будет более-менее локализовано в нескольких реализациях этого интерфейса.
(0016958)
zed   
20-12-2015 21:21   
Что-то я не понимаю что и зачем надо учитывать. Ты хочешь в СК-42 или какие там еще появятся, площадь и прочие расстояния считать?
(0016959)
vdemidov   
20-12-2015 22:13   
Ну в общем то да. Хотя оно все равно в отдельный код выделено.

Просто есть отдельные сущности: Система координат/Датум (Совокупность геоида и начала системы координат. Возможно стоит выделить понятие геоида в отдельную сущность), Тип проекции (Задает как пересчитывать геодезические координаты в некоторые условные прямоугольные координаты - в сас я их в свое время обозвал Relative и изменяются они от 0 до 1, в геодезии приняты метры, но сути это не меняет), Проекция (задает как из условных прямогуольных координат получить координаты в пикселах), Проекция с нарезкой на тайлы (Одну и ту же проекцию можно по разному на резать на тайлы. Самый простой вариант тайлы размером 128, 256, 512 и тд пикселов).
Эти сущности представлены в программе в той или иной мере и ИМХО не стоит их дублировать без лишней необходимости.
(0016961)
zed   
22-12-2015 14:39   
Вот как я себе это представляю: https://bitbucket.org/zedxxx/gausskrugerconverter/commits/82df69918aa68fc3e864750cc8843ed076d04ad4

Переносить в SAS?

Плюс, хочу сделать загрузку ICoordSystemSimple из ini, на форуме один товарищ просил МСК-15, добавлять для всех её наверное будет лишним (мало кому нужна), а вот подгрузить из конфига можно.
(0016962)
vdemidov   
22-12-2015 21:22   
Именно в таком виде точно переносить не нужно. Как минимум заменить отдельные даблы на TDoublePoint. Еще желательно разделить саму вычислялку и ее метаданные, что бы можно было описания к ним сделать локализируемыми на другие языки.