انجمن تخصصی جی.آی.اس (GIS)

نسخه‌ی کامل: feature layer و legend
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
چندتا لایه داریم که پابلیش شده اند. حالا میخاستیم این لایه ها رو رو توی برنامه سیلورلایتمون نمایش بدیم. 

توی کد زیر کامپووننت مپ را ایجاد کردیم


کد:
<esri:Map x:Name="MyMap" WrapAround="True" IsLogoVisible="False" Margin="250,55,0,0" />


 و از طریق کد زیر لایه رو به نقشه اضافه میکنیم.



کد:
for (int i = 0; i < 5; i++)
{
flayer = new FeatureLayer();
flayer.Url = "http://localhost:6080/arcgis/rest/services/GIS/MyMapServiceasli/Mapserver/" + i.ToString();
flayer.SelectionColor = new System.Windows.Media.SolidColorBrush(Colors.Cyan);
OutFields myOutFields = new OutFields();
myOutFields.Add("*");
flayer.OutFields = myOutFields;
//flayer.ID = "لایه " + args.Graphic.Attributes["Layer"].ToString();
flayer.Mode = FeatureLayer.QueryMode.OnDemand;
MyMap.Layers.Add(flayer);
}
به عنوان مثال ما میخایم پنج تا لایه اول رو نمایش بدیم. کد بدرستی عمل میکنه ولی در legend نام لایه ها نمایش داده نمیشود. 



کد:
<Border Background="#77919191" x:Name="MyBorderLayerList" BorderThickness="1" CornerRadius="5" Opacity="0.8"
HorizontalAlignment="Left" VerticalAlignment="Top" Visibility="Visible"
Margin="0,50,0,0" Padding="5" BorderBrush="Black"
Width="250" Height="Auto" >



<esri:Legend Name="MyLegend" HorizontalAlignment="Left" Background="White"
VerticalAlignment="Top" Margin="0,0,0,0" Width="250"
Map="{Binding ElementName=MyMap}"

LayerItemsMode="Tree" ShowOnlyVisibleLayers="False" >
<esri:Legend.MapLayerTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<sdk:Label x:Name="lblLayerList" Content="لیست لایه ها"/>
<CheckBox Content="{Binding Label}"
IsChecked="{Binding IsEnabled, Mode=TwoWay}"
IsEnabled="{Binding IsInScaleRange}" >
</CheckBox>
<Slider Maximum="1" Value="{Binding Layer.Opacity, Mode=TwoWay}" Width="100" />
</StackPanel>
</DataTemplate>
</esri:Legend.MapLayerTemplate>
<esri:Legend.LayerTemplate>
<DataTemplate>
<CheckBox Content="{Binding Label}"
IsChecked="{Binding IsEnabled, Mode=TwoWay}"
IsEnabled="{Binding IsInScaleRange}" >
</CheckBox>
</DataTemplate>
</esri:Legend.LayerTemplate>
</esri:Legend>
</Border>

 , legend  به این صوت نمایش داده میشود


چکار باید بکنیم؟

 

 
باید به هر لایه یک id اختصاص دهید  و این id ها رو به legend معرفی کنید. با پروپرتی LayerIDS. مثلا:

  "LayerIDs="Points of Interest, United States

Content="لیست لایه ها" رو هم فکر می کنم باید بردارید. امتحان کنید.
لینک مرجع