SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0002932 | SAS.Планета | Рефакторинг | public | 20-12-2015 14:26 | 09-09-2023 18:37 |
|
Reporter | zed | |
Assigned To | | |
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | new | Resolution | open | |
Platform | | OS | | OS Version | |
Product Version | 151111 | |
Target Version | | Fixed in Version | | |
|
Summary | 0002932: Сделать универсальную поддержку различных систем координат |
Description | Немного поразмыслив над тем, как сделана поддержка СК-42, пришёл к мысли, что можно сделать лучше и универсальнее.
1. Сделать базовый интерфейс "система координат" (ICoordSystem), с параметрами:
- id данной СК
- отображаемое имя
2. Сделать интерфейс "геодезическая СК" IGeodeticCoordSystem = interface(ICoordSystem) с методами:
- конвертирование lonlat в/из wgs84
- парсинг/сереализация lonlat в строку
3. Сделать интерфейс "прямоугольная СК" IProjectedCoordSystem = interface(ICoordSystem) с методами:
- конвертирование XY в lonlat (wgs84) и обратно
- парсинг/сереализация XY в строку
Так же, тут надо держать ссылку на геодезическую СК (IGeodeticCoordSystem) с которой работает данная СК.
Таким образом, можно будет создать список СК и даже подгружать СК динамически из ini, так же, в конвертере координат CoordToStringConverter и парсере CoordFromStringParser полностью абстрагироваться от СК и лишь вызывать нужные методы у интерфейса активной СК.
|
Steps To Reproduce | |
Additional Information | |
Tags | No tags attached. |
Relationships | related to | 0000376 | resolved | zed | Отображение координат в СК42 | related to | 0002576 | resolved | zed | Add support for MGRS coordinates | related to | 0003871 | resolved | zed | Система координат ГСК-2011 | has duplicate | 0003257 | closed | zed | Import custom prj coordinate system | related to | 0003766 | closed | zed | Координаты в таблице. Работа с местными системами координат. | related to | 0003856 | resolved | zed | Добавить отображение и ввод UTM координат |
|
Attached Files | |
|
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 |
Notes |
|
|
То что ты назваешь IGeodeticCoordSystem уже есть и называется датум - интерфейс IDatum. Когда нибудь будут и не совместимые напрямую c WGS84. |
|
|
(0016955)
|
zed
|
20-12-2015 20:43
|
|
У предлагаемого интерфейса будет несколько иная задача. При создании объекта, он будет инициализироваться строкой для proj4 и при помощи этой либы будет выполнять необходимые преобразования координат. |
|
|
|
Ну, я думал ты это с самого начала так сделаешь, вместо огорода с отдельными функциями geodetic_wgs84_to_sk42 и тд. Но донести в комментариях к тому коммиту не сумел. А вообще я только за, но рассчитывай, что бы экземпляры IGeodeticCoordSystem могли использоваться как IDatum. Я сейчас пилю IConverteProjectionToProjection. Пока он будет делать для одинаковых типов проекций пересчет через Relative координаты, для разных - через LonLat, а в перспективе для разных датумов еще добьавится пересчет самих координат.
Просто сейчас все эти операции пересчета координат расскиданы по куче мест и добавлять туда еще пересчет координат между разными датумами это проще застрелиться. А так оно будет более-менее локализовано в нескольких реализациях этого интерфейса. |
|
|
(0016958)
|
zed
|
20-12-2015 21:21
|
|
Что-то я не понимаю что и зачем надо учитывать. Ты хочешь в СК-42 или какие там еще появятся, площадь и прочие расстояния считать? |
|
|
|
Ну в общем то да. Хотя оно все равно в отдельный код выделено.
Просто есть отдельные сущности: Система координат/Датум (Совокупность геоида и начала системы координат. Возможно стоит выделить понятие геоида в отдельную сущность), Тип проекции (Задает как пересчитывать геодезические координаты в некоторые условные прямоугольные координаты - в сас я их в свое время обозвал Relative и изменяются они от 0 до 1, в геодезии приняты метры, но сути это не меняет), Проекция (задает как из условных прямогуольных координат получить координаты в пикселах), Проекция с нарезкой на тайлы (Одну и ту же проекцию можно по разному на резать на тайлы. Самый простой вариант тайлы размером 128, 256, 512 и тд пикселов).
Эти сущности представлены в программе в той или иной мере и ИМХО не стоит их дублировать без лишней необходимости. |
|
|
(0016961)
|
zed
|
22-12-2015 14:39
|
|
|
|
|
Именно в таком виде точно переносить не нужно. Как минимум заменить отдельные даблы на TDoublePoint. Еще желательно разделить саму вычислялку и ее метаданные, что бы можно было описания к ним сделать локализируемыми на другие языки. |
|