View Issue Details

IDProjectCategoryView StatusLast Update
0002932SAS.ПланетаРефакторинг / Refactoringpublic09-09-2023 18:37
Reporterzed Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Product Version151111 
Summary0002932: Сделать универсальную поддержку различных систем координат
DescriptionНемного поразмыслив над тем, как сделана поддержка СК-42, пришёл к мысли, что можно сделать лучше и универсальнее.

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

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

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

Таким образом, можно будет создать список СК и даже подгружать СК динамически из ini, так же, в конвертере координат CoordToStringConverter и парсере CoordFromStringParser полностью абстрагироваться от СК и лишь вызывать нужные методы у интерфейса активной СК.
TagsNo tags attached.

Relationships

related to 0000376 resolvedzed Отображение координат в СК42 
related to 0002576 resolvedzed Add support for MGRS coordinates 
related to 0003871 resolvedzed Система координат ГСК-2011 
has duplicate 0003257 closedzed Import custom prj coordinate system 
related to 0003766 closedzed Координаты в таблице. Работа с местными системами координат. 
related to 0003856 resolvedzed Добавить отображение и ввод UTM координат 

Activities

vdemidov

20-12-2015 19:39

manager   ~0016951

То что ты назваешь IGeodeticCoordSystem уже есть и называется датум - интерфейс IDatum. Когда нибудь будут и не совместимые напрямую c WGS84.

zed

20-12-2015 20:43

manager   ~0016955

У предлагаемого интерфейса будет несколько иная задача. При создании объекта, он будет инициализироваться строкой для proj4 и при помощи этой либы будет выполнять необходимые преобразования координат.

vdemidov

20-12-2015 21:05

manager   ~0016956

Ну, я думал ты это с самого начала так сделаешь, вместо огорода с отдельными функциями geodetic_wgs84_to_sk42 и тд. Но донести в комментариях к тому коммиту не сумел. А вообще я только за, но рассчитывай, что бы экземпляры IGeodeticCoordSystem могли использоваться как IDatum. Я сейчас пилю IConverteProjectionToProjection. Пока он будет делать для одинаковых типов проекций пересчет через Relative координаты, для разных - через LonLat, а в перспективе для разных датумов еще добьавится пересчет самих координат.

Просто сейчас все эти операции пересчета координат расскиданы по куче мест и добавлять туда еще пересчет координат между разными датумами это проще застрелиться. А так оно будет более-менее локализовано в нескольких реализациях этого интерфейса.

zed

20-12-2015 21:21

manager   ~0016958

Что-то я не понимаю что и зачем надо учитывать. Ты хочешь в СК-42 или какие там еще появятся, площадь и прочие расстояния считать?

vdemidov

20-12-2015 22:13

manager   ~0016959

Ну в общем то да. Хотя оно все равно в отдельный код выделено.

Просто есть отдельные сущности: Система координат/Датум (Совокупность геоида и начала системы координат. Возможно стоит выделить понятие геоида в отдельную сущность), Тип проекции (Задает как пересчитывать геодезические координаты в некоторые условные прямоугольные координаты - в сас я их в свое время обозвал Relative и изменяются они от 0 до 1, в геодезии приняты метры, но сути это не меняет), Проекция (задает как из условных прямогуольных координат получить координаты в пикселах), Проекция с нарезкой на тайлы (Одну и ту же проекцию можно по разному на резать на тайлы. Самый простой вариант тайлы размером 128, 256, 512 и тд пикселов).
Эти сущности представлены в программе в той или иной мере и ИМХО не стоит их дублировать без лишней необходимости.

zed

22-12-2015 14:39

manager   ~0016961

Вот как я себе это представляю: https://bitbucket.org/zedxxx/gausskrugerconverter/commits/82df69918aa68fc3e864750cc8843ed076d04ad4

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

Плюс, хочу сделать загрузку ICoordSystemSimple из ini, на форуме один товарищ просил МСК-15, добавлять для всех её наверное будет лишним (мало кому нужна), а вот подгрузить из конфига можно.

vdemidov

22-12-2015 21:22

manager   ~0016962

Именно в таком виде точно переносить не нужно. Как минимум заменить отдельные даблы на TDoublePoint. Еще желательно разделить саму вычислялку и ее метаданные, что бы можно было описания к ним сделать локализируемыми на другие языки.

Issue History

Date Modified Username Field Change
20-12-2015 14:26 zed New Issue
20-12-2015 14:26 zed Relationship added related to 0000376
20-12-2015 14:28 zed Relationship added related to 0002576
20-12-2015 19:39 vdemidov Note Added: 0016951
20-12-2015 20:43 zed Note Added: 0016955
20-12-2015 21:05 vdemidov Note Added: 0016956
20-12-2015 21:21 zed Note Added: 0016958
20-12-2015 22:13 vdemidov Note Added: 0016959
22-12-2015 14:39 zed Note Added: 0016961
22-12-2015 21:22 vdemidov Note Added: 0016962
11-07-2017 14:12 zed Relationship added related to 0003257
11-07-2017 16:35 zed Relationship replaced has duplicate 0003257
18-06-2021 07:35 zed Relationship added related to 0003766
04-07-2023 10:20 zed Relationship added related to 0003856
09-09-2023 18:37 zed Relationship added related to 0003871
08-08-2025 13:25 zed Category Рефакторинг => Рефакторинг / Refactoring