Страница 1 из 1

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

Добавлено: 04 дек 2014, 14:55
Tereha
Уважаемые Гуру!
Есть такой 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 плодить много кода.
Спасибо!

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

Добавлено: 06 дек 2014, 07:59
Tereha
Для этой цели в 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);

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

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

у вас код WPF, как предположили выше? или XAML для Silverlight приложения был?

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

Добавлено: 09 дек 2014, 17:07
Tereha
Сейчас я работаю в 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.

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

Добавлено: 10 дек 2014, 13:09
novia
не увидел, что сами себе второе сообщение написали.

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