На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Видимость слоев карты

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 След.
RSS
Видимость слоев карты, Управление отображением слоев карты
 
Не работает. Слои пользовательской карты остаются на месте.
HSELECT hSelect = mapCreateSiteSelectContext(mainMap, userMap);
mapGetSiteViewSelect(mainMap, userMap, hSelect);
mapSelectLayer(hSelect, -1, 0);
mapSetSiteViewSelect(mainMap, userMap, hSelect);//Установить состав отображаемых объектов. Использую эту ф-ию, т.к. работаю с пользовательской картой
//перерисовываю основную карту *.map
mapDeleteSelectContext(hSelect);
 
Так как работаете через АПИ - чем карту отрисовываете? Может в этот момент передается специальный hselect?
 
Все операции (отображение, скроллинг, обработка событий мыши) с основной картой *.map выполняю с помощью указателя на объект класса QDMapView *map.
Перерисовываю основную карту так : map->Repaint(); (вместе с ней перерисовывается и пользовательская карта).
Добавляю пользовательскую карту к основной так :
userMap = mapOpenSiteForMap(mainMap , fileName.toStdString().c_str() , GENERIC_WRITE);//получаю HSITE userMap для дальнейшего использования. HMAP mainMap у меня уже есть.
     fileName - полный путь к файлу пользовательской карты
QDMapSites *mapSites = map->VarMapSites;
QDMapSite *currentMapSite;
mapSites->Append(const_cast<char*>(fileName.toStdString().c_str()));
currentMapSite = mapSites->GetSitesForFileName(const_cast<char*>(fileName.toStdString().c_str()));
currentMapSite->SetSiteVisible(true);
map->Repaint();

Рисую разноцветные линии в разных слоях на пользовательской карте:
int currentLayer;//слой, в котором будет нарисована линия
QRgb currentLineColor;//цвет, которым будет нарисована линия
QPair<double, double> coord //координаты первой точки, для 2-й точки x2=x1 , y2=y1+5000
HOBJ userLine = mapCreateSiteObject(mainMap, userMap);
mapRegisterDrawObject(userLine, currentLayer, LOCAL_LINE);
IMGLINE parm;
parm.Thick = PIX2MKM(5);
parm.Color = RGB(qRed(currentLineColor),qGreen(currentLineColor),qBlue(currentLineColor));
mapAppendDraw(userLine, IMG_LINE, reinterpret_cast<char*>(&parm));
mapAppendPointPlane(userLine, coord.first, coord.second);
mapAppendPointPlane(userLine, coord.first, coord.second+5000);
mapCommitWithPlace(userLine);
mapFreeObject(userLine);
map->Repaint();//перерисовываю карту

Удаляю слои пользовательской карты
HSELECT hSelect = mapCreateSiteSelectContext(mainMap, userMap);
mapGetSiteViewSelect(mainMap, userMap, hSelect);
mapSelectLayer(hSelect, -1, 0);
mapSetSiteViewSelect(mainMap, userMap, hSelect);
map->Repaint();//перерисовываю карту
mapDeleteSelectContext(hSelect);
 
Цитата
Не работает. Слои пользовательской карты остаются на месте.
Попробуйте вот так

// Удаляю слои пользовательской карты
Цитата
HSELECT hSelect = mapCreateSiteSelectContext(mainMap, userMap);
mapGetSiteViewSelect(mainMap, userMap, hSelect);
mapClearSelectContext(hSelect);  // очистка мусора который уже выделен в контексте карты (с предыдущих сеансов)
mapSelectLayer(hSelect, -1, 0);
mapSetSiteViewSelect(mainMap, userMap, hSelect);
map->Repaint();//перерисовываю карту
mapDeleteSelectContext(hSelect);

 
Изменено: KFF - 25.01.2018 11:15:32
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
mapClearSelectContext(hSelect); - не помогает.
 
Если Вы для отображения используете компонент QDMapView, то настраивать нужно QDMapSelect.
 
Оказалось все просто:

QDMapSelectDialog selectDlg;
selectDlg.SetMapView(map);
selectDlg.Execute(map->VarViewSelect , false);
Изменено: Vasay Pupkin - 25.01.2018 16:04:09
 
Но все еще не понимаю как убрать слой ч/з QDMapSelect.
 
Здравствуйте.
Попробуйте использовать следующий код:

Код
  QDMapSelect *qselect = new QDMapSelect(ui.DMapView1->GetMapViewAcces());
  qselect->SetSiteNumber(0);  // номер пользовательской карты (для базовой 0)
  qselect->SetLayers(3, false); // отключить слой номер 3
  ui.DMapView1->SetViewSelect(qselect);
  ui.DMapView1->SetSelecting(true);


При использовании в примере карты Podolsk.map, из стандартной поставки, отключается слой "РАСТИТЕЛЬНОСТЬ (ЗАЛИВКА), ТАКЫР"
Изменено: Андрей Коржилов - 25.01.2018 16:30:47
 
Спасибо, получилось.

QDMapSites *mapSites = map->VarMapSites;
QDMapSite *currentMapSite;
currentMapSite = mapSites->GetSitesForFileName(const_cast<char*>(fileName.toStdString().c_str()));

QDMapSelect *qselect = new QDMapSelect(map->GetMapViewAcces()));
qselect->SetSiteNumber(currentMapSite->GetNumber());  // номер пользовательской карты (для базовой 0)
qselect->SetLayers(3, false); // отключить слой номер 3
map->SetViewSelect(qselect);
map->SetSelecting(true);
map->Repaint();
Изменено: Vasay Pupkin - 25.01.2018 17:15:36
Страницы: Пред. 1 2 3 След.
Читают тему (гостей: 1)



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

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности