ArcGIS.Server.9.2.DotNet自带例子分析(三、二)
目的:
1.arcgis server9.2 ADF的AddGraphics-FeatureGraphicLayer。
准备工作:
1.(三、一)的工程,具体见前篇。。
开始:
1.在页面上在新增一个Toolbar2,在ToolbarItems中添加一个Tool然后设置相应的属性,具体如下:
1
<ToolbarItems>
2
<esri:Tool ClientAction="Point" JavaScriptFile="" Name="AddFeature" ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureGraphicTool"Text="Add Feature Point" />
3
</ToolbarItems>
<ToolbarItems>2
<esri:Tool ClientAction="Point" JavaScriptFile="" Name="AddFeature" ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureGraphicTool"Text="Add Feature Point" />3
</ToolbarItems>2.在GraphicPointTools.cs中新增加FeatureGraphicTool类来实现上面的Tool的功能,具体代码和说明如下:
1
public class FeatureGraphicTool : IMapServerToolAction
2
{
3
void IMapServerToolAction.ServerAction(ToolEventArgs toolEventArgs)
4
{
5
//获取map控件
6
ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;
7
//转成点
8
PointEventArgs pointEventArgs = (PointEventArgs)toolEventArgs;
9
//屏幕点
10
System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint;
11
12
//屏幕坐标转成地理坐标
13
ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint.X, screenPoint.Y, adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));
14
15
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;
16
//MapFunctionality
17
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())
18
{
19
//当Resource为ADFGraphicsResource,ADFGraphicsResource为GraphicsLayer, 保存在内存中用显示临时图层
20
if (mapFunctionality.Resource.Name == "ADFGraphicsResource")
21
{
22
adfGraphicsMapFunctionality = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
23
break;
24
}
25
}
26
27
//当为null的时候调用Utility.ProcessError方法弹出提示框
28
if (adfGraphicsMapFunctionality == null)
29
{
30
//把Utility.ProcessError处理的CallbackResultCollection结果赋给Map控件
31
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF graphics functionality not found"));
32
return;
33
}
34
35
//FeatureGraphicLayer类似feature layer,能建立属性信息,并能基于属性来符号化。图层只能存储同一图形类型。FeatureGraphicLayer可以支持查询。
36
ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;
37
//从adfGraphicsMapFunctionality获取名为Feature Graphics的DataTable
38
foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables)
39
{
40
if (dataTable.TableName == "Feature Graphics")
41
{
42
featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable;
43
break;
44
}
45
}
46
47
//如果名为Feature Graphics的DataTable为null,就新建Feature Graphics DataTable
48
if (featureGraphicsLayer == null)
49
{
50
//新建DataTable Feature Graphics
51
featureGraphicsLayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer();
52
featureGraphicsLayer.TableName = "Feature Graphics";
53
adfGraphicsMapFunctionality.GraphicsDataSet.Tables.Add(featureGraphicsLayer);
54
55
//添加字段x
56
System.Data.DataColumn xDataColumn =new System.Data.DataColumn("X", System.Type.GetType("System.Double"));
57
featureGraphicsLayer.Columns.Add(xDataColumn);
58
//添加字段y
59
System.Data.DataColumn yDataColumn =new System.Data.DataColumn("Y", System.Type.GetType("System.Double"));
60
featureGraphicsLayer.Columns.Add(yDataColumn);
61
//添加字段CustomDataColumn
62
System.Data.DataColumn customDataColumn =new System.Data.DataColumn("CustomDataColumn",System.Type.GetType("System.Int32"));
63
featureGraphicsLayer.Columns.Add(customDataColumn);
64
65
//CustomDataColumn的值等于0时的显示样式
66
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> zeroUniqueValue =new ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>(0);
67
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol zeroSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
68
zeroSymbol.Color = System.Drawing.Color.Red;
69
zeroSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Circle;
70
zeroSymbol.Width = 12;
71
zeroUniqueValue.Symbol = zeroSymbol;
72
zeroUniqueValue.SymbolLabel = "0";
73
74
//CustomDataColumn的值等于1时的显示样式
75
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> oneUniqueValue =new ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>(1);
76
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol oneSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
77
oneSymbol.Color = System.Drawing.Color.Blue;
78
oneSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Circle;
79
oneSymbol.Width = 12;
80
oneUniqueValue.Symbol = oneSymbol;
81
oneUniqueValue.SymbolLabel = "1";
82
83
84
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int> valueMapRenderer =new ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int>();
85
valueMapRenderer.ValueColumnName = "CustomDataColumn";
86
87
//默认的显示样式
88
valueMapRenderer.DefaultLabel = "Default Value";
89
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol defaultSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
90
defaultSymbol.Color = System.Drawing.Color.Black;
91
defaultSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Cross;
92
defaultSymbol.Width = 12;
93
valueMapRenderer.DefaultSymbol = defaultSymbol;
94
95
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection<int> valueCollection =valueMapRenderer.Values;
96
valueCollection.Add(zeroUniqueValue);
97
valueCollection.Add(oneUniqueValue);
98
99
//Renderer数据显示样式
100
featureGraphicsLayer.Renderer = valueMapRenderer;
101
102
//刷新Toc1
103
Toc adfToc = (Toc)Utility.FindControl("Toc1", adfMap.Page);
104
adfToc.Refresh();
105
//通知客户端更新显示
106
adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);
107
108
// 执行客户端脚本
109
CallbackResult enableCheckBoxCallbackResult =new CallbackResult(null, null, "javascript", string.Format("document.getElementById('{0}').disabled = false", "maptipsCheckBox"));
110
//通知客户端更新显示
111
adfMap.CallbackResults.Add(enableCheckBoxCallbackResult);
112
113
}
114
115
System.Data.DataRow newDataRow = featureGraphicsLayer.Add(adfPoint);
116
//随机的给CustomDataColumn赋值,随机的出现上面定义的2个显示样式
117
Random randomizer = new Random();
118
int randomValue = randomizer.Next(0, 2);
119
newDataRow["CustomDataColumn"] = randomValue;
120
121
//把x,y存到表里
122
newDataRow["X"] = string.Format("{0:#.##}", adfPoint.X);
123
newDataRow["Y"] = string.Format("{0:#.##}", adfPoint.Y);
124
125
//刷新地图显示
126
if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier)
127
{
128
adfMap.Refresh();
129
}
130
else
131
{
132
adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name);
133
}
134
135
}
136
}
3.在Toolbar2的ToolbarItems中在添加一个DropDownBox然后设置相应的属性,具体如下:
public class FeatureGraphicTool : IMapServerToolAction2
{3
void IMapServerToolAction.ServerAction(ToolEventArgs toolEventArgs)4
{5
//获取map控件6
ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;7
//转成点8
PointEventArgs pointEventArgs = (PointEventArgs)toolEventArgs;9
//屏幕点10
System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint;11

12
//屏幕坐标转成地理坐标13
ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint.X, screenPoint.Y, adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));14

15
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;16
//MapFunctionality17
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())18
{19
//当Resource为ADFGraphicsResource,ADFGraphicsResource为GraphicsLayer, 保存在内存中用显示临时图层20
if (mapFunctionality.Resource.Name == "ADFGraphicsResource")21
{22
adfGraphicsMapFunctionality = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;23
break;24
}25
}26

27
//当为null的时候调用Utility.ProcessError方法弹出提示框28
if (adfGraphicsMapFunctionality == null)29
{30
//把Utility.ProcessError处理的CallbackResultCollection结果赋给Map控件31
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF graphics functionality not found"));32
return;33
}34

35
//FeatureGraphicLayer类似feature layer,能建立属性信息,并能基于属性来符号化。图层只能存储同一图形类型。FeatureGraphicLayer可以支持查询。36
ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;37
//从adfGraphicsMapFunctionality获取名为Feature Graphics的DataTable38
foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables)39
{40
if (dataTable.TableName == "Feature Graphics")41
{42
featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable;43
break;44
}45
}46

47
//如果名为Feature Graphics的DataTable为null,就新建Feature Graphics DataTable48
if (featureGraphicsLayer == null)49
{50
//新建DataTable Feature Graphics51
featureGraphicsLayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer();52
featureGraphicsLayer.TableName = "Feature Graphics";53
adfGraphicsMapFunctionality.GraphicsDataSet.Tables.Add(featureGraphicsLayer);54

55
//添加字段x56
System.Data.DataColumn xDataColumn =new System.Data.DataColumn("X", System.Type.GetType("System.Double"));57
featureGraphicsLayer.Columns.Add(xDataColumn);58
//添加字段y59
System.Data.DataColumn yDataColumn =new System.Data.DataColumn("Y", System.Type.GetType("System.Double"));60
featureGraphicsLayer.Columns.Add(yDataColumn);61
//添加字段CustomDataColumn62
System.Data.DataColumn customDataColumn =new System.Data.DataColumn("CustomDataColumn",System.Type.GetType("System.Int32"));63
featureGraphicsLayer.Columns.Add(customDataColumn);64

65
//CustomDataColumn的值等于0时的显示样式66
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> zeroUniqueValue =new ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>(0);67
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol zeroSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();68
zeroSymbol.Color = System.Drawing.Color.Red;69
zeroSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Circle;70
zeroSymbol.Width = 12;71
zeroUniqueValue.Symbol = zeroSymbol;72
zeroUniqueValue.SymbolLabel = "0";73

74
//CustomDataColumn的值等于1时的显示样式75
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> oneUniqueValue =new ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>(1);76
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol oneSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();77
oneSymbol.Color = System.Drawing.Color.Blue;78
oneSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Circle;79
oneSymbol.Width = 12;80
oneUniqueValue.Symbol = oneSymbol;81
oneUniqueValue.SymbolLabel = "1";82

83
84
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int> valueMapRenderer =new ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int>();85
valueMapRenderer.ValueColumnName = "CustomDataColumn";86

87
//默认的显示样式88
valueMapRenderer.DefaultLabel = "Default Value";89
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol defaultSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();90
defaultSymbol.Color = System.Drawing.Color.Black;91
defaultSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Cross;92
defaultSymbol.Width = 12;93
valueMapRenderer.DefaultSymbol = defaultSymbol;94

95
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection<int> valueCollection =valueMapRenderer.Values;96
valueCollection.Add(zeroUniqueValue);97
valueCollection.Add(oneUniqueValue);98

99
//Renderer数据显示样式100
featureGraphicsLayer.Renderer = valueMapRenderer;101

102
//刷新Toc1103
Toc adfToc = (Toc)Utility.FindControl("Toc1", adfMap.Page);104
adfToc.Refresh();105
//通知客户端更新显示106
adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);107

108
// 执行客户端脚本109
CallbackResult enableCheckBoxCallbackResult =new CallbackResult(null, null, "javascript", string.Format("document.getElementById('{0}').disabled = false", "maptipsCheckBox"));110
//通知客户端更新显示111
adfMap.CallbackResults.Add(enableCheckBoxCallbackResult);112

113
}114

115
System.Data.DataRow newDataRow = featureGraphicsLayer.Add(adfPoint);116
//随机的给CustomDataColumn赋值,随机的出现上面定义的2个显示样式117
Random randomizer = new Random();118
int randomValue = randomizer.Next(0, 2);119
newDataRow["CustomDataColumn"] = randomValue;120

121
//把x,y存到表里122
newDataRow["X"] = string.Format("{0:#.##}", adfPoint.X);123
newDataRow["Y"] = string.Format("{0:#.##}", adfPoint.Y);124

125
//刷新地图显示126
if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier)127
{ 128
adfMap.Refresh(); 129
}130
else131
{ 132
adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); 133
}134

135
}136
}1
<esri:DropDownBox ClientAction="" DropDownListWidth="100" Items="<Items><ListItem Text="Red_Blue" Value="Red_Blue" Selected="True" /><ListItem Text="Yellow_Green" Value="Yellow_Green" Selected="False" /><ListItem Text="Orange_Purple" Value="Orange_Purple" Selected="False" /></Items>"
2
JavaScriptFile="" Label="Colors:" LabelWidth="100" Name="DropDownBoxColor" SelectedIndex="0"
3
ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureDropDownColor" />
<esri:DropDownBox ClientAction="" DropDownListWidth="100" Items="<Items><ListItem Text="Red_Blue" Value="Red_Blue" Selected="True" /><ListItem Text="Yellow_Green" Value="Yellow_Green" Selected="False" /><ListItem Text="Orange_Purple" Value="Orange_Purple" Selected="False" /></Items>"2
JavaScriptFile="" Label="Colors:" LabelWidth="100" Name="DropDownBoxColor" SelectedIndex="0"3
ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureDropDownColor" />4.在GraphicPointTools.cs中新增加FeatureDropDownColor类来实现上面的DropDownBox的功能,具体代码和说明如下:
1
public class FeatureDropDownColor : IMapServerDropDownBoxAction
2
{
3
void IServerAction.ServerAction(ToolbarItemInfo toolbarItemInfo)
4
{
5
//获取地图控件
6
ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap =(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolbarItemInfo.BuddyControls[0];
7
//获取DropDownBoxColor控件
8
DropDownBox adfDropDownBox =(DropDownBox)toolbarItemInfo.Toolbar.ToolbarItems.Find("DropDownBoxColor");
9
//获取DropDownBoxColor的选择值
10
string selectedColor = adfDropDownBox.SelectedValue;
11
//MapFunctionality
12
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;
13
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())
14
{
15
if (mapFunctionality.Resource.Name == "ADFGraphicsResource")
16
{
17
adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
18
break;
19
}
20
}
21
//当为null的时候调用Utility.ProcessError方法弹出提示框
22
if (adfGraphicsMapFunctionality == null)
23
{
24
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF graphics functionality not found"));
25
return;
26
}
27
28
//FeatureGraphicLayer类似feature layer,能建立属性信息,并能基于属性来符号化。图层只能存储同一图形类型。FeatureGraphicLayer可以支持查询。
29
ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;
30
//从adfGraphicsMapFunctionality获取名为Feature Graphics的DataTable
31
foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables)
32
{
33
if (dataTable.TableName == "Feature Graphics")
34
{
35
featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable;
36
break;
37
}
38
}
39
40
//如果Feature Graphics的DataTable为null,设置DropDownBoxColor为原始值,同时调用Utility.ProcessError方法弹出提示框
41
if (featureGraphicsLayer == null)
42
{
43
//设置DropDownBoxColor为原始值的脚本
44
string jsResetDropDownList = string.Format("document.getElementById('{0}{1}{2}').value = 'Red_Blue'",toolbarItemInfo.Toolbar.ClientID, adfDropDownBox.Name, adfDropDownBox.Type);
45
//执行上面的脚本
46
CallbackResult resetDropDownListCallbackResult =new CallbackResult(null, null, "javascript", jsResetDropDownList);
47
adfMap.CallbackResults.Add(resetDropDownListCallbackResult);
48
//调用Utility.ProcessError方法弹出提示框
49
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF feature graphics layer not found"));
50
return;
51
}
52
53
//获取当前的Renderer
54
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int> currentValueMapRenderer =(ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int>)featureGraphicsLayer.Renderer;
55
//获取当前的ValueCollection
56
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection<int> currentValueCollection =currentValueMapRenderer.Values;
57
58
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> currentZeroUniqueValue =(ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>)currentValueCollection[0];
59
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> currentOneUniqueValue =(ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>)currentValueCollection[1];
60
61
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol currentZeroSymbol =(ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentZeroUniqueValue.Symbol;
62
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol currentOneSymbol =(ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentOneUniqueValue.Symbol;
63
64
//更加不同的颜色设置不同的显示颜色
65
switch (selectedColor)
66
{
67
case "Red_Blue":
68
currentZeroSymbol.Color = System.Drawing.Color.Red;
69
currentOneSymbol.Color = System.Drawing.Color.Blue;
70
break;
71
case "Yellow_Green":
72
currentZeroSymbol.Color = System.Drawing.Color.Yellow;
73
currentOneSymbol.Color = System.Drawing.Color.Green;
74
break;
75
case "Orange_Purple":
76
currentZeroSymbol.Color = System.Drawing.Color.Orange;
77
currentOneSymbol.Color = System.Drawing.Color.Purple;
78
break;
79
default:
80
break;
81
}
82
83
//刷新Toc1显示
84
Toc adfToc = (Toc)Utility.FindControl("Toc1", adfMap.Page);
85
adfToc.Refresh();
86
adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);
87
88
//刷新地图显示
89
if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier)
90
{
91
adfMap.Refresh();
92
}
93
else
94
{
95
adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name);
96
}
97
}
98
}
public class FeatureDropDownColor : IMapServerDropDownBoxAction2
{3
void IServerAction.ServerAction(ToolbarItemInfo toolbarItemInfo)4
{5
//获取地图控件6
ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap =(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolbarItemInfo.BuddyControls[0];7
//获取DropDownBoxColor控件8
DropDownBox adfDropDownBox =(DropDownBox)toolbarItemInfo.Toolbar.ToolbarItems.Find("DropDownBoxColor");9
//获取DropDownBoxColor的选择值10
string selectedColor = adfDropDownBox.SelectedValue;11
//MapFunctionality12
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;13
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())14
{15
if (mapFunctionality.Resource.Name == "ADFGraphicsResource")16
{17
adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;18
break;19
}20
}21
//当为null的时候调用Utility.ProcessError方法弹出提示框22
if (adfGraphicsMapFunctionality == null)23
{24
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF graphics functionality not found"));25
return;26
}27

28
//FeatureGraphicLayer类似feature layer,能建立属性信息,并能基于属性来符号化。图层只能存储同一图形类型。FeatureGraphicLayer可以支持查询。29
ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;30
//从adfGraphicsMapFunctionality获取名为Feature Graphics的DataTable31
foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables)32
{33
if (dataTable.TableName == "Feature Graphics")34
{35
featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable;36
break;37
}38
}39

40
//如果Feature Graphics的DataTable为null,设置DropDownBoxColor为原始值,同时调用Utility.ProcessError方法弹出提示框41
if (featureGraphicsLayer == null)42
{43
//设置DropDownBoxColor为原始值的脚本44
string jsResetDropDownList = string.Format("document.getElementById('{0}{1}{2}').value = 'Red_Blue'",toolbarItemInfo.Toolbar.ClientID, adfDropDownBox.Name, adfDropDownBox.Type);45
//执行上面的脚本46
CallbackResult resetDropDownListCallbackResult =new CallbackResult(null, null, "javascript", jsResetDropDownList);47
adfMap.CallbackResults.Add(resetDropDownListCallbackResult);48
//调用Utility.ProcessError方法弹出提示框49
adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF feature graphics layer not found"));50
return;51
}52

53
//获取当前的Renderer54
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int> currentValueMapRenderer =(ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer<int>)featureGraphicsLayer.Renderer;55
//获取当前的ValueCollection56
ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection<int> currentValueCollection =currentValueMapRenderer.Values;57

58
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> currentZeroUniqueValue =(ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>)currentValueCollection[0];59
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int> currentOneUniqueValue =(ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue<int>)currentValueCollection[1];60

61
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol currentZeroSymbol =(ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentZeroUniqueValue.Symbol;62
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol currentOneSymbol =(ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentOneUniqueValue.Symbol;63

64
//更加不同的颜色设置不同的显示颜色65
switch (selectedColor)66
{67
case "Red_Blue":68
currentZeroSymbol.Color = System.Drawing.Color.Red;69
currentOneSymbol.Color = System.Drawing.Color.Blue;70
break;71
case "Yellow_Green":72
currentZeroSymbol.Color = System.Drawing.Color.Yellow;73
currentOneSymbol.Color = System.Drawing.Color.Green;74
break;75
case "Orange_Purple":76
currentZeroSymbol.Color = System.Drawing.Color.Orange;77
currentOneSymbol.Color = System.Drawing.Color.Purple;78
break;79
default:80
break;81
}82

83
//刷新Toc1显示84
Toc adfToc = (Toc)Utility.FindControl("Toc1", adfMap.Page);85
adfToc.Refresh();86
adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);87

88
//刷新地图显示89
if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier)90
{ 91
adfMap.Refresh(); 92
}93
else94
{ 95
adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); 96
}97
}98
}5.这样就完成了添加上的点的颜色变更的功能,然后在Toolbar2的ToolbarItems中在添加一个DropDownBox然后设置相应的属性用来实现变换添加点的显示形状的功能,具体如下:
1
<esri:DropDownBox ClientAction="" DropDownListWidth="100" Items="<Items><ListItem Text="Circle" Value="Circle" Selected="True" /><ListItem Text="Square" Value="Square" Selected="False" /><ListItem Text="Star" Value="Star" Selected="False" /></Items>"
2
JavaScriptFile="" Label="Type:" LabelWidth="100" Name="DropDownBoxSymbol" SelectedIndex="0"
3
ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureDropDownSymbol" />
6.在GraphicPointTools.cs中新增加FeatureDropDownSymbol类来实现上面的DropDownBoxSymbol的功能,具体代码和说明如下:
<esri:DropDownBox ClientAction="" DropDownListWidth="100" Items="<Items><ListItem Text="Circle" Value="Circle" Selected="True" /><ListItem Text="Square" Value="Square" Selected="False" /><ListItem Text="Star" Value="Star" Selected="False" /></Items>"2
JavaScriptFile="" Label="Type:" LabelWidth="100" Name="DropDownBoxSymbol" SelectedIndex="0"3
ServerActionAssembly="AddGraphics" ServerActionClass="AddGraphics.FeatureDropDownSymbol" /> 1
public class FeatureDropDownSymbol : IMapServerDropDownBoxAction
2
{
3
IServerAction Members
96
97
}
7.这样就完成了添加点的形状变换的功能了。本例子到这里也分析结束了,关于其中的MapTips 的功能好像有问题了这里就暂时不讲了。
public class FeatureDropDownSymbol : IMapServerDropDownBoxAction2
{3
IServerAction Members96

97
}


浙公网安备 33010602011771号