Здравствуйте уважаемые сотрудники КБ Панорама.
Стоит задача отображения координат курсора в 2х системах координат:
1) Исходная СК карты (Nord Sahara 1959)
2) Пересчет в WGS 84
Если карта в СК WGS 84 то должно выполняться и обратный пересчет координат курсора в Nord Sahara 1959.
При этом объекты на карте пересчитываться не должны.
Координаты курсора получаю с MapScreen.
Пробовал использовать mapSetDocProjection с датумом перехода из Nord Sahara в WGS 84. Для обратного перехода пробовал использовать тот же датум с обратными знаками
Как в первом, так и во втором случи получаю не корректный пересчёт координат.
Привожу пример кода (NS->WGS):
Подскажите пожалуйста правильный алгоритм пересчёта координат.
Заранее спасибо.
Стоит задача отображения координат курсора в 2х системах координат:
1) Исходная СК карты (Nord Sahara 1959)
2) Пересчет в WGS 84
Если карта в СК WGS 84 то должно выполняться и обратный пересчет координат курсора в Nord Sahara 1959.
При этом объекты на карте пересчитываться не должны.
Координаты курсора получаю с MapScreen.
Пробовал использовать mapSetDocProjection с датумом перехода из Nord Sahara в WGS 84. Для обратного перехода пробовал использовать тот же датум с обратными знаками
Как в первом, так и во втором случи получаю не корректный пересчёт координат.
Привожу пример кода (NS->WGS):
Код |
---|
TMAPREGISTEREX ParentMapReg; TELLIPSOIDPARAM Ellipsoid; TDATUMPARAM Datum; TLISTREGISTER List; ZeroMemory(&Datum, sizeof(Datum)); ZeroMemory(&ParentMapReg, sizeof(ParentMapReg)); ZeroMemory(&Ellipsoid, sizeof(Ellipsoid)); ZeroMemory(&List, sizeof(List)); // Получаю MAPREGISTEREX открытой карты mapGetMapInfoEx(MapScreen1->MapHandle, 1, ParentMapReg, List); TMAPREGISTEREX NewMapReg; ZeroMemory(&NewMapReg, sizeof(NewMapReg)); NewMapReg.Length = sizeof(NewMapReg) ; mapRegisterFromMapType(MT_TOPOLOCAL, NewMapReg); mapGetEllipsoidParameters(EK_CLARKE_80, &Ellipsoid); NewMapReg.Scale = ParentMapReg.Scale; NewMapReg.EllipsoideKind = EK_CLARKE_80; NewMapReg.AxisMeridian = ParentMapReg.AxisMeridian; NewMapReg.MaterialProjection = MP_UTM;//ParentMapReg.MaterialProjection; NewMapReg.FalseEasting = ParentMapReg.FalseEasting; NewMapReg.ScaleFactor = ParentMapReg.ScaleFactor; // Заполняем датум Datum.DX = -209.362198; Datum.DY = -87.816200; Datum.DZ = 404.619830; Datum.RX = -0.00461215; Datum.RY = -3.47842207; Datum.RZ = -0.58048472; Datum.M = -0.0000014547220; // -1.4547220 * 1E-6 Datum.Count = 7; // Применяю параметры проекции mapSetDocProjection(MapScreen1->MapHandle, &NewMapReg, &Datum, &Ellipsoid); |
Подскажите пожалуйста правильный алгоритм пересчёта координат.
Заранее спасибо.