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

Заполнение семантики объектов (относительные высоты)

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 След.
RSS
Заполнение семантики объектов (относительные высоты), C#
 
Интересует такой вопрос, есть ли возможность при открытии карты присваивать значение относительных высот объектам у которых эти значения пустые автоматически ? Если да, то как? И кто работал с этим ?
 
Если речь о заполнении семантики, хранящей относительную высоту объекта, то Вы можете запросить текущее значение и установить новое:
Код
 // Запросить значение семантической характеристики объекта
 // в виде числа с плавающей точкой двойной точности
 // info    - идентификатор объекта карты в памяти
 // code    - код характеристики,для которой ищется значение,
 // number  - последовательный номер найденного значения,
 //  не равен последовательному номеру характеристики !
 //  например : код code имеют 3-я и 6-я характеристики,
 //             соответственно для них number = 1 и 2,
 //             а при number = 3  - код возврата будет ноль.
 // Если значение семантики не может быть преобразовано
 // к числовому виду или не найдено - возвращает ноль

_MAPIMP double _MAPAPI mapSemanticCodeDoubleValue(HOBJ info, long int code, long int number);

 // Добавить новую характеристику в семантику объекта в виде UNICODE-строки
 // info    - идентификатор объекта карты в памяти
 // code    - внешний код характеристики
 // value   - адрес строки,содержащей новое значение
 //           в символьном виде UNICODE UTF-16,
 // size    - максимальная длина строки
 // Если текст содержит латинские символы от 0x0001 до 0x007E
 // или кириллицу (0x0400 - 0x045F) и на компьютере
 // установлена русская Windows (OEM 866 или 1251), то текст
 // автоматически запишется в ANSI,
 // иначе новое значение сохранится в UTF-16
 // Числовые значения будут преобразовываться в двоичный вид
 // Если такая семантика была и она не повторяемая - значение заменяется
 // При ошибке возвращает ноль,
 // при успешном выполнении - последовательный номер созданной характеристики
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapAppendSemanticUnicode(HOBJ info, long int code, const WCHAR *value, long int size);

 // Изменить значение семантической характеристики объекта в кодировке UNICODE
 // info    - идентификатор объекта карты в памяти
 // number  - последовательный номер характеристики,
 // place   - адрес строки, содержащей новое значение в UTF-16. 
 //           Для семантики типа "классификатор" передается 
 //           код значения в виде числа в символьном виде.
 // maxsize - длина передаваемой строки (для контроля)
 // Семантика числового типа будет автоматически преобразовываться в двоичный вид
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetSemanticValueUnicode(HOBJ info, long int number, const WCHAR *place, long int maxsize);
 
Семантики у объектов нет , ее нужно добавить  
 
Для добавления семантики используйте функцию mapAppendSemanticUnicode.
 
А как сделать, чтобы объектам с одним кодом, указанным в классификаторе, например, лес густой, код 71111110, добавить семантику «относительная высота» и значение
 
Запросить код объекта можно функцией mapObjectExcode:
Код
 // Запросить классификационный код объекта
 // info - идентификатор объекта карты в памяти
 // При ошибке возвращает 0 (ноль допустим для нового объекта)

_MAPIMP long int _MAPAPI mapObjectExcode(HOBJ info);
 
Цитата
Ксения Смирнова написал:
А как сделать, чтобы объектам с одним кодом, указанным в классификаторе, например, лес густой, код 71111110, добавить семантику «относительная высота» и значение

Два варианта.
1. Перебрать все объекты карты, запросить у каждого код, если он равен 71111110, то добавить нужную семантику.
2. Заполнить контекст поиска (HSELECT) нужными условиями (в данном случае только внешний код). Выполнить поиск, перебрать все объекты в результате запроса и добавить им нужную семантику.

Если у Вас только одно условие (код), то проще выполнить по первому варианту.
Как узнать код с помощью MAPAPI Вам уже подсказали выше.
 
Цитата
Ксения Смирнова написал:
А как сделать, чтобы объектам с одним кодом, указанным в классификаторе, например, лес густой, код 71111110, добавить семантику «относительная высота» и значение
Код
using System.Windows.Forms;
using maptype;
using mapproc;

namespace MySolution
{
    public partial class MainForm : Form
    {
        public void ForKsuhaSmirnova(HMAP map, double Hotn )
        {
           HOBJ obj    = mapCreateSiteObject(map, map);         // создать контейнер для объекта
           HSELECT sel = mapCreateSiteSelectContext(map, map);  // создать поисковик по карте
           mapSelectObject(sel , -1, 0);                         // "потушить" в поисковике все объекты (по умолчанию активны все объекты карты)
           // выбрать в поисковике только объекты с кодом 71111110 и площадой локализацией
           mapSelectObject(sel, mapRscObjectCode(map, 71111110, OL_SQUARE), 1);  
           int flag = 0;   
           while (mapSeekSiteSelectObject(map, map, obj, sel, flag)) // перебираем всё что найдено
           {
              mapAppendSemanticLong(obj, 1, Hotn); // добавляем семантику относительная высота (код 1) со значением Hotn (поступающим на вход процедуры)     
              mapCommitObject(obj);                // записываем содержимое "контейнера объекта" на карту
              flag = 4;                            
           }
           mapDeleteSelectContext(sel);            // удаляем поисковик 
           mapFreeObject(obj);                     // удаляем контейнер для объекта
        }

        private void btnCreateObject_Click(object sender, EventArgs e)
        {
          HMAP map = mapOpenMap("НАЗВАНИЕ_КАРТЫ_ЛЕСОВ.sitx", 0);  
          ForKsuhaSmirnova(map , 27.4);
          mapCloseMap(map);
        }
    } 
}
Изменено: KFF - 06.04.2020 11:47:27
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Методы берутся из класса MAPAPI?
Или откуда берутся данные методы?
и почему в методе два раза используется map ?
Что за mapproc и maptype?
Изменено: Ксения Смирнова - 06.04.2020 20:43:04
 
Код
  // Cоздать пустой объект пользовательской карты
  // hMap  - идентификатор открытой основной карты
  // hSite - идентификатор открытой пользовательской карты, в которой будет расположен 
  //         создаваемый объект (для первой карты равен hMap)
  // text  - признак метрики с текстом (для объектов типа "подпись")
  // kind  - формат метрики
  // После вызова функций типа What...() и Seek...() все параметры
  // полученного объекта могут измениться (text,kind и т.п.)
  // Для каждого полученного и больше не используемого
  // идентификатора HOBJ необходим вызов функции mapFreeObject()
  // При ошибке возвращает ноль

_MAPIMP HOBJ _MAPAPI mapCreateSiteObject(HMAP hMap, HSITE hSite, long int kind = IDDOUBLE2, long int text = 0);
Для первой карты hSite равен hMap. Поэтому 2 раза map.
Страницы: 1 2 3 4 След.
Читают тему (гостей: 1)



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

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