兰保明

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
View Code
  1  <esri:Map x:Name="MyMap" WrapAround="True" ExtentChanged="MyMap_ExtentChanged" ExtentChanging="MyMap_ExtentChanged">
2 <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
3 Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
4 </esri:Map>
5
6 <Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" >
7 <Rectangle Fill="#77919191" Stroke="Gray" RadiusX="10" RadiusY="10" Margin="0,0,0,5" >
8 <Rectangle.Effect>
9 <DropShadowEffect/>
10 </Rectangle.Effect>
11 </Rectangle>
12 <Rectangle Fill="#FFFFFFFF" Stroke="DarkGray" RadiusX="5" RadiusY="5" Margin="10,10,10,15" />
13 <StackPanel Orientation="Vertical" Margin="25">
14 <StackPanel.Resources>
15 <Style TargetType="TextBlock">
16 <Setter Property="FontWeight" Value="Bold"/>
17 <Setter Property="FontSize" Value="11" />
18 </Style>
19 </StackPanel.Resources>
20 <TextBlock>
21 <Run FontStyle="Italic">Absolute</Run>
22 <LineBreak />
23 <Run>MinX: </Run>
24 <Run Text="{Binding ElementName=MyMap, Path=Extent.XMin, StringFormat=\{0:F3\}}" />
25 <LineBreak />
26 <Run>MinY: </Run>
27 <Run Text="{Binding ElementName=MyMap, Path=Extent.YMin, StringFormat=\{0:F3\}}" />
28 <LineBreak />
29 <Run>MaxX: </Run>
30 <Run Text="{Binding ElementName=MyMap, Path=Extent.XMax, StringFormat=\{0:F3\}}" />
31 <LineBreak />
32 <Run>MaxY: </Run>
33 <Run Text="{Binding ElementName=MyMap, Path=Extent.YMax, StringFormat=\{0:F3\}}" />
34
35 <LineBreak />
36 <LineBreak />
37 <Run FontStyle="Italic">Normalized</Run>
38 <LineBreak />
39 <Run>Left X: </Run>
40 <Run x:Name="MinXNormalized" />
41 <LineBreak />
42 <Run>Bottom Y: </Run>
43
44 <Run>Bottom Y: </Run>
45 <Run x:Name="MinYNormalized"/>
46 <LineBreak />
47 <Run>Right X: </Run>
48 <Run x:Name="MaxXNormalized"/>
49 <LineBreak />
50 <Run>Top Y: </Run>
51 <Run x:Name="MaxYNormalized"/>
52 </TextBlock>
53 </StackPanel>
54
55
56
57 public partial class MapExtent : UserControl
58 {
59 public MapExtent()
60 {
61 InitializeComponent();
62 }
63
64 private void MyMap_ExtentChanged(object sender, ESRI.ArcGIS.Client.ExtentEventArgs e)
65 {
66 Envelope newExtent = null;
67
68 if (MyMap.WrapAroundIsActive)
69 {
70 Geometry normalizedExtent = Geometry.NormalizeCentralMeridian(e.NewExtent);
71 if (normalizedExtent is Polygon)
72 {
73 newExtent = new Envelope();
74
75 foreach (MapPoint p in (normalizedExtent as Polygon).Rings[0])
76 {
77 if (p.X < newExtent.XMin || double.IsNaN(newExtent.XMin))
78 newExtent.XMin = p.X;
79 if (p.Y < newExtent.YMin || double.IsNaN(newExtent.YMin))
80 newExtent.YMin = p.Y;
81 }
82
83 foreach (MapPoint p in (normalizedExtent as Polygon).Rings[1])
84 {
85 if (p.X > newExtent.XMax || double.IsNaN(newExtent.XMax))
86 newExtent.XMax = p.X;
87 if (p.Y > newExtent.YMax || double.IsNaN(newExtent.YMax))
88 newExtent.YMax = p.Y;
89 }
90 }
91 else if (normalizedExtent is Envelope)
92 newExtent = normalizedExtent as Envelope;
93 } else
94 newExtent = e.NewExtent;
95
96 MinXNormalized.Text = newExtent.XMin.ToString("0.000");
97 MinYNormalized.Text = newExtent.YMin.ToString("0.000");
98 MaxXNormalized.Text = newExtent.XMax.ToString("0.000");
99 MaxYNormalized.Text = newExtent.YMax.ToString("0.000");
100 }

posted on 2011-07-27 09:22  兰保明  阅读(548)  评论(0编辑  收藏  举报