На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты
АРХИВ ФОРУМА...
здесь вы можете ознакомиться с материалами форума до 08.06.2008

Преобразование координат из WGS-84 в СК-42

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти  
Форум » Настольные приложения » GIS ToolKit
Страницы: 1
RSS
Преобразование координат из WGS-84 в СК-42, Преобразование координат из WGS-84 в СК-42
Добрый день! Подскажите пожалуйста как быть в случае если карта в системе СК-42, а координаты объекта в системе WGS-84 или 90.02 ГЛОНАСС, то как правильно преобразовать координаты объекта для корректной постановки на карту? И наоборот, как получить с карты в системе СК-42 координаты объекта карты в системе WGS-84?

Буду рад получить ответ
Поживем - увидим, доживем - узнаем, выживем - учтем
1. Если Вы знаете, что координаты в WGS-84, то для ЛЮБОЙ проекции карты можно применить
функцию

Код

// Добавить в конец метрики объекта точку19/05/10
// subject - номер подобъекта (если = 0, обрабатывается объект)
// Значение координат задано в радианах на эллипсоиде WGS-84
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapAppendPointGeoWGS84(HOBJ info, double b, double l,
long int subject);


2. Если Вам нужны координаты в WGS-84, то для ЛЮБОЙ проекции карты Вы можете их запросить у объекта:

Код

// Запросить геодезические координаты точки в радианах на эллипсоиде WGS-84
// number - номер точки (начинается с 1)
// subject - номер подобъекта (если = 0, обрабатывается объект)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetGeoPointWGS84(HOBJ info, DOUBLEPOINT * point,   // 17/05/10
long int number, long int subject);



3. Если Вы хотите решить подобную задачу для ЛЮБОЙ другой системы (например, ПЗ-90.02),
то применяете текущие параметры проекции документа.
Смысл параметров документа следующий:

Все функции, работающие с координатами типа Geo и Plane, работают по-умолчанию с параметрами проекции
документа, которые совпадают с параметрами проекции первой открытой карты.
Но в любой момент можно выставить свои параметры (например, для ПЗ-90.02 или WGS-84) и в этот момент
функции типа mapAppendPointGeo, mapGetGeoPoint будут записывать и возвращать координаты в заданной геодезической системе координат, выполняя преобразование к проекции карты и обратно на лету.
После завершения редактирования или чтения координат параметры нужно восстановить, иначе отображение карты будет в заданных параметрах проекции документа. Если нужно параллельно отображать карту в некоторой проекции, а с координатами работать в другой проекции, то карту можно открыть несколько раз (физически данные открываются один раз) и установить каждому представлению (документу) свои параметры.
Управлять параметрами документа можно так:

Код

// Установить общие параметры проекции документа для отображения,       // 21/05/10
// печати и расчета координат
// hmap  - идентификатор открытых данных (документа)
// Структуры MAPREGISTER, DATUMPARAM и ELLIPSOIDPARAM описаны в mapcreat.h
// Устанавливать общие параметры проекции можно для документа
// поддерживающего пересчет геодезических координат (mapIsGeoSupported() != 0)
// После установки общих параметров проекции изображение карты формируется
// в заданной проекции. Векторные карты, имеющие другие параметры
// проекции, трансформируются в процессе отображения.
// Матрицы и растры не трансформируются при отображении и должны иметь
// те же параметры проекции, что и общие параметры документа
// Все операции с координатами (mapPlaneToGeo, mapGeoToPlane,
// mapPlaneToGeoWGS84, mapAppendPointPlane, mapInsertPointPlane,
// mapUpdatePointPlane, mapAppendPointGeo и другие) выполняются
// в системе координат документа, определяемой общими параметрами проекции
// При чтении\записи координат в конкретной карте выполняется пересчет
// из системы координат документа
// Например, при записи координат из WGS84 на карту в СК-42 можно
// установить общие параметры документа, как "Широта/Долгота на WGS-84"
// и выполнить запись координат функцией mapAppendPointGeo, не заботясь
// о дополнительном пересчете координат, или считать координаты функцией
// mapGetGeoPoint (или функцией mapGetGeoPointWGS84, игнорирующей параметры
// документа).
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetDocProjection(HMAP hMap,
MAPREGISTEREX * map,
DATUMPARAM * datum,
ELLIPSOIDPARAM * ellparm);

// Запросить общие параметры проекции документа для отображения,       // 21/05/10
// печати и расчета координат
// hmap  - идентификатор открытых данных (документа)
// Структуры MAPREGISTER, DATUMPARAM и ELLIPSOIDPARAM описаны в mapcreat.h
// Если параметры не устанавливались функцией mapSetMapInfoEx,
// то они соответсвуют параметрам карты, открытой в документе первой
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetDocProjection(HMAP hMap,
MAPREGISTEREX * map,
DATUMPARAM * datum,
ELLIPSOIDPARAM * ellparm);


// Запросить - устанавливались ли общие параметры проекции документа
// для отображения, печати и расчета координат
// hmap  - идентификатор открытых данных (документа)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapIsDocProjection(HMAP hMap);


Есть группа функций по преобразованию координат (описание в mapapi.h или mapapi.inc)
// Преобразование из метров на местности (проекция карты)
// в геодезические координаты в радианах (общеземной эллипсоид WGS84)
// (поддерживается не для всех карт !)
// Наличие высоты повышает точность расчетов;
// функция mapPlaneToGeoWGS84() пытается
// определить высоту из матрицы
// Применение :
// if (mapIsGeoSupported())
// {
// B = Xmet; L = Ymet;
// mapPlaneToGeoWGS84(hMap;B;L);
// }
// hmap - идентификатор открытых данных
// Bx;Ly - преобразуемые координаты
// на входе метры; на выходе - радианы
// H - высота в точке (метры)
// При ошибке возвращает 0

function mapPlaneToGeoWGS84(Map:HMap; var Bx, Ly : double) : integer;

function mapGeoWGS84ToPlane42(Map:HMap; var Bx, Ly : double) : integer;
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)


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