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);
|