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

Отображение картинок из БД MSSQL на карте в формате *.sit

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Отображение картинок из БД MSSQL на карте в формате *.sit
 
Добрый день! Подскажите пожалуйста как я могу отобразить картинку из БД MSSQL, которая хранится в поле (Image) на карте формата *.sit.
На сегодняшний день у меня получилось отобразить карту (*.sit)., а при нанесении точки при помощи кода отображается только маленький квадратик.

Код нанесения и отображения точки (С #):

private void MapView1_OnDblClick(object sender, EventArgs e)
       {
           using (var f = new F_EditMapItem())
           {
               if (f.ShowDialog() != DialogResult.OK) return;
               
               MapObj.CreateObjectByExcode(0, (int)axGisToolKit.TxMetricType.IDDOUBLE2, 31133000, (int)axGisToolKit.TxObjectLocal.OL_MARK);
               MapPoint.PlaceInp = axGisToolKit.TxPPLACE.PP_PLANE;
               
               using (var db = new MyDataDataContext())
               {
                   var res = db.Lst_MapItems.FirstOrDefault(t => t.Description == "№89653"  &&  t.Id == 1081);
                   MapPoint.SetPoint(Convert.ToDouble(Program.Latitude), Convert.ToDouble(Program.Longitude));

                  //MapObj.Image = Image.FromStream(new MemoryStream(res.Image.ToArray()))); //// Может здесь я что-то делаю не правильно??
                   
                   MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
                   MapObj.Metric.Insert(0, 1, MapPoint.C_CONTAINER);
                   MapObj.Commit();
               }
           }
       }



Далее нажимаю на кнопку "ОК" и на карте отображается квадратик


Хотя в БД MSSQL данные сохранились

Скрытый текст


Может быть я иду в не правильном направлении, но использование БД MSSQL это единственный вариант, который позволит мне автоматически наносить объекты на карту в зависимости от выбора пользователя.
Я понимаю, что необходимо пользоваться классификатором, но тогда я теряю возможность автоматического нанесения объектов на карту.
Я пишу на C# с использованием инструментов GIS Tool Kit 11.
Если это возможно желательно ответ дать в виде кода.))
Для соединения с БД я использую LINQ запросы.

Заранее спасибо!!
Изменено: Денис Вицко - 08.06.2022 09:31:47 (исправил вставку картинок)
 
Долгий и тернистый путь Вы выбрали для отображения условных знаков.

При больших объемах данных такой подход приведет к очень сильному замедлению работы - во-первых, при потоковом нанесении объектов на карту, во-вторых, при последующей визуализации.


Кроме того свойство MapObj.Image не устанавливает картинку, а определяет код функции для отображения выделенного объекта.
Задать объекту растровое изображение в качестве условного знака можно с помощью "графического вида объекта" - MapObj.AppendDrawObject (или mapAppendDraw) с параметрами:
тип функции - IMG_GRAPHICMARK и структура параметров изображения - TIMGGRAPHICMARK
Скрытый текст


Цитата
Александр Махин написал:
Может быть я иду в не правильном направлении, но использование БД MSSQL это единственный вариант, который позволит мне автоматически наносить объекты на карту в зависимости от выбора пользователя.
Я понимаю, что необходимо пользоваться классификатором, но тогда я теряю возможность автоматического нанесения объектов на карту.

Для этого достаточно в БД просто иметь справочник с кодами объектов, соответствующих классификатору карты, и при автоматическом нанесении регистрировать объект нужным кодом.
 
Да я с Вами полностью согласен, что будут жесткие подвисания ПО!
Я решил пойти другим путем.! Я создал карту и привязал к ней классификатор.
Теперь вопрос я уже третий день пытаюсь отобразить из классификатора векторный объект, но ни чего не происходит(((

Вот мой код на С# (данные объекта, который я пытаюсь отобразить на карте: код объекта - 13100, ключ - V00000013100, тип - векторный, номер 1, Имя - "Темно красный флаг")

private void MapView1_OnDblClick(object sender, EventArgs e)
       {
           MapObj.CreateObjectByInCode(0, (int)TxMetricType.IDDOUBLE2, 13100);
           MapPoint.PlaceInp = TxPPLACE.PP_PLANE;
           MapPoint.SetPoint(Convert.ToDouble(slMap2.Text), Convert.ToDouble(slMap3.Text));
           MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
           MapObj.Metric.Insert(0, 1, MapPoint.C_CONTAINER);
           MapObj.Commit();
       }

Что я делаю не так? Желательно помочь и ответить кодом, чтобы я смог подробно изучить этот код т.к. читая руководство для программистов понимаю лишь 50% того что написано!
Заранее Вас благодарю!!
 
В целом код правильный.

Если "ничего не происходит", скорее всего, объект у Вас создается, но Вы его не видите.
Либо не создается, но для того, чтобы это узнать, надо анализировать коды возврата от методов (ноль - это ошибка).
Если объект создается, но на экране его нет, могут сбыть следующие причины.

Первый вопрос к этому участку:
Цитата
Александр Махин написал:
MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
MapObj.Metric.Insert(0, 1, MapPoint.C_CONTAINER);
Зачем объекту одна и та же точка?
Insert при вставке точки после последней - это то же Append.
Если вдруг Ваш векторный объект в классификаторе настроен так, что он должен растягиваться по этим двум точкам, то это установка им одной и той же координаты - не есть хорошо.

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

Если Вы ошиблись с метрикой, объект сохранится, но будет за пределами карты.
slMap2.Text и slMap3.Text у Вас должны быть в метрах, так как Вы установили MapPoint.PlaceInp в метрах.
Не перепутайте оси X и Y (см. Руководство по MAPAPI).

Полезные ссылки для разработчика на GIS Toolit и MAPAPI тут.

Цитата
Александр Махин написал:
Желательно помочь и ответить кодом

Пример нанесения заданного количества точечных объектов со сдвигом каждого последующего на 1 метр:
Скрытый текст
 
Здравствуйте!
Я разобрался со своей ошибкой добавив в начало кода строку MapSelectObjectRsc.Show();, а в конце строку MapView1.Refresh();
Спасибо за помощь!!  
Страницы: 1
Читают тему (гостей: 1)



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

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