Создание слоя вручную
Для работы со слоями необходимо использовать библиотеку mvMapLib, добавив в список используемых пространств имен:
using mvMapLib;
Для создания слоя необходимо создать специальный объект mvMapLib.mvStringArray для указания списка атрибутов, которыми будут обладать все объекты слоя (такие как идентификатор, название, описание и т.д.):
mvStringArray attributesArray = new mvStringArray(); //создание объекта mvStringArray
attributesArray.count = 1; //количество атрибутов объекта
attributesArray.setElem(0, "id"); //установка названия атрибута в нулевой позиции
mvLayer layer = axMapLIb1.CreateLayer(«Название слоя», attributesArray);//создание слоя с именем «Название слоя» и списком атрибутов attributesArray
После создания слоя можно указать, как будут отображаться объекты на карте: как будут отрисовываться края (mvPenObject), как будут заполняться (mvBrushObject), какой шрифт и какой символ из этого шрифта будут использоваться для обозначения объекта на карте:
mvPenObject pen = new mvPenObject();
mvBrushObject brush = new mvBrushObject();
mvFontObject font = new mvFontObject();
mvSymbolObject symbol = new mvSymbolObject();
pen.Color = 0x333333;
pen.ctype = 2;
pen.width = 2;
brush.bgcolor = 0xffff00;
brush.fgcolor = 0x00ffff;
brush.style = 0;
brush.hatch = 2;
font.Color = 0x00ff00;
font.fontname = "Map Symbols";
font.framecolor = 0xff0000;
font.size = 8;
symbol.shape = 35;
layer.uniform = true; //все объекты на карте будут показываться единообразно
layer.SetUniformStyle(pen, brush, symbol, font); //установить стиль единообразного отображения объектов
Ссылку на созданный слой можно получить, используя имя слоя следующим образом:
mvLayer layer = axMapLIb1.getLayer("Название слоя");
Теперь слой создан, и можно создавать на нем объекты, изменять их координаты, удалять объекты и т.д. Покажем, как можно создать объект на слое. Для начала нужно указать wkt объекта, то есть текстовое определение того, какой тип у объекта, а также координаты объекта. Например:
String wkt = "POLYGON((386327.172604717 6183258.75528863,386076.005705584 6184428.33104838,388495.228600778 6184530.78991765,391199.501380878
6183964.91481094,389843.070097997 6181312.55634965,386688.123113193 6181789.60787037,386327.172604717 6183258.75528863))";
Здесь указано, что создаваемый объект будет являться полигоном, и в скобках указаны координаты каждого угла полигонального объекта.
Затем необходимо создать объект mvMapLib.mvStringArray для указания атрибутов создаваемого объекта. Например:
mvStringArray objectAttributes = new mvStringArray();
objectAttributes.count = 1; objectAttributes.setElem(0, "1");
Так как при создании слоя мы указали, что у каждого объекта будет один атрибут – «id», соответственно у создаваемого сейчас объекта будет один атрибут – «id», со значение «1». Так как объект создается не где-нибудь, а на конкретном слое, нам нужна ссылка на слой, где мы хотим разместить объект:
mvLayer layer = axMapLIb1.getLayer("Название слоя");
Либо, если мы знаем порядковый номер слоя, можем получить его через его номер:
mvLayer layer = axMapLIb1.getLayerByNum(1);
Номера слоев назначаются картой в порядке добавления слоев в нее. Создаем объект на слое:
mvVectorObject newObjectInLayer = ll.CreateObject();
При создании нового объекта на слое, мы сразу же получаем ссылку на нее, таким образом, можем установить соответствующие атрибуты и координаты:
newObjectInLayer.setWKT(wkt);
newObjectInLayer.SetAttributes(objectAttributes);
На всякий случай, для того, чтобы созданный объект действительно отобразился на слое, можно обновить визуализацию карты:
axMapLIb1.mapRepaint();
Вот что мы примерно должны увидеть, если все сделали правильно:
Здесь новый созданный объект обозначен желтым цветом с черной каймой.
Если слой нам больше не нужен, его можно выгрузить из карты, то есть удалить. Память на него больше затрачиваться не будет:
layer.deleteLayer();
Слои подложки
Слои подложки – слои, которые загружаются из файлов с расширением vmp. Для загрузки этих слоев, необходимо указать путь к файлу, а также имя атрибута идентификатора для объектов слоев.
String filePath = "C:somemap.vmp";
axMapLIb1.LoadMap(filePath, “id”);
Доступ к слоям подложки осуществляется также, как и к остальным слоям, – через название слоя либо по индексу:
for (int i = 0; i < axMapLIb1.LayersCount; i++)
{
mvLayer ll =axMapLIb1.getLayerByNum(i);
}
Свежие комментарии