На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

DElphi xe5: WGS -> ГСК 2011

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
DElphi xe5: WGS -> ГСК 2011
 
Как можно преобразовать координаты в WGS в ГСК 2011  ?

--------------------------------------------------------------------------------------------------

Параметры эллипсоида я умею брать

EK_GCK_2011_EE    = 46;    // ГСК-2011 Общеземной эллипсоид (6378136.5, 298.2564151)   // 26/03/2014
k:=mapGetEllipsoidParameters(EK_GCK_2011_EE, @ellipsoid1);

но остальные парамерты - не знаю как задать

для проекции пользователя
mapCreateUserSystemParameters(@mapreg1, @datum1, @ellipsoid1);
 
эти параметры возвращает функция mapGetParametersForEPSG
Скрытый текст
 
а какой EPSG у ГСК 2011 ?
 
Да, прошу прощения. Не принял во внимание, что речь о ГСК-2011. В БД EPSG ее нет.

Оставшиеся параметры Вы можете получить следующим образом.

MAPREGISTEREX - запросить с помощью функции mapRegisterFromMapType (описана в mapapi.h).
Значение флага "Тип карты" для ГСК-2011 (см. mapcreate.h):
GCK_2011     = 21,     // Система координат ГСК-2011, требует осевой меридиан
Скрытый текст

поля структуры DATUMPARAM определены для ГСК-2011 в mapcreate.h в виде констант:
Скрытый текст


Осевой меридиан в структуре MAPREGISTEREX необходимо установить вручную.
 
А как  можно проверить правильность преобразования ?

eLat:=37;
eLon:=50;

результат
шир  37,0000012478732
долг 50,0000024713752

эти цифры правлиьные ?


------------------------------------------------------------------------

var
 k: Integer;

 myCS_1:  THANDLE;  

 mapreg: TMAPREGISTEREX;
 datum: TDATUMPARAM;
 ellipsoid: TELLIPSOIDPARAM;  
 
 x,y : Double;
 
begin

 k:=mapRegisterFromMapType (MT_GCK_2011, mapreg);


 FillChar(datum,SizeOf(datum),0);
 
 datum.DX:=DX_GCK2011_WGS84;      // Сдвиги по осям в метрах
 datum.DY:=DY_GCK2011_WGS84;
 datum.DZ:=DZ_GCK2011_WGS84;
 datum.RX:=RX_GCK2011_WGS84;      // Угловые поправки в секундах
 datum.RY:=RY_GCK2011_WGS84;
 datum.RZ:=RZ_GCK2011_WGS84;
 datum.M :=M_GCK2011_WGS84;       // double;      // Поправка масштаба


 k:=mapGetEllipsoidParameters(EK_GCK_2011_EE, @ellipsoid);
 

 myCS_1 := mapCreateUserSystemParameters(@mapreg, @datum, @ellipsoid);
   

 x:=DegToRad(aLat);
 y:=DegToRad(aLon);  
                     
 mapGeoWGS84ToUserGeo(myCS_1, &x, &y);

   
 aLat_out:=RadToDeg(x);
 aLon_out:=RadToDeg(y);  

 // Освободить ресурсы пользовательской системы координат
 mapDeleteUserSystemParameters(myCS_1);
         
end;
 
Проверить правильность преобразования можно только имея координаты точки в обоих системах, которым вы доверяете.
 
Цитата
Алексей Азаренко написал:
А как  можно проверить правильность преобразования ?

Вариантов два:
1.
Цитата
Andrey Gheleznyakov написал:
Проверить правильность преобразования можно только имея координаты точки в обоих системах, которым вы доверяете.
2.
Взять калькулятор и посчитать самостоятельно.


Однако, обращаю Ваше внимание на то, что параметры пересчета, приведенные в Приказе Росреестра от 23.03.2016 N П/0134 "Об утверждении геометрических и физических числовых геодезических параметров государственной геодезической системы координат 2011 года", противоречат сами себе.
Поскольку масштабный и все угловые коэффициенты пересчета из ПЗ-90.02 к WGS равны нулю, то для соблюдения условия однозначности пересчета "WGS -> ГСК-2011" и "WGS - > ПЗ 90.02 -> ГСК-2011" и обратно масштабный и все угловые коэффициенты пересчета к ГСК-2011 из ПЗ-90.02 и WGS должны совпадать. Однако в указанном приказе приведены параметры трансформирования к ГСК-2011 для WGS и ПЗ-90.02 отличающиеся по оси Z и масштабу.

В наших константах, как Вы сами можете видеть, содержаться угловые значения параметров трансформирования WGS к ГСК-2011, соответствующие коэффициентам трансформирования из ПЗ-90.02.
Если Вы желаете полностью соблюсти Приказ Росреестра, то можете задать эти коэффициенты самостоятельно (см. угловые поправки в секундах - RX_GCK2011_WGS84, RY_GCK2011_WGS84, RZ_GCK2011_WGS84 и поправку масштаба - M_GCK2011_WGS84).
Но тогда Вы получите расхождение при пересчете в другие СК.

При этом расхождение в результатах трансформирования к ГСК-2011 из WGS с текущими коэффициентами или с приведенными в Приказе составляет единицы сантиметров.
Скрытый текст

Мизерную, но все же погрешность можно получить из-за преобразований градусов к радианам и обратно.
Код
// Для сравнения (Delphi) ShowMessage('Значение Пи: ' + FloatToStr(Pi) + #10#13 + 'DegToRad(180):' + FloatToStr(DegToRad(180)));
 
И, если будете конвертировать прямоугольные координаты, не забывайте устанавливать осевой меридиан.
 
Спасибо !
 
Подскажите, а как сделать обратное преобразование - ГСК 2011 -> WGS  ?

как я понимаю, нужны коэффициенты похожие...
-------------------------------
datum.DX:=DX_GCK2011_WGS84; // Сдвиги по осям в метрах
datum.DY:=DY_GCK2011_WGS84;
datum.DZ:=DZ_GCK2011_WGS84;
datum.RX:=RX_GCK2011_WGS84; // Угловые поправки в секундах
datum.RY:=RY_GCK2011_WGS84;
datum.RZ:=RZ_GCK2011_WGS84;
datum.M :=M_GCK2011_WGS84; // double; // Поправка масштаба
-------------------------------


но я не смог их найти... увы...
Страницы: 1 2 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности