TMapObj

 

Hierarchy        Properties        Methods        Events

Previous Top Next

 

Unit

 MapObj

 

Компонент объекта электронной карты.

Компонент предназначен для доступа к базе данных электронных карт на уровне объектов карты.

База данных электронных карт имеет иерархическую структуру. На нижнем  уровне хранится информация об отдельных объектах карты. Объекты могут  объединяться в группы, слои и листы карт. Объекты карты могут отображаться не только при рисовании электронной карты в целом, но и самостоятельно. Отображение объекта может выполняться с использованием библиотеки условных знаков карты (файл типа "RSC") или с помощью графических примитивов, описанных пользователем.

Каждый объект векторной карты состоит из описания объекта, метрики объекта, семантики объекта. Описание объекта векторной карты содержит информацию о классификационном коде, типе локализации, внутреннем коде. Метрика объекта содержит информацию о его плановом положении. Семантика объекта содержит набор описательных характеристик. Под классификационным кодом объекта понимается его учетный номер, заданный в файле классификатора (*.RSC). Локализация объекта задает его вид: точечный, линейный, площадной, подпись, векторный. Внутренний код объекта – это его учетный номер для функций отображения векторной карты.

Внутренние коды объектов никогда не повторяются. Внутренний код объекта пользователем изменяться не может и определяется в момент создания нового вида объекта в файле классификатора. В общем случае в файле классификаторе можно создать несколько объектов с одинаковым классификационным кодом, но разным типом локализации. Такие объекты будут иметь разные внутренние коды. 

Метрика объекта карты может быть двумерной (2D) и трехмерной (3D). Для работы с третьей координатой (высотой H) объекта электронной карты, необходимо чтобы для него был установлен соответствующий тип метрики, например, IDDOUBLE3 (трехмерная метрика с плавающей запятой двойной точностью). Каждый объект карты может иметь свой тип метрии, т.е. одни объекты могут иметь 3D координаты (X, Y, H), другие нет (только X, Y). Тип метрики объекта можно установит/получить с помощью свойство TMapObj.Kind. Тип метрики может быть установлен как для существующего объекта, так и для нового. Также можно проверить имеет ли объект трехмерную метрику с помощью свойства TMapObj.IsObject3D, которое возвращает значение true, если объект имеет трехмерную метрику.

При работе с третьей координатой необходимо учитывать, что высота может иметь два типа, который задается свойством TMapObj.HeightType: абсолютная высота (HT_ALTITUDE) или относительная (HT_RELATIVE).

Чтобы установить значение высоты в конкретной точке метрики объекта можно воспользоваться функцией TMapMetric.UpdateHeight.

Добавление и изменение трехмерной координаты метрики точки осуществляется теми же функциями, что и для двумерной метрики (TMapMetric.Append, TMapMetric.Insert, TMapMetric.Update). В качестве входного параметра в каждую из этих процедур передается ссылка на экземпляр класса TCompMapPoint (в нем определены координаты точки). Для того, чтобы установить в TCompMapPoint трехмерные координаты точки необходимо воспользоваться функцией TCompMapPoint.SetPoint3D, где в качестве параметров передается X, Y, H.

Для указания типа метрики объекта карты используются следующие константы:

KM_IDDOUBLE2 = $7FFC7FFC - с плавающей запятой двойной точностью

KM_IDDOUBLE3 = $7FF87FF8 - с плавающей запятой двойной точностью трехмерная

KM_IDBAD           = $7FF87FF7 - неизвестный вид

 

До версии 11 могли использоваться следующие идентификаторы

KM_IDFLOAT2     = $7FFD7FFD - с плавающей запятой

KM_IDSHORT3    = $7FFB7FFB - двухбайтовая целочисленная трехмерная

KM_IDLONG3      = $7FFA7FFA - четырехбайтовая целочисленная трехмерная

KM_IDFLOAT3     = $7FF97FF9 - с плавающей запятой трехмерная

 

ВНИМАНИЕ!!!

 1. При работе с трехмерной метрикой объекта необходимо учитывать, что реально высота для объекта может быть и не задана, в этом случае значение высоты принимает значение cERRORHEIGHT = -111111.0. Такое же значение высоты будет при запросе значения высоты в случае, если  для объекта установлена двумерная метрика.

 2.  Вычисление площади (свойство Square) и длины (свойство Length)  объекта, имеющего по долготе протяженность в пределах 6 градусов, выполняется путем пересчета координат к топографической карте с осевым меридианом в центре габаритов объекта (т.е. выполняется с уточнением). Плоские прямоугольные и геодезические координаты объектов зависят от текущих параметров проекции, а вычисления длин и площадей без уточнения значений выполняются по координатам объектов, хранящихся в соответствии с параметрами паспорта карты. Для вычисления площади и длины объекта в проекции карты (без уточнения) необходимо использовать свойства SquareInMap, LengthInMap.