View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002932SAS.ПланетаРефакторингpublic20-12-2015 14:2611-07-2017 16:35
Reporterzed 
Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusnewResolutionopen 
PlatformOSOS Version
Product Version151111 
Target VersionFixed in Version 
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.
Attached Files

- Relationships
related to 0000376resolvedzed Отображение координат в СК42 
related to 0002576confirmed mgrs coordinates 
has duplicate 0003257closedzed Import custom prj coordinate system 

-  Notes
(0016951)
vdemidov (manager)
20-12-2015 19:39

То что ты назваешь IGeodeticCoordSystem уже есть и называется датум - интерфейс IDatum. Когда нибудь будут и не совместимые напрямую c WGS84.
(0016955)
zed (manager)
20-12-2015 20:43

У предлагаемого интерфейса будет несколько иная задача. При создании объекта, он будет инициализироваться строкой для proj4 и при помощи этой либы будет выполнять необходимые преобразования координат.
(0016956)
vdemidov (manager)
20-12-2015 21:05

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

Просто сейчас все эти операции пересчета координат расскиданы по куче мест и добавлять туда еще пересчет координат между разными датумами это проще застрелиться. А так оно будет более-менее локализовано в нескольких реализациях этого интерфейса.
(0016958)
zed (manager)
20-12-2015 21:21

Что-то я не понимаю что и зачем надо учитывать. Ты хочешь в СК-42 или какие там еще появятся, площадь и прочие расстояния считать?
(0016959)
vdemidov (manager)
20-12-2015 22:13

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

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

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

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

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

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

- Users who viewed this issue
User List Anonymous (1799x), vdemidov (20x), rus21andrey (1x), bk99 (3x), ramadnio (1x), zed (20x), Tolik (1x), ygorigor (2x), gma (1x), Garl (1x), VMatveev (1x)
Total Views 1850
Last View 01-04-2020 11:59

- 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



Copyright © 2007 - 2020 SAS.Planet Team