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

использование функции mapViewSelect

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 4 5 6 След.
RSS
использование функции mapViewSelect, прикладная задача для ГИС Панорама12
 
При использовании selSaveSelect / selRestoreSelect следует учитывать тот факт они работают с HMAP, то есть с районом целиком.
Восстановление параметров выборки выполняется только в отношении тех карт, которые были в составе района работ на момент сохранения.
Временные карты при этом игнорируются. Для вновь добавленных карт в район работ условия не будут применены.
Порядок открытия карт также должен быть соблюден - основная карта должна остаться той же, что и была при сохранении.
 
  Здравствуйте. Карта одна и та же. Она одна и является основной соответственно. Конечно же selSaveSelect  я делаю перед закрытием карты, а selRestoreSelect после открытия Панорамы. В итоге все равно контекст условий поиска/отображения не сохраняется?
 
Цитата
Дарья Лунченко написал:
 Здравствуйте. Подскажите пожалуйста в интерактивной программе ГИС Панорама , в основном классе задачи по нажатию на кнопку, происходит запуск моего диалога, т.е выполнение команды происходит без обработчика. В процессе работы я формирую контекст условий поиска/отображения HSELECT и потом выделяю объекты на карте функцией mapViewSelect(HMap, hwndMain, &WindowPoint, hSelect, color, PP_PLANE); , объекты выделяются, но при прокрутке и масштабировании выделение стирается, как этого избежать? Создавать отдельный обработчик и в OnPaint отрисовывать их? Но хотелось бы чтобы после закрытия моей панели объекты были все еще выделены.  
Если Вы пишете прикладную задачу в ГИС Панорама, то применяете PANAPI и класс TPanWindow.
В нем есть метод -
Код
  // Установить выделение объектов на карте
  // По обобщенным условиям поиска/выделения объектов (TotalSeek)
  // select - признак выделения объектов (0/1)
  // color  - цвет выделения,если 0 - умалчиваемый

  void SetViewSelect(int select,COLORREF color = 0);
Вы можете установить условия выделения объектов на карте функциями типа:
Код
  // Установить условия поиска объектов для пользовательской карты
  // hMap   - идентификатор открытой основной карты
  // hSite  - идентификатор открытой пользовательской карты
  // (для фоновой (основной) карты hSite = hMap)
  // hSelect - идентификатор контекста поиска,
  //          который содержит устанавливаемые условия поиска
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetSiteSeekSelect(HMAP hMap, HSITE hSite, HSELECT hSelect);

 // Установить правило обобщенного поиска по картам
 // hMap     - идентификатор открытой карты,
 // number   - номер карты, по которой выполняется поиск,
 // если number == -1, поиск будет выполняться по всем картам
 // (0 - карта местности, 1...n - пользовательские карты)

_MAPIMP void _MAPAPI mapSetTotalSeekMapRule(HMAP hMap, long int number);

А затем вызвать метод
Код
SetViewSelect(1, color);
 
Цитата
Если Вы пишете прикладную задачу в ГИС Панорама, то применяете PANAPI и класс TPanWindow.
В нем есть метод -
Добрый день. С выделением проблем уже нет. Помогло, то что вы подсказывали ранее. В данный момент проблема в том, что мне надо запомнить условия отображения/поиска объектов в момент закрытия Панорамы, и восстановить его после открытия Панорамы. Что не удается сделать с помощью функций selSaveSelect / selRestoreSelect?
 
Цитата
Дарья Лунченко написал:
 Здравствуйте. Карта одна и та же. Она одна и является основной соответственно. Конечно же selSaveSelect  я делаю перед закрытием карты, а selRestoreSelect после открытия Панорамы. В итоге все равно контекст условий поиска/отображения не сохраняется?
Условия поиска объектов не сохраняются между сеансами специально.
Было много проблем с пользователями, которые забывали об установленных ранее условиях поиска (например, по номеру объекта), выбирали некоторый слой и не могли его найти.

Для сохранения сложных условий есть именованные Макеты условий поиска.
Их можно заранее набрать и установить их отображение (список имен) в меню поиска или выбирать при необходимости в закладке Макеты.
Можно сохранять условия поиска в свой файл макетов (в формате XML) и восстанавливать.
Код
  // Сформировать запись для сохранения условий поиска в формате XML  // 23/03/16
  // select - контекст условий поиска
  // name   - имя модели (условий поиска) или ноль
  // Возвращает идентификатор записи формата XML в памяти
  // Для получения указателя на запись применяются функция mapGetSelectRecordXMLPoint
  // Для удаления записи в памяти применяются функция mapFreeSelectRecordXML
  // При ошибке возвращает ноль

_MAPIMP HANDLE _MAPAPI mapGetSelectRecordXML(HSELECT select, const WCHAR * name);  // 12/06/17 

  // Получить указатель на запись XML для сохранения условий поиска в формате XML  // 23/03/16
  // select - контекст условий поиска
  // record - идентификатор записи формата XML в памяти
  // size   - поле для получения длины записи
  // name   - имя модели (условий поиска) или ноль
  // Возвращает указатель на запись XML в кодировке UTF-8
  // Для удаления записи в памяти применяются функция mapFreeSelectRecordXML
  // При ошибке возвращает ноль

_MAPIMP const char * _MAPAPI mapGetSelectRecordXMLPoint(HSELECT select, HANDLE record, long int * size);

  // Удалить запись в памяти, созданную функцией mapGetSelectRecordXML   // 23/03/16
  // select - контекст условий поиска
  // record - идентификатор записи формата XML в памяти

_MAPIMP void _MAPAPI mapFreeSelectRecordXML(HSELECT select, HANDLE record);
                                            
  // Заполнить условия поиска из записи XML                  // 23/03/16
  // select - контекст условий поиска
  // buffer - адрес записи
  // length - длина записи в памяти
  // При ошибке возвращает ноль
 
_MAPIMP long int _MAPAPI mapPutSelectRecordXML(HSELECT select, const char * buffer,  long int length);
Функции возвращают текст в кодировке UTF-8, который содержит узел <model> .... <\model>
с условиями поиска. Вы можете его сохранить в свой XML.
Код
ПРИМЕР ЗАПИСИ МОДЕЛИ УСЛОВИЙ ОТБОРА ОБЪЕКТОВ

<model name="DialogsState">
 <sheets>
  <item>N-37-001</item>
  <item>N-37-002</item>
  <item>N-37-003</item>
 </sheets>
 <locals>line,polygon,dot,vector,title,mixed</locals>
 <segments>Vegetation,Relief,Soil,Hydrography</segments>
 <objects mode="0">S0031410000,L00323100001,S0051112000,S00511412001,V0051111000,P0053221000,T00910400001,C009217500023</objects>
 <keys>123456,987654</keys>
 <semantics condition="or">
  <item>9,equal,Ногинск</item>
  <item>4,moreequal,199.5</item>
  <item>55,pass</item>
  <item>33,any</item>
 </semantics>
 <measures condition="and">
  <item type="length">MORE,50.5,LESSEQUAL,100</item>
  <item type="square">MOREEQUAL,1999.5</item>
  <item type="height">EQUAL,77</item>
 </measures>
</model>
 
Здравствуйте! Подскажите пожалуйста, в чем может быть проблема? Устанавливаю фильтр объектов с помощью диалога selSetViewStaff, после, при переборе объектов функцией mapTotalSeekObject попадают не только объекты, выбранные ранее в диалоге, а и другие(отображение которых отключено), код ниже:
Код
   HSELECT hSelect1 = mapCreateMapSelectContext(HMap);
   HSELECT hSelect2 = mapCreateMapSelectContext(HMap);
   mapGetSiteViewSelect(HMap, hSite, hSelect1);

   if (mapCheckLocal(hSelect1, LOCAL_SQUARE) == 0)
      return 0;


   // Создать пустой объект для обработки выделенных
   HOBJ hObj = mapCreateObject(HMap);
   if (!hObj) return 0;

   int flag = WO_FIRST;


   while (mapTotalSeekObject(HMap, hObj, flag) != 0)
   {
      
      flag = WO_NEXT;
      if (mapIsMultiPolygon(hObj) != 0)
         AfxMessageBox(L"1");
      
   }
 
Посмотреть флажки поиска в maptype.h в списке SEEKTYPE.
Например:
WO_VISUAL - поиск среди видимых объектов;
flag = WO_FIRST | WO_VISUAL;
Изменено: Елена Кузнецова - 26.10.2017 08:18:47
 
Здравствуйте! Данный флаг не меняет ситуацию, выделяются все(
 
Здравствуйте!Исходный код:

 HSITE hSite = mapGetActiveSite(HMap);

int nlanguage = ::GetMapAccessLanguage();

HSELECT hSelect1 = mapCreateMapSelectContext(HMap);
HSELECT hSelect2 = mapCreateMapSelectContext(HMap);
mapGetSiteViewSelect(HMap, hSite, hSelect1);

if (mapCheckLocal(hSelect1, LOCAL_SQUARE) == 0)
return 0;


// Создать пустой объект для обработки выделенных
HOBJ hObj = mapCreateObject(HMap);
if (!hObj) return 0;

int flag = WO_VISUAL;

wchar_t mapname[400];
int numb = mapGetSiteNumber(HMap, hSite);
mapGetSheetNameUn(HMap, numb, mapname, 400);

while (mapTotalSeekObject(HMap, hObj, flag) != 0)
{

flag = WO_NEXT;
if (mapIsMultiPolygon(hObj) != 0)
{

if (mapObjectLocal(hObj) == LOCAL_SQUARE)
{

mapSelectSampleUn(hSelect2, mapname, mapObjectKey(hObj));

}
}



 mapSetTotalSelectFlag(HMap, 1);
 mapSetSiteSeekSelect(HMap, hSite, hSelect2);

mapClearSelectContext(hSelect1);
mapClearSample(hSelect2);
mapClearSelectContext(hSelect2);


MapWindow->Invalidate();
 
Флаги можно задать так:
Код
int flag = WO_FIRST | WO_VISUAL; 
    
while (mapTotalSeekObject(HMap, hObj, flag) != 0) 
{ 
  flag = WO_NEXT | WO_VISUAL;

  ...
Страницы: Пред. 1 2 3 4 5 6 След.
Читают тему (гостей: 1)



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

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