Как определить feature на котором произведен клик

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Как определить feature на котором произведен клик

Сообщение Tereha » 04 дек 2014, 14:55

Уважаемые Гуру!
Есть такой xaml:

Код: Выделить всё

<esri:Map x:Name="Map" >
            <esri:ArcGISDynamicMapServiceLayer ID="BaseLayer" 
                            Url="http://localhost:6080/ArcGIS/rest/services/streetRK/MapServer" />
            <esri:FeatureLayer    ID="bridges"                                  
                            Url="http://localhost:6080/ArcGIS/rest/services/streetRK/MapServer/2" 
                                  MouseEnter="FeatureLayer_MouseEnter" >
            </esri:FeatureLayer>
</esri:Map>
В опубликованном "BaseLayer" есть несколько десятков слоев. При клике на какой-нибудь значок какого-то слоя
нужно определить - и слой и feature , на котором произведен клик.
Если я понимаю правильно, то необходимо сделать как с мостами - поместить FeatureLayer с ID="bridges" - тогда
при клике на значке моста - не сложно определить feature, на котором произведен клик и его параметры.
1. Это единственный метод для решения задачи?
2. Могу ли я в программе динамически менять url для FeatureLayer, чтобы сделать возможным определения на каком feature произведен клик для различных слоев. Не хотелось бы в xaml плодить много кода.
Спасибо!
Последний раз редактировалось Tereha 06 дек 2014, 08:00, всего редактировалось 1 раз.

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как определить feature на котором произведен клик

Сообщение Tereha » 06 дек 2014, 07:59

Для этой цели в arcgis API for WPF служит identify task. Но что-то на моих слоях возвращается IdentifyResults = null.
Формирование IdentifyTask in code behind:

Код: Выделить всё

            ESRI.ArcGIS.Client.Geometry.MapPoint clickPoint = e.MapPoint;

            ESRI.ArcGIS.Client.Tasks.IdentifyParameters identifyParams = new IdentifyParameters()
            {
                Geometry = clickPoint,
                MapExtent = Map.Extent,
                Width = (int)Map.ActualWidth,
                Height = (int)Map.ActualHeight,
                LayerOption = LayerOption.visible,
                SpatialReference = Map.SpatialReference
            };

            IdentifyTask identifyTask = new IdentifyTask("http://localhost:6080/ArcGIS/rest/services/streetRK/MapServer");
            identifyTask.ExecuteCompleted += IdentifyTask_ExecuteCompleted;
            identifyTask.Failed += IdentifyTask_Failed;
            identifyTask.ExecuteAsync(identifyParams);

Аватара пользователя
novia
Гуру
Сообщения: 2261
Зарегистрирован: 29 апр 2011, 15:06
Репутация: 489
Откуда: Тель-Авив

Re: Как определить feature на котором произведен клик

Сообщение novia » 08 дек 2014, 10:26

в целом если вы пользуетесь Feature Layer, можно обходиться без Identify и работать с поведением для графики.

у вас код WPF, как предположили выше? или XAML для Silverlight приложения был?
понравилось? жми палец вверх :!:

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как определить feature на котором произведен клик

Сообщение Tereha » 09 дек 2014, 17:07

Сейчас я работаю в WPF. Все заработало после того как вставил формирование множества Ids слоев, в которых искать feature:

Код: Выделить всё

            ESRI.ArcGIS.Client.Tasks.IdentifyParameters identifyParams = new IdentifyParameters()
            {
                Geometry = clickPoint,
                MapExtent = Map.Extent,
                Width = (int)Map.ActualWidth,
                Height = (int)Map.ActualHeight,
                LayerOption = LayerOption.all,
                SpatialReference = Map.SpatialReference
                ,
                Tolerance = 30
            };
            identifyParams.LayerIds.Add(2);
            identifyParams.LayerIds.Add(3);

            IdentifyTask identifyTask = new IdentifyTask("http://217.77.48.153:6080/ArcGIS/rest/services/streetRK/MapServer");
            identifyTask.ExecuteCompleted += IdentifyTask_ExecuteCompleted;
            identifyTask.Failed += IdentifyTask_Failed;
            identifyTask.ExecuteAsync(identifyParams);
При клике на карте - эта задача отправляет запрос на сервер, там определяются features, которые содержат кликнутую точку или находятся вблизи нее. Все найденные свойства возвращаются на сервер.
Вообщем это функционал кнопки "i" в arcgis desktop.

Аватара пользователя
novia
Гуру
Сообщения: 2261
Зарегистрирован: 29 апр 2011, 15:06
Репутация: 489
Откуда: Тель-Авив

Re: Как определить feature на котором произведен клик

Сообщение novia » 10 дек 2014, 13:09

не увидел, что сами себе второе сообщение написали.

набор параметров можете через ссылку Identify тестировать в Services Directory, чтобы понять в них ошибка или в другой части кода.
понравилось? жми палец вверх :!:

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 3 гостя