0

我有下一个问题,我正在silverlight 5 c# whit sdk Esri 中制作一个应用程序,并且我有XAML

<Grid x:Name="LayoutRoot" >
     <Grid.ColumnDefinitions>
            <ColumnDefinition Width="196*"/>
            <ColumnDefinition Width="7*"/>
            <ColumnDefinition Width="197*"/>
      </Grid.ColumnDefinitions>

     <esri:Map WrapAround="True" x:Name="MyMap"  Extent="-1082593,4487171,742111,5174493" ZoomFactor="4.0" Grid.ColumnSpan="3"/>

</Grid>

和 nextc c# 代码

 public MainPage()
    {
        InitializeComponent();

        var myLayer = new ArcGISDynamicMapServiceLayer();
        myLayer.Url = "http://192.168.1.165:6080/arcgis/rest/services/Myservice/";
        myLayer.ID = "servicioWeb";
        myLayer.Initialize();
        MyMap.Layers.Add(myLayer);

        MyMap.MouseClick += MyMap_MouseClick;        
    }

    void MyMap_MouseClick(object sender, Map.MouseEventArgs e)
    {
       I NEED HELP
    }

为了在 ArcGISDynamicMapServiceLayer 的图层上捕获 clic,我必须放置什么代码?我看到了很多例子,但只有我看到了带有 featureLayer 和图形的例子。

谢谢大家。

问候。

4

1 回答 1

1

顺便说一句,您无法准确点击 ArcGISDynamicMapServiceLayer,因为 ArcGISDynamicMapServiceLayer 只是来自服务器的简单图像。如果单击地图,则始终单击 LayerCollection 中的顶层,要素或图形图层除外。

FeatureLayer 或 GraphicsLayer 是不同的,因为它是包含一些“真实”图形的“对象”层,而不是图像。

如果您需要在 ArcGISDynamicMapServiceLayer 中查找一些对象,您应该获取 MapCoords 并使用您的 url 对其余服务进行识别或几何查询,例如:

MyMap.MouseClick += (s, e) =>
{
    var queryTask = new QueryTask(URL);
    var query = new Query
    {
        Geometry = e.Point,
        OutSpatialReference = MyMap.SpatialReference,
        ReturnGeometry = true
    };
    query.OutFields.Add("*");
    queryTask.ExecuteCompleted += .. Some Completed Handler ..
    queryTask.Failed += .. Some Failed Handler ..
    queryTask.ExecuteAsync(query);
}

请注意,使用e.Point在识别方面不是很有效。取而代之的是,您可以制作一些简单的缓冲区:

const int resShift = 2;
var env = new Envelope(e.Point.X - MyMap.Resolution * resShift, 
   e.Point.Y - MyMap.Resolution * resShift,
   e.Point.X + MyMap.Resolution * resShift, 
   e.Point.Y + MyMap.Resolution * resShift)
      {
         SpatialReference = MyMap.SpatialReference
      };
于 2013-06-25T07:50:40.747 回答