ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
2011-11-15 10:12
666 查看
ArcGisForSilverlightAPI,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
平台:Vs2010,Blend4,Silverlight4调用API:ArcGisforSilverligthAPI(ESRI.ArcGIS.Client)转载自:
OK,今天又有空来写点啦,这个例子自己不想拉的太长了,所以这节多写点东西,我尽量把东西都介绍全面,有不懂的可以留言~
有空大家共同讨论。
好进入正题,如今天标题所示,我们先来看画点,线,圆吧!
01 | ///<summary> |
02 | ///绘制界面上的点和线 |
03 | ///</summary> |
04 | ///<paramname="myMap"></param> |
05 | ///<paramname="point"></param> |
06 | ///<paramname="pointLine"></param> |
07 | public void DrawAnimationCompleted(MapmyMap,List<Graphic>point,ESRI.ArcGIS.Client.Geometry.PointCollectionpointLine) |
08 | { |
09 | GraphicsLayergPointLayer= new GraphicsLayer(); |
10 | GraphicsLayerlineLayer= new GraphicsLayer(); |
11 | SimpleLineSymbollineSymbol= new SimpleLineSymbol(); |
12 | lineSymbol.Color= new SolidColorBrush(Colors.Brown); |
13 | lineSymbol.Width=1; |
14 | lineSymbol.Style=SimpleLineSymbol.LineStyle.Solid; |
15 |
16 | //画线到图层上并绘制到地图上 |
17 | GisMap.AddLayersToMap(myMap, new GraphicsLayer[]{lineLayer}); |
18 | GisLine.DrawLineOnMap(pointLine,lineLayer,lineSymbol); |
19 |
20 | GisMap.DrawAllLayers(myMap, new GraphicsLayer[]{gPointLayer},point); |
21 | GisMap.AddLayersToMap(myMap, new GraphicsLayer[]{gPointLayer}); |
22 | } |
01 | ///<summary> |
02 | ///在地图上绘制圆 |
03 | ///</summary> |
04 | ///<paramname="myMap">地图</param> |
05 | ///<paramname="container">绘制容器</param> |
06 | ///<paramname="pt">要绘制的点</param> |
07 | ///<paramname="drawCircleLayer"></param> |
08 | ///<paramname="circleKm">直径</param> |
09 | ///<paramname="color">填充色</param> |
10 | ///<paramname="ellipseStroke">边框色</param> |
11 | public void DrawEllipse(MapmyMap,Canvascontainer,MapPointpt, ref ElementLayerdrawCircleLayer, double circleKm,Colorcolor,ColorellipseStroke) |
12 | { |
13 | if (!drawCircleLayer.Children.Contains(container)) |
14 | { |
15 | drawCircleLayer.Children.Add(container); |
16 | container.Opacity=0.5; |
17 | container.SetValue(ElementLayer.EnvelopeProperty, new Envelope(myMap.Extent.XMax,myMap.Extent.YMax,myMap.Extent.XMin,myMap.Extent.YMin)); |
18 | } |
19 |
20 | PointptFirst=myMap.MapToScreen( new MapPoint(Convert.ToDouble(pt.X), |
21 | Convert.ToDouble(pt.Y))); |
22 |
23 | Pointpt7=myMap.MapToScreen( new MapPoint((Convert.ToDouble(pt.X)+circleKm*kmToEN), |
24 | Convert.ToDouble(pt.Y))); |
25 |
26 | Ellipseellipse7= new Ellipse(); |
27 | ellipse7.Width=(pt7.X-ptFirst.X)*2; |
28 | ellipse7.Height=ellipse7.Width; |
29 | ellipse7.StrokeThickness=1; |
30 | ellipse7.Stroke= new SolidColorBrush(ellipseStroke); |
31 | ellipse7.Fill= new SolidColorBrush(color); |
32 | Canvas.SetLeft(ellipse7,ptFirst.X-ellipse7.Width/2); |
33 | Canvas.SetTop(ellipse7,ptFirst.Y-ellipse7.Width/2); |
34 | ellipse7.Opacity=0.5; |
35 |
36 | container.Children.Add(ellipse7); |
37 | container.IsHitTestVisible= false ; |
38 | container.SetValue(Canvas.ZIndexProperty,-10); |
39 | } |
我前台是这样调用的
///<summary> |
///绘制7级风圈和10级风圈 |
///</summary> |
///<paramname="myMap"></param> |
///<paramname="sender"></param> |
public void DrawEllipse7And10WindCircle(MapmyMap, object sender) |
{ |
if (GisMap.LayerExist(myMap, "WindCircleLayer" )) |
{GisMap.DeleteLayersToMap(myMap, "WindCircleLayer" );} |
ElementLayercircleLayer= new ElementLayer(); |
circleLayer.ID= "WindCircleLayer" ; |
CanvascircleCanvas= new Canvas(); |
GraphictipGraphic=sender as Graphic; |
if (Convert.ToDouble(tipGraphic.Attributes[ "WindCircle7" ])!=0) |
{ |
Colorcolor= new Color(); |
color.A=255; |
color.R=153; |
color.G=105; |
color.B=192; |
DrawEllipse(myMap,circleCanvas, new MapPoint(Convert.ToDouble(tipGraphic.Attributes[ "Longitude" ]), |
Convert.ToDouble(tipGraphic.Attributes[ "Latitude" ])), ref circleLayer, |
Convert.ToDouble(300),color,Colors.Blue); |
} |
if (Convert.ToDouble(tipGraphic.Attributes[ "WindCircle10" ])!=0) |
{ |
Colorcolor= new Color(); |
color.A=255; |
color.R=111; |
color.G=91; |
color.B=171; |
this .DrawEllipse(myMap,circleCanvas, new MapPoint(Convert.ToDouble(tipGraphic.Attributes[ "Longitude" ]), |
Convert.ToDouble(tipGraphic.Attributes[ "Latitude" ])), ref circleLayer, |
Convert.ToDouble(tipGraphic.Attributes[ "WindCircle10" ]),color,Colors.Blue); |
} |
GisMap.AddLayersToMap(myMap, new ElementLayer[]{circleLayer}); |
} |
下面的代码就是在我从WebService取到实体后做添加点的代码:
///<summary> |
///添加台风点代码 |
///添加鼠标移入、移出事件 |
///</summary> |
///<paramname="model"></param> |
///<paramname="i"></param> |
private void AddPointToGraphic(TyphoonModelmodel, int i,List<Graphic>pointParam) |
{ |
SimpleMarkerSymbolsymbol= new SimpleMarkerSymbol(); |
Colorcolor= new Color(); |
color.A=255; |
if (Convert.ToDouble(model.WS)<=17.1) |
{ |
color.R=0; |
color.G=254; |
color.B=223; |
symbol.Color= new SolidColorBrush(color); |
} |
else if (Convert.ToDouble(model.WS)>17.1&&Convert.ToDouble(model.WS)<=24.4) |
{ |
color.R=254; |
color.G=243; |
color.B=0; |
symbol.Color= new SolidColorBrush(color); |
} |
else if (Convert.ToDouble(model.WS)>24.4&&Convert.ToDouble(model.WS)<=32.6) |
{ |
color.R=254; |
color.G=144; |
color.B=44; |
symbol.Color= new SolidColorBrush(color); |
} |
else if (Convert.ToDouble(model.WS)>32.6&&Convert.ToDouble(model.WS)<=41.4) |
{ |
color.R=254; |
color.G=4; |
color.B=4;symbol.Color= new SolidColorBrush(color); |
} |
else if (Convert.ToDouble(model.WS)>41.4&&Convert.ToDouble(model.WS)<=50.9) |
{ |
color.R=254; |
color.G=58; |
color.B=163;symbol.Color= new SolidColorBrush(color); |
} |
else if (Convert.ToDouble(model.WS)>50.9) |
{ |
color.R=174; |
color.G=0; |
color.B=217;symbol.Color= new SolidColorBrush(color); |
} |
symbol.Size=10; |
if (i==0) |
{ |
symbol.Style=SimpleMarkerSymbol.SimpleMarkerStyle.Square; |
} |
else |
{ |
symbol.Style=SimpleMarkerSymbol.SimpleMarkerStyle.Circle; |
} |
pointParam.Add( new Graphic() |
{ |
Geometry= new MapPoint(model.Longitude,model.Latitude), |
Symbol=symbol |
}); |
pointParam[i].Attributes.Add( "TyphoonID" ,model.TyphoonID); |
pointParam[i].Attributes.Add( "TyphoonNo" ,model.TyphoonNo); |
pointParam[i].Attributes.Add( "TyphoonName" ,model.TyphoonName); |
pointParam[i].Attributes.Add( "WindCircle7" ,model.WindCircle7); |
pointParam[i].Attributes.Add( "WindCircle10" ,model.WindCircle10); |
pointParam[i].Attributes.Add( "WS" ,model.WS); |
pointParam[i].Attributes.Add( "Pressure" ,model.Pressure); |
pointParam[i].Attributes.Add( "IssueTime" ,model.IssueTime); |
pointParam[i].Attributes.Add( "Future" ,model.Future); |
pointParam[i].Attributes.Add( "Latitude" ,model.Latitude); |
pointParam[i].Attributes.Add( "Longitude" ,model.Longitude); |
} |
我们先看下Xmal中的代码:
< Canvas x:Name = "typhoonPointInfoCanvas" Visibility = "Visible" Height = "188" HorizontalAlignment = "Left" Margin = "0,-272,0,0" VerticalAlignment = "Top" Width = "360" > |
< Path Stretch = "Fill" Stroke = "Black" Height = "168.5" Width = "328.5" UseLayoutRounding = "False" Canvas.Left = "0.5" Canvas.Top = "-0.5" Data = "M113,25C113,11.745166123.74516,1.0000004137,1.0000004L304,1.0000004C317.25482,1.0000004328,11.745166328,25L328,144C328,157.25484317.25482,168304,168L137,168 Fill = "{StaticResourceCommonGradient2}" /> |
< StackPanel Orientation = "Vertical" Height = "168" Width = "176" Canvas.Left = "137" Canvas.Top = "15" > |
< TextBlock x:Name = "typhoonNameTextBlock" Height = "20" Text = "名称:" Foreground = "White" TextWrapping = "Wrap" /> |
< TextBlock x:Name = "typhoonCollectionTimeTextBlock" Height = "20" Text = "时间:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
< TextBlock x:Name = "typhoonPositionTextBlock" Height = "20" Text = "位置:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
< TextBlock x:Name = "typhoonWSTextBlock" Height = "20" Text = "最大风速:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
< TextBlock x:Name = "typhoonPressureTextBlock" Height = "20" Text = "中心气压:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
< TextBlock x:Name = "typhoonCircle7TextBlock" Height = "20" Text = "7级风圈半径:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
< TextBlock x:Name = "typhoonCircle10TextBlock" Height = "20" Text = "10级风圈半径:" Foreground = "White" TextWrapping = "Wrap" d:LayoutOverrides = "HorizontalAlignment" /> |
</ StackPanel > |
</ Canvas > |
< BR > |
< LinearGradientBrush x:Key = "CommonGradient" StartPoint = "0.5,0" EndPoint = "0.5,1" >< GradientStop Offset = "0" Color = "#ee76a8d3" />< GradientStop Offset = "0.25" Color = "#ee5b8cb5" />< GradientStop Offset = "0.75" Color = "#ee4b7ba7" /></ LinearGradientBrush >< BR > |
当我们添加那些点也就是Graphic的时候有这样一个事件MouseEventHandler
01 | //添加点和线,先显示点层,动画结束后显示线层 |
02 | mapDraw.DrawLineAndPoint( ref point,myMap,gLayer, ref pointLine,e,length); |
03 |
04 |
05 | //添加点事件 |
06 | foreach
in
|
07 | { |
08 | item.MouseEnter+= new MouseEventHandler(MainPage_MouseEnter); |
09 | item.MouseLeave+= new MouseEventHandler(MainPage_DrawLine); |
10 | } |
01 | ///<summary> |
02 | ///绘制单条台风动画前的信息 |
03 | ///</summary> |
04 | ///<paramname="point"></param> |
05 | ///<paramname="myMap"></param> |
06 | ///<paramname="gLayer"></param> |
07 | ///<paramname="pointLine"></param> |
08 | ///<paramname="e"></param> |
09 | ///<paramname="length"></param> |
10 | public void DrawLineAndPoint( ref List<Graphic>point,MapmyMap,GraphicsLayergLayer, |
11 | ref ESRI.ArcGIS.Client.Geometry.PointCollectionpointLine,GetTyphoonsCompletedEventArgse, int length) |
12 | { |
13 | #region添加点代码 |
14 | point= new List<Graphic>(); |
15 | for ( int
|
16 | { |
17 | AddPointToGraphic(e.Result[i],i,point); |
18 | } |
19 | #endregion |
20 |
21 | //添加线的代码 |
22 | pointLine= new ESRI.ArcGIS.Client.Geometry.PointCollection(); |
23 | AddLineToMap(e.Result.ToList(),length,pointLine); |
24 |
25 | //显示点层 |
26 | GisMap.DrawAllLayers(myMap, new GraphicsLayer[]{gLayer},point); |
27 | GisMap.AddLayersToMap(myMap, new GraphicsLayer[]{gLayer}); |
28 | } |
1 | AddPointToGraphic这个方法就是图片上面的那段代码 |
1 | <SPANstyle= "FONT-SIZE:14px" >item.MouseEnter+= new MouseEventHandler(MainPage_MouseEnter);</SPAN> |
1 | item.MouseLeave+= new MouseEventHandler(MainPage_DrawLine); |
1 | 这两段代码就是我们添加鼠标移入和移出事件了,我们看下移入事件: |
01 | <DIV class =cnblogs_Highlighter><PRE class =brush:csharp> void MainPage_MouseEnter( object sender,MouseEventArgse) |
02 | { |
03 | Graphicgraphic=sender as Graphic; |
04 | Cursor=Cursors.Hand; |
05 |
06 | typhoonPointInfoCanvas.Visibility=Visibility.Visible; |
07 |
08 | Pointpt=myMap.MapToScreen( new MapPoint(Convert.ToDouble(graphic.Attributes[ "Longitude" ]),Convert.ToDouble(graphic.Attributes[ "Latitude" ]))); |
09 |
10 | typhoonPointInfoCanvas.SetValue(Grid.MarginProperty, new Thickness(pt.X,pt.Y,0,0)); |
11 |
12 | typhoonNameTextBlock.Text= "台风:" +graphic.Attributes[ "TyphoonName" ].ToString(); |
13 | typhoonCollectionTimeTextBlock.Text= "时间:" +graphic.Attributes[ "IssueTime" ].ToString(); |
14 | typhoonPositionTextBlock.Text= "位置:" +graphic.Attributes[ "Longitude" ].ToString()+ "°E," +graphic.Attributes[ "Latitude" ].ToString()+ "°N" ; |
15 | typhoonWSTextBlock.Text= "最大风速:" +graphic.Attributes[ "WS" ].ToString()+ "m/s" ; |
16 | typhoonPressureTextBlock.Text= "中心气压:" +graphic.Attributes[ "Pressure" ].ToString()+ "hPa" ; |
17 | typhoonCircle7TextBlock.Text= "7级风圈半径:" +graphic.Attributes[ "WindCircle7" ].ToString()+ "km" ; |
18 | typhoonCircle10TextBlock.Text= "10级风圈半径:" +graphic.Attributes[ "WindCircle10" ].ToString()+ "km" ; |
19 |
20 | circle.DrawEllipse7And10WindCircle(myMap,sender); |
21 | selectedGarphic=sender as Graphic; |
22 | }</PRE> |
23 | </DIV> |
1 | 我们看到在显示信息的同时我们又把圆画了上去<SPANstyle= "FONT-SIZE:14px" >DrawEllipse7And10WindCircle()这个函数</SPAN> |
01 | ///<summary> |
02 | ///ArcGis调用类 |
03 | ///动态加载、显示隐藏层数据、加载层上的点等 |
04 | ///日期:2010-5-10 |
05 | ///作者:AngelSoft |
06 | ///</summary> |
07 | public static class
|
08 | { |
09 |
10 | ///<summary> |
11 | ///绘制所有的点到地图上 |
12 | ///</summary> |
13 | ///<paramname="glayer"></param> |
14 | ///<paramname="cacheGraphic"></param> |
15 | public static void DrawSymbol(GraphicsLayerglayer,List<Graphic>cacheGraphic) |
16 | { |
17 | if (glayer!= null ) |
18 | { |
19 | int graphicCount=cacheGraphic.Count; |
20 | for ( int
|
21 | { |
22 | glayer.Graphics.Add(cacheGraphic[i]); |
23 | } //i |
24 | } |
25 | } |
001 | ///<summary> |
002 | ///加载所有图层上的点 |
003 | ///动态绘制 |
004 | ///图层和点的对应关系要正确 |
005 | ///有几个图层就要有几个点集合 |
006 | ///</summary> |
007 | ///<paramname="map">ArcGis地图变量</param> |
008 | ///<paramname="layers">GraphicLayer层数组</param> |
009 | ///<paramname="graphicParam">Graphic点数组</param> |
010 | public static void DrawLayers(Mapmap,GraphicsLayer[]layers, params List<Graphic>[]graphicParam) |
011 | { |
012 | //计算要绘制的层数并一层一层的绘制(调用动态绘制方法) |
013 | if (layers!= null ) |
014 | { |
015 | int length=layers.Length; |
016 | for ( int
|
017 | { |
018 | if (layers[i]== null ) |
019 | { |
020 | layers[i]= new GraphicsLayer(); |
021 | } |
022 | DynamicDrawSymbol(layers[i],graphicParam[i],map); |
023 | } |
024 | } |
025 | } |
026 |
027 |
028 | ///<summary> |
029 | ///加载所有图层上的点 |
030 | ///画所有点 |
031 | ///图层和点的对应关系要正确 |
032 | ///有几个图层就要有几个点集合 |
033 | ///</summary> |
034 | ///<paramname="map">ArcGis地图变量</param> |
035 | ///<paramname="layers">GraphicLayer层数组</param> |
036 | ///<paramname="graphicParam">Graphic点数组</param> |
037 | public static void DrawAllLayers(Mapmap,GraphicsLayer[]layers, params List<Graphic>[]graphicParam) |
038 | { |
039 | //计算要绘制的层数并一层一层的绘制(调用动态绘制方法) |
040 | if (layers!= null ) |
041 | { |
042 | int length=layers.Length; |
043 | for ( int
|
044 | { |
045 | if (layers[i]== null ) |
046 | { |
047 | layers[i]= new GraphicsLayer(); |
048 | } |
049 | DrawAllGraphics(layers[i],graphicParam[i]); |
050 | } |
051 | } |
052 | } |
053 |
054 |
055 |
056 | ///<summary> |
057 | ///隐藏或显示ArcGis层 |
058 | ///</summary> |
059 | ///<paramname="show">隐藏或显示</param> |
060 | ///<paramname="layers">层</param> |
061 | public static void LayersVisibility( bool show, params GraphicsLayer[]layers) |
062 | { |
063 | if (layers!= null ) |
064 | { |
065 | foreach (GraphicsLayeritem in layers) |
066 | { |
067 | item.Visible=show; |
068 | } |
069 | } |
070 | } |
071 |
072 |
073 | ///<summary> |
074 | ///将图层数组全部从map中移除 |
075 | ///</summary> |
076 | ///<paramname="map">表示一张ArcGis地图</param> |
077 | ///<paramname="layers">表示地图层的数组</param> |
078 | public static void DeleteLayersToMap(Mapmap,GraphicsLayer[]layers) |
079 | { |
080 | //逐个将数据移除 |
081 | foreach (GraphicsLayeritem in layers) |
082 | { |
083 | map.Layers.Remove(item); |
084 | } |
085 | } |
086 |
087 | ///<summary> |
088 | ///根据ID号删除某层 |
089 | ///</summary> |
090 | ///<paramname="map"></param> |
091 | ///<paramname="ID"></param> |
092 | ///<returns></returns> |
093 | public static void DeleteLayersToMap(Mapmap, string []ID) |
094 | { |
095 | int length=ID.Length; |
096 |
097 | for ( int
|
098 | { |
099 | foreach (Layeritem in map.Layers) |
100 | { |
101 | if (item.ID==ID[i]) |
102 | { |
103 | map.Layers.Remove(item); |
104 | length--; |
105 | break ; |
106 | } |
107 | } |
108 | } |
109 | } |
110 |
111 | ///<summary> |
112 | ///将图层数组全部从map中移除 |
113 | ///</summary> |
114 | ///<paramname="map">表示一张ArcGis地图</param> |
115 | ///<paramname="layers">表示地图层的数组</param> |
116 | public static void DeleteLayersToMap(Mapmap,ElementLayer[]layers) |
117 | { |
118 | //逐个将数据移除 |
119 | foreach (ElementLayeritem in layers) |
120 | { |
121 | map.Layers.Remove(item); |
122 | } |
123 | } |
124 |
125 |
126 | ///<summary> |
127 | ///删除地图上的某一层 |
128 | ///</summary> |
129 | ///<paramname="myMap"></param> |
130 | ///<paramname="ID">ID号</param> |
131 | public static void DeleteLayersToMap(MapmyMap, string ID) |
132 | { |
133 | int layers=myMap.Layers.Count; |
134 | for ( int
|
135 | { |
136 | if (myMap.Layers[i].ID==ID) |
137 | { |
138 | myMap.Layers.RemoveAt(i); |
139 | return ; |
140 | } |
141 | } |
142 | } |
143 |
144 |
145 | public static bool LayerExist(MapmyMap, string ID) |
146 | { |
147 | int layers=myMap.Layers.Count; |
148 | for ( int
|
149 | { |
150 | if (myMap.Layers[i].ID==ID) |
151 | { |
152 | return true ; |
153 | } |
154 | } |
155 | return false ; |
156 | } |
157 |
158 |
159 | ///<summary> |
160 | ///将图层数组全部添加到map中 |
161 | ///</summary> |
162 | ///<paramname="map">表示一张ArcGis地图</param> |
163 | ///<paramname="layers">表示地图层的数组</param> |
164 | public static void AddLayersToMap(Mapmap,GraphicsLayer[]layers) |
165 | { |
166 | //逐个将数据添加到当前地图中 |
167 | foreach (GraphicsLayeritem in layers) |
168 | { |
169 | if (item!= null ) |
170 | { |
171 | map.Layers.Add(item); |
172 | } |
173 | } |
174 | } |
175 |
176 | ///<summary> |
177 | ///将图层数组全部添加到map中 |
178 | ///</summary> |
179 | ///<paramname="map">表示一张ArcGis地图</param> |
180 | ///<paramname="layers">表示地图层的数组</param> |
181 | public static void AddLayersToMap(Mapmap,ElementLayer[]layers) |
182 | { |
183 | //逐个将数据添加到当前地图中 |
184 | foreach (ElementLayeritem in layers) |
185 | { |
186 | map.Layers.Add(item); |
187 | } |
188 | } |
189 |
190 | ///<summary> |
191 | ///绘制所有的点到地图上 |
192 | ///</summary> |
193 | ///<paramname="eLayer"></param> |
194 | ///<paramname="image"></param> |
195 | public static void AddImageToElementLayer(ElementLayereLayer,List<Image>image) |
196 | { |
197 | if (eLayer!= null ) |
198 | { |
199 | foreach (Imageitem in image) |
200 | { |
201 | eLayer.Children.Add(item); |
202 | } |
203 | } |
204 | } |
205 |
206 | ///<summary> |
207 | ///隐藏或显示ArcGis层 |
208 | ///</summary> |
209 | ///<paramname="show">隐藏或显示</param> |
210 | ///<paramname="layers">层</param> |
211 | public static void LayersVisibility( bool show, params ElementLayer[]layers) |
212 | { |
213 | if (layers!= null ) |
214 | { |
215 | foreach (ElementLayeritem in layers) |
216 | { |
217 | item.Visible=show; |
218 | } |
219 | } |
220 | } |
221 |
222 | ///<summary> |
223 | ///动态加载图层 |
224 | ///使用ElementLayer层 |
225 | ///</summary> |
226 | ///<paramname="eLayer"></param> |
227 | ///<paramname="cacheGraphic"></param> |
228 | ///<paramname="map"></param> |
229 | public static void DynamicDrawElementLayer(ElementLayereLayer,List<UIElement>cacheElement,Mapmap) |
230 | { |
231 | //以下四个变量分别表示地图的四个边 |
232 | //即最大经纬度和最小经纬度 |
233 | //xMax最大经度,yMax最大纬度 |
234 | double xMax=map.Extent.XMax+2; |
235 | double xMin=map.Extent.XMin-2; |
236 | double yMax=map.Extent.YMax+2; |
237 | double yMin=map.Extent.YMin-2; |
238 |
239 | //去除不在坐标范围内的点,先检查图层是否为空 |
240 | if (eLayer!= null ) |
241 | { |
242 | int graphicCount=eLayer.Children.Count; |
243 | for ( int
|
244 | { |
245 | UIElementelement=eLayer.Children[i]; |
246 |
247 | //判断经度,纬度 |
248 | if (!(((element.GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.XMax<xMax&&(element.GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.XMax>xMin) |
249 | &&((element.GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.YMax<yMax&&(element.GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.YMax>yMin))) |
250 | { |
251 | //将点在地图上移除,并放在缓存中 |
252 | cacheElement.Add(eLayer.Children[i]); |
253 | eLayer.Children.Remove(eLayer.Children[i]); |
254 | graphicCount--; //当从集合中移除元素时应该把graphicCount减1 |
255 | i--; //元素被移除后相当于当前元素的后一位元素会-1,应该再循环一次本次循环所以应该-1 |
256 | } |
257 | } //i |
258 | } |
259 |
260 | //检查缓存是否为空,并将点绘制到图形上 |
261 | if (cacheElement!= null ) |
262 | { |
263 | int count=cacheElement.Count; |
264 | for ( int
|
265 | { |
266 | //判断经度,纬度 |
267 | if (((cacheElement[i].GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.XMax<xMax&&(cacheElement[i].GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.XMax>xMin) |
268 | &&((cacheElement[i].GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.YMax<yMax&&(cacheElement[i].GetValue(ElementLayer.EnvelopeProperty) as Envelope).Extent.YMax>yMin)) |
269 | { |
270 | //运行到此则该点在目前地图范围内,将该点加入到地图中 |
271 | eLayer.Children.Add(cacheElement[i]); |
272 | cacheElement.Remove(cacheElement[i]); |
273 | count--; //当从集合中移除元素时应该把count减1 |
274 | i--; //元素被移除后相当于当前元素的后一位元素会-1,应该再循环一次本次循环所以应该-1 |
275 | continue ; |
276 | } |
277 | } |
278 | } |
279 | } |
280 |
281 | ///<summary> |
282 | ///将所有元素画到地图上 |
283 | ///</summary> |
284 | ///<paramname="eLayer"></param> |
285 | ///<paramname="cacheElement"></param> |
286 | public static void DrawAllUIElement(ElementLayereLayer,List<UIElement>cacheElement) |
287 | { |
288 | if (eLayer!= null ) |
289 | { |
290 | foreach (UIElementitem in cacheElement) |
291 | { |
292 | eLayer.Children.Add(item); |
293 | } |
294 | } |
295 | } |
296 |
297 | ///<summary> |
298 | ///动态的绘制图层 |
299 | ///当然地图移动到相应的坐标后绘制(保留原来的点,绘制新的数据) |
300 | ///实现了无刷新绘制 |
301 | ///</summary> |
302 | ///<paramname="glayer">表示地图上的层</param> |
303 | ///<paramname="cacheGraphic">存放Graphics的缓存</param> |
304 | ///<paramname="map">表示一张ArcGis地图</param> |
305 | private static void DynamicDrawSymbol(GraphicsLayerglayer,List<Graphic>cacheGraphic,Mapmap) |
306 | { |
307 | //以下四个变量分别表示地图的四个边 |
308 | //即最大经纬度和最小经纬度 |
309 | //xMax最大经度,yMax最大纬度 |
310 | double xMax=map.Extent.XMax+2; |
311 | double xMin=map.Extent.XMin-2; |
312 | double yMax=map.Extent.YMax+2; |
313 | double yMin=map.Extent.YMin-2; |
314 |
315 | //去除不在坐标范围内的点,先检查图层是否为空 |
316 | if (glayer!= null ) |
317 | { |
318 | int graphicCount=glayer.Graphics.Count; |
319 | for ( int
|
320 | { |
321 | //判断经度,纬度 |
322 | if (!((glayer.Graphics[i].Geometry.Extent.XMax<xMax&&glayer.Graphics[i].Geometry.Extent.XMax>xMin) |
323 | &&(glayer.Graphics[i].Geometry.Extent.YMax<yMax&&glayer.Graphics[i].Geometry.Extent.YMax>yMin))) |
324 | { |
325 | //将点在地图上移除,并放在缓存中 |
326 | cacheGraphic.Add(glayer.Graphics[i]); |
327 | glayer.Graphics.Remove(glayer.Graphics[i]); |
328 | graphicCount--; //当从集合中移除元素时应该把graphicCount减1 |
329 | i--; //元素被移除后相当于当前元素的后一位元素会-1,应该再循环一次本次循环所以应该-1 |
330 | } |
331 | } //i |
332 | } |
333 |
334 | //检查缓存是否为空,并将点绘制到图形上 |
335 | if (cacheGraphic!= null ) |
336 | { |
337 | int count=cacheGraphic.Count; |
338 | for ( int
|
339 | { |
340 | //判断经度,纬度 |
341 | if ((cacheGraphic[i].Geometry.Extent.XMax<xMax&&cacheGraphic[i].Geometry.Extent.XMax>xMin) |
342 | &&(cacheGraphic[i].Geometry.Extent.YMax<yMax&&cacheGraphic[i].Geometry.Extent.YMax>yMin)) |
343 | { |
344 | //运行到此则该点在目前地图范围内,将该点加入到地图中 |
345 | glayer.Graphics.Add(cacheGraphic[i]); |
346 | cacheGraphic.Remove(cacheGraphic[i]); |
347 | count--; //当从集合中移除元素时应该把count减1 |
348 | i--; //元素被移除后相当于当前元素的后一位元素会-1,应该再循环一次本次循环所以应该-1 |
349 | continue ; |
350 | } |
351 | } |
352 | } |
353 | } |
354 |
355 | ///<summary> |
356 | ///将所有元素画到地图上 |
357 | ///</summary> |
358 | ///<paramname="eLayer"></param> |
359 | ///<paramname="cacheElement"></param> |
360 | private static void DrawAllGraphics(GraphicsLayereLayer,List<Graphic>cacheGraphic) |
361 | { |
362 | if (eLayer!= null ) |
363 | { |
364 | foreach (Graphicitem in cacheGraphic) |
365 | { |
366 | eLayer.Graphics.Add(item); |
367 | } |
368 | } |
369 | } |
370 | } |
就会非常的卡,基本都动不了,所以我们要动态去加载这些点。
相关文章推荐
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点、线、圆,显示提示信息
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- 【网摘】ArcGis for silverlights api 地图显示Gis绘制点线绘制图 以及提示信息
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(四)--动态绘制点
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(四)--动态绘制点
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(四)--动态绘制点
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- ArcGIS API for Silverlight 地图元素点闪烁,线流动显示的处理方式
- Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示
- Arcgis API for JavaScript在地图上实现手机定位信息的追踪显示
- ArcGIS API for silverlight-本地发布的地图不能显示