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

Выделение одного объекта на карте C#

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Выделение одного объекта на карте C#
 
Добрый день!
Подскажите пожалуйста как мне выделить нужный мне объект по клику мыши.
Вот мой код, который я использую

private void MapView1_OnClick(object sender, EventArgs e)
       {
           MapFind.Active = false;
           MapFind.FindPoint = true;
           MapFind.X = Convert.ToDouble(slMap2.Text);
           MapFind.Y = Convert.ToDouble(slMap3.Text);
           MapFind.Radius = 3;
           MapFind.Active = true;
           MapView1.SetViewSelected(true, COLOR.aColor()); /// Я так понимаю что здесь я выделяю все объекты)), а как выделить только один???
           MapObj.Repaint();
       }
Но после нажатия выделяются все объекты на карте.
Подскажите как сделать правильно, чтобы выделялся лишь один объект и желательно кодом на C#.
Заранее благодарю за помощь!
 
Добрый день Вам необходимо в  MapObj установить St yle = OS_SELECT и StyleSelect = нужный Вам стиль. Подробнее смотрите в документации

MapView1.SetViewSelected - устанавливать не надо.

Рекомендую посмотреть примеры FindObj или mapwork, которые входят в состав инсталляции GIS ToolKit.
 
Здравствуйте, Роман!
Я сделал так так Вы сказали, но ничего не выбирается.
Вот мой код на C#:

private void MapView1_OnMapMouseUp(object sender, AxaxGisToolKit.IaxMapViewEvents_OnMapMouseUpEvent e)
       {
           MapFind.Active = false;
           MapFind.FindPoint = true;
           MapFind.X = e.x;
           MapFind.Y = e.y;
           MapFind.Radius = 5;
           MapFind.Active = true;
           MapObj.St yle = TxObjectStyle.OS_SELECT;
           if (MapObj.SelectObjectInPoint((int)e.x, (int)e.y, 5, 0) != 0)
           {
               slMap4.Text = MapObj.ObjName;
               MapObj.St yle = TxObjectStyle.OS_SELECT;
           }
           else MapObj.ObjHandle = 0;
       }

Я уже практически все перепробовал и ни чего не помогает. В коде ошибок нет. Скорее всего необходимо передать еще что-то, но что?
Я думаю что выделения объекта вполне достаточно координат и радиуса для поиска!
 
Я еще раз посмотрел, что выделяется с использованием функции открытия окна слоев и объектов.

if (MapSelectDialog.Execute(MapFind.cMapSelect, true))
               if (MapSelectDialog.ModalResult == 8 // выделить
                   MapView1.SetObjSelected(MapFind.cMapSelect, COLOR.aColor(), true);

Показывает, что выбраны все объекты, а как мне программно выделить нужный мне объект по клику?
И если не затруднит Вас желательно кодом т.к. объяснения для меня "темный лес" ))
Заранее спасибо!!
111.PNG (38.09 КБ)
222.PNG (35.37 КБ)
 
По Вашему коду не видно какие координаты точки поиска  передаете в компонет поиска - PlaceInp.
В дизайне или предварительно коде устанавливаем
MapFindObject.PlaceInp := PP_PICTURE;
MapObj.Style := OS_SELECT;

Далее на событие нажатия кнопки мыши (MouseDown) компонента MapView

 MapFindObject.Active    := false;
 MapFindObject.FindPoint := true;
 MapFindObject.X         := mvMapView.MapLeft + X;
 MapFindObject.Y         := mvMapView.MapTop + Y;
 MapFindObject.Radius    := 3;
 MapFindObject.Active    := true;

X и Y координата мышки в окне MapView (пикселы)

Это всё.
 
Здравствуйте, Роман!!
Я сделал все как Вы мне написали! Вот код:


       private void MapView1_OnMapMouseUp_1(object sender, AxaxGisToolKit.IaxMapViewEvents_OnMapMouseUpEvent e)
       {
           MapFind.PlaceInp = TxPPLACE.PP_PICTURE;
           MapObj.St yle = TxObjectStyle.OS_SELECT;
           MapFind.Active = false;
           MapFind.FindPoint = true;
           MapFind.X = MapView1.MapLeft + e.x;
           MapFind.Y = MapView1.MapTop + e.y;
           MapFind.Radius = 5;
           MapFind.Active = true;
           slMap4.Text = MapObj.KeyName;
       }

А координаты я получаю в таком формате: X=7212183.35  -  Y=3877834.48
Но все равно выделения не происходит. Я думаю может это как то связано со слоями??


А объекты я добавляю вот таким образом:

private void MapView1_OnDblClick(object sender, EventArgs e)
       {
           if (!MapSelectObjectRsc.ExecuteForMapObj(MapObj.C_CONTAINER, true)) return;
           MapSelectObjectRsc.RestoreEnabled = true;
           MapEditMetric.MetEditMode = TxEditMode.emCreate;
           MapSelectObjectRsc.Show();
           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();
           MapView1.Refresh();
       }
 
Александр, здравствуйте.

Рекомендую Вам сначала сделать простой пример, в котором разобраться с выбором объекта в точке на карте. Без каких-либо дополнительных действий и дополнительно логики.
Цитата
А координаты я получаю в таком формате: X=7212183.35  -  Y=3877834.48
Вам необходимо разобраться с координатами точки поиска объекта на карте.
Когда Вы устанавливаете
MapFind.PlaceInp = TxPPLACE.PP_PICTURE;

то в MapFind.X и MapFind.Y  должны передаваться координаты в пикселях.


По созданию объекта.

Откуда этот метод - MapSelectObjectRsc.Show();  ? Диалог выбора объекта из классификатора вызывается методом ExecuteForMapObj.


Зачем делать Insert, если просто добавляется точка метки. Кроме этого добавляется одна и таже координата.
Цитата
          MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
           MapObj.Metric.Insert(0, 1, MapPoint.C_CONTAINER);
Это точечный объект? Если да, то не надо этого делать.
 
Здравствуйте, Роман!
У меня получилось разобраться! Спасибо за помощь тему можно закрыть!
Страницы: 1
Читают тему (гостей: 1)



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

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