WEB GIS实习报告(课程设计) - 图文
更新时间:2024-04-25 21:47:01 阅读量: 综合文库 文档下载
- web3.0是什么意思推荐度:
- 相关推荐
学 生 实
实习名称:学 号:学生姓名:指导教师:专业班级:院(部):习 报 告
2013年 日
月
实习成绩评定表
指导老师评语: 成绩: 指导老师: 年 月 日
Web GIS实习报告
一.实验目的
1.了解WebGIS的基本功能以及各种模式构成; 2.使用VS创建并生成.NET Web应用程序; 3.掌握基于ArcServe建立地图发布系统的技能。 4.基于.NET平台进行WebGIS开发。
二.实验要求
1.熟悉WebGIS模式;
2.熟悉用ArcGis Server Manager或者ArcCatalog发布Map Service并预览。 3.熟悉ArcSever的控件及功能; 4.建立客户端的地图发布网页; 5.在IIS中发布并预览。
三.实验软件
1.安装iis服务; 2.安装VS; 3.安装IE浏览器;
4.安装Arcgis desktop和Arcgis Sever;
四.实验内容
1.实验一. Web Mapping Application; 2.实验二.callback; 3.实验三. AddGraphics; 4,实验四. QueryNewWindow
五.实验步骤及实验结果
1.实验一. Web Mapping Application 1)实验步骤:
(1)用ArcGis Server Manager或者ArcCatalog发布一个自定义名字的Map
Service,并且把这个Service启动起来;
(2)新建名为MappingApp的ASP.NET Web应用程序,即普通的Web应用程序; (3)在Default.aspx中放置需要的控件:1个Map、1个Toolbar、1个
MapResourceManager、3个FloatingPanel、1个OverviewMap、1个Toc、1个Navigation;
(4)OverviewMap、Toc、Navigation分别放置在3个FloatingPanel。 (5)设置MapResourceManager1,点击MapResourceItem填出对话框,点击添
加按钮新增一个MapResourceItem0然后点击Definition属性弹出对话框,设置如下,Type:ArcGIS Server Local;Data Source:myssis(我的机器名);Resource:(default)@world(点击按钮选择上面发布好的叫world的Map Service),完成设置。
(6)设置Map1控件的MapResourceManager,在属性栏下拉选中
MapResourceManager1。
(7)设置OverviewMap1的Map属性为Map1,MapResourceManager属性为
MapResourceManager1,OverviewMapResource属性为MapResourceItem0。 (8)设置Toc1的BuddyControl属性为Map1。
(9)设置Navigation1的的Map属性为Map1,可以通过设置DisplayCharacter
属性改变显示的样子。
(10)MapResourceManager控件需要添加ESRI.ArcGIS.ADF.Web.DataSources
引用,在vs右边的资源管理器右键点击\引用\然后添加引用找到ESRI.ArcGIS.ADF.Web.DataSources确定即可。
(11)设置Toolbar1,BuddyControlType属性为Map,ToolbarStyle属性为
ImageOnly, BuddyControl属性为Map1,ToolbarItems属性:在弹出对话框中把Map Navigation下的MapZoomIn、MapZoomOut、MapPan、MapFullExtent都添加,不需要做其他设置。
(12)调试运行,本实验不需要添加代码即可完成了基本的地图功能。
2)实验结果:
2.实验二. Callback 1)实验步骤:
(1)用ArcGis Server Manager或者ArcCatalog发布一个自定义名字的Map
Service,并且把这个Service启动起来;
(2)新建名为callback的ASP.NET Web应用程序,即普通的Web应用程序; (3)Default.aspx页面中加入MapResourceManager控件ID为Map Resource
Manager1,并且设置MapResourceItem的属性;Map控件ID为Map1,MapResourceManager属性为MapResourceManager1。
(4)在地图控件的4个边分别添加LabelW、LabelN、LabelE、LabelS DIV控件; (5)做当地图视图范围发生变化时更新4个边的LabelW、LabelN、LabelE、LabelS
DIV控件坐标显示,显示的是地图每个边的坐标,给Map1控件添加protected void Map1_ExtentChanged(object sender, ExtentEventArgs args)事件,然后编写相应的代码:
protected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args) 2
{//获取地图控件的框
4 ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = args.NewExtent; SortedList
6 slist.Add(\, env.YMax.ToString(\));//最北的坐标 7 slist.Add(\, env.XMax.ToString(\));//最东的坐标 9 slist.Add(\, env.YMin.ToString(\)); //最南的坐标 slist.Add(\, env.XMin.ToString(\));//最西的坐标 15 IEnumerator ide = slist.GetEnumerator();
//控件要增加using System.Collections;
17 foreach (KeyValuePair
{ object[] o = new object[1]; 20 o[0] = key.Value.ToString();
21 //CallbackResult参数说明:控件类型如 div,控件id,内容类型,内容 22 //CallbackResult无刷新的更新页面内容
23 CallbackResult crn = new CallbackResult(\, \ + key.Key.ToString(), \, o);//using ESRI.ArcGIS.ADF.Web.UI.WebControls; 24 Map1.CallbackResults.Add(crn);}}
(6) 在页面上添加Toolbar控件ID为Toolbar1,BuddyControls属性为Map1,
同时添加ZoomIn、ZoomOut、Pan、FullExt四个Map Navigation按钮,然后添加一个Tool按钮Name属性为CenterAt,ClientAction属性为Point,
ServerActionAssembly属性为Callback,ServerActionClass属性为Callback.CustomTool;
(7)新建CustomTool.cs类,实现IMapServerToolAction接口,具体代码如下:
1namespace Callback 2 4 6
{public class CustomTool : IMapServerToolAction { public void ServerAction(ToolEventArgs args) {Map map = (Map)args.Control;
8 PointEventArgs pargs = (PointEventArgs)args; 9 if (map != null && pargs != null) 10
{ map.CenterAt(pargs.ScreenPoint); //重新定位地图中心 }}}}
(8)重新定位地图中心的功能完成了,而已运行试验一下效果。
(9)在Default.aspx页面上添加一个Menu控件ID为Menu1,同时添加2个子
项Asia和Africa,
(10)实现上面菜单的javascript函数ZoomToLocationClient,在页面的结束
处添加代码入下:
(11)Default.aspx切换到代码视图开始编写服务端的代码,实现无刷新必须
实现System.Web.UI.ICallbackEventHandler接口,实现ICallback Event Hand ler接口就必须实现GetCallbackResult()和
RaiseCallbackEvent(string eve ntArgument)这2个方法具体的代码和说明入下:
1namespace Callback
2{ public partial class _Default : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler 4
{ public string sCallBackFunctionInvocation;//客户端脚本段 6 //返回给客户端的内容
8 private string mapstring;
9 protected void Page_Load(object sender, EventArgs e)
11 { //GetCallbackEventReference生成客户端脚本
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, \, \, \, \ckError\, true); } 15
16 protected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args) 17
{//获取地图控件的框
19 ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = args.NewExtent; SortedList
slist.Add(\, env.XMax.ToString(\));//最东的坐标 slist.Add(\, env.YMin.ToString(\)); //最南的坐标 slist.Add(\, env.XMin.ToString(\));//最西的坐标 IEnumerator ide = slist.GetEnumerator();
foreach (KeyValuePair
{object[] o = new object[1];
35 o[0] = key.Value.ToString(); //CallbackResult参数说明:控件类型如 div,控件id,内容类型如content, innercontent, javascript,image ,内容
37 //CallbackResult无刷新的更新页面内容
38 CallbackResult crn = new CallbackResult(\, \abel\ + key.Key.ToString(), \, o); 39 Map1.CallbackResults.Add(crn);}} 42 #region ICallbackEventHandler 成员
45 //把处理结果返回给客户端
46 public string GetCallbackResult() 47
{return mapstring;//}??? }
50//接收客户端的请求,根据请求字符串eventArgument不同做不同的处理 52 public void RaiseCallbackEvent(string eventArgs) 53
{ //
.. }
57 #endregion}}
(12)把服务端生成的脚本段sCallBackFunctionInvocation写入到页面中,
Default.aspx切换到html视图在ZoomToLocationClient(val)方法中添加如下代码:
function ZoomToLocationClient(val) 3
{ var message = 'zoomtolocation'; 5 message += ',' + val; 6 var context = 'Map1';
7 //把服务端的生成的脚本段sCallBackFunctionInvocation输出 8 //输出内容:WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true) 9 <%=sCallBackFunctionInvocation%>}
(13)在RaiseCallbackEvent(string eventArgs)方法中处理ZoomTo Location
Client(val)方法发起的请求,具体代码如下:
public void RaiseCallbackEvent(string eventArgs) 3
{if (eventArgs.Contains(\))//根据坐标定位地图中心
5 { }
else if (eventArgs.Contains(\))//根据名称定位地图中心 9
{ ZoomToLocationServer(eventArgs); }} 13//根据名称定位地图中心
14 public void ZoomToLocationServer(string ea) 1517
{//请求字符串分割处理
char[] parser_char = { ',' };
18 string[] messages = ea.Split(parser_char); 19 string location = messages[1]; 20 double minx = 0; 21 double miny = 0; 22 double maxx = 0;
23 double maxy = 0;
bool validlocation = false;
26//根据地点名称不同定位到不同的坐标 //这里为了方便直接给min和max赋值,在实际的开发中可以更加地点名称进行坐标的查询然后更加查询的坐标进行定位
29 switch (location) 30
{ case \: 32 minx = -125.0; 33 miny = 30.0; 34 maxx = -110.0; 35 maxy = 45.0;
36 validlocation = true; 37 break; 38 case \: 39 minx = -80.0; 40 miny = 40.0; 41 maxx = -70.0; 42 maxy = 45.0;
43 validlocation = true; 44 break; 45 default: 46 break;} if (validlocation)
50 { ESRI.ArcGIS.ADF.Web.Geometry.Envelope new_exten
t = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(minx, miny, maxx, maxy); 52 //设置当前地图的Extent 53 Map1.Extent = new_extent;
54 //把CallbackResults返回给客户端,让客户端更新地图显示 55 mapstring = Map1.CallbackResults.ToString();} 57 else 58
{ mapstring = \;} }
(14)Default.aspx切换到html视图在最后的javascript中在添加一个
ZoomToPointClient()方法,具体的代码和说明如下:
function ZoomToPointClient() 3
{//获取输入的x值
5 var x = document.getElementById('TextBoxX').value; 6 //获取输入的y值
7 var y = document.getElementById('TextBoxY').value; 8 //生成请求字符串
9 var message = 'zoomtopoint'; 10 message += ',' + x + ',' + y; 11 var context = 'Map1';
12 //把服务端的生成的脚本段sCallBackFunctionInvocation输出 13 //输出内容:WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true) 14 <%=sCallBackFunctionInvocation%>}
(15)在页面上添加2个input输入框,ID分别为TextBoxX和TextBoxY用来
输入xy的坐标,在添加一个button来执行上面的ZoomToPointClient()方法。具体代码和说明如下:
1X:
2Y:
3
(16)在服务端的RaiseCallbackEvent方法中添加对这个功能实现的代码,代
码和说明如下:
2 public void RaiseCallbackEvent(string eventArgs) 3 5 91517
{if (eventArgs.Contains(\))//根据坐标定位地图中心 { ZoomToPointServer(eventArgs);} {ZoomToLocationServer(eventArgs); }} { //请求字符串分割处理
char[] parser_char = { ',' };
8 else if (eventArgs.Contains(\))//根据名称定位地图中心 14 private void ZoomToPointServer(string eventArgs)
18 string[] messages = eventArgs.Split(parser_char); 19 double map_width_eight = Map1.Extent.Width / 8; 20 double x_center = Double.Parse(messages[1]); 21 double y_center = Double.Parse(messages[2]);
23 ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(x_center - map_width_eight, y_center - map_width_eight, x_center + map_width_eight, y_center + map_width_eight);
24 Map1.Extent = env;
26 //把CallbackResults返回给客户端,让客户端更新地图显示 27 mapstring = Map1.CallbackResults.ToString(); } 29
2)实验结果:
3.实验三. AddGraphics 1)实验步骤:
(1)用ArcGis Server Manager或者ArcCatalog发布一个自定义名字的Map
Service,并且把这个Service启动起来;
(2)新建名为AddGraphics的ASP.NET Web应用程序,即普通的Web应用程序; (3)在页面上放置1个Map、1个Toc、1个MapResourceManager、1个Toolbar
控件,分别设置属性。
(4)在Toolbar1添加一个Tool,Name:AddPointTool;Text:Add Graphic Poi
nt;ClientAction:Point;ServerActionAssembly:AddGraphics;ServerActionClass:AddGraphics.ElementGraphicTool。
(5)新建GraphicPointTools.cs文件,然后在文件中添加ElementGraphicTool
类用来实现AddPointTool的功能,代码和说明如下:
1public class ElementGraphicTool : IMapServerToolAction
2 { void IMapServerToolAction.ServerAction(ToolEventArgs toolEventArgs)
4 { ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap =(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control; //获取map控件 PointEventArgs pointEventArgs = (PointEventArgs)toolEventArgs; //转成点
System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint; //屏幕坐标转成地理坐标
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));
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null; //MapFunctionality
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())
18 {//当Resource为ADFGraphicsResource,ADFGraphicsResource为GraphicsLayer, 保存在内存中用显示临时图层
if (mapFunctionality.Resource.Name == \)
{ adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
23 break;} }
//当为null的时候调用Utility.ProcessError方法弹出提示框 28 if (adfGraphicsMapFunctionality == null) {
//把Utility.ProcessError处理的CallbackResultCollection结果赋给Map控件 31adfMap.CallbackResults.CopyFrom(Utility.ProcessError(\s functionality not found\));
32 return; }
//从adfGraphicsMapFunctionality获取名为Element Graphics的DataTable 36 ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer elementGraphicsLayer = null;
37 foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables) 3840
{if (dataTable.TableName == \) {
41 elementGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dataTable;
42 break;} }
//如果名为Element Graphics的DataTable为null,就新建Element Graphics DataTable添加到adfGraphicsMapFunctionality.GraphicsDataSet中,同时刷新Toc1显示
47 if (elementGraphicsLayer == null)
48 { elementGraphicsLayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
50 elementGraphicsLayer.TableName = \; 51 adfGraphicsMapFunctionality.GraphicsDataSet.Tables.Add(elementGraphicsLayer);
//查找Toc1控件
54 Toc adfToc = (Toc)Utility.FindControl(\, adfMap.Page); 55 //刷新Toc1控件 56 adfToc.Refresh();
57 //CallbackResults结果赋给Map控件
58 adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults); } //定义标点样式
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol simpleMarkerSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol(); 63 simpleMarkerSymbol.Color = System.Drawing.Color.Black; 64 simpleMarkerSymbol.Width = 10; //定义标点选中样式 67 ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol simpleSelectedMarkerSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
simpleSelectedMarkerSymbol.Color = System.Drawing.Color.Yellow; 69 simpleSelectedMarkerSymbol.Width = 12;
70 simpleSelectedMarkerSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Star;
ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement graphicElement =new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(adfPoint, simpleMarkerSymbol, simpleSelectedMarkerSymbol);
73 //把标点添加到elementGraphicsLayer
74 elementGraphicsLayer.Add(graphicElement); 75 //刷新显示
76 if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier) 77
{ //整个地图控件刷新 79 adfMap.Refresh(); } 81 else
82 { //只刷新部分Resource
adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); 85 }} }
(6)新建Utility.cs文件,然后添加上面的ElementGraphicTool类中用到的ProcessError和FindControl方法,具体代码和说明如下:
1namespace AddGraphics 2 4
{
{ //错误信息处理 3 public class Utility
6 public static ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection ProcessError(string message) 7
{//alert错误信息
9 string jsAlertException = \ + message + \; 10 //用CallbackResult执行js脚本
11 ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult alertCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null, null, \, jsAlertException); //设置鼠标的指针显示 14 string jsChangeCursor = \r = map.cursor\;
15 //用CallbackResult执行js脚本
16 ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult cursorCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null, null, \, jsChangeCursor);
ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection callbackResultCollection =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection();
19 callbackResultCollection.Add(alertCallbackResult); 20 callbackResultCollection.Add(cursorCallbackResult); //返回CallbackResultCollection
23 return callbackResultCollection;} //查找页面控件
27 public static Control FindControl(string control, Page page) 2830
{if (page == null || control == null) {return null;}
33 Control buddyControl = page.FindControl(control); 34 if (buddyControl == null)
35 {string webPartControl = GetControlUniqueID(control, page.Controls);
37 if (webPartControl != null) 3842
{ buddyControl = page.FindControl(webPartControl);} {buddyControl = page.FindControl(control); 41 else 44 }}
47 return buddyControl;}
public static string GetControlUniqueID(string controlID, ControlCollection controls) 51
{ Control control;
53 string uniqueID = null;
54 for (int i = 0; i < controls.Count; ++i) 5558
{ control = controls[i];
{uniqueID = control.UniqueID; 57 if (control.ID == controlID) 60 break; }
62 if (control.Controls.Count > 0) 63
{
64 uniqueID = GetControlUniqueID(controlID, control.Controls); 65 if (uniqueID != null) 66 break; }} 69 return uniqueID;} 71 }}
(7)在页面上在新增一个Toolbar2,在ToolbarItems中添加一个Tool然后设
置相应的属性
(8)在GraphicPointTools.cs中新增加FeatureGraphicTool类来实现上面的
Tool的功能,具体代码和说明如下:
1public class FeatureGraphicTool : IMapServerToolAction 2
{
3 void IMapServerToolAction.ServerAction(ToolEventArgs toolEventArgs) 4
{//获取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;//屏幕点
10 System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint; //屏幕坐标转成地理坐标
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));
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, 保存在内存中用显示临时图层
if (mapFunctionality.Resource.Name == \)
21 {adfGraphicsMapFunctionality = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality; 23 break; }}
//当为null的时候调用Utility.ProcessError方法弹出提示框 28 if (adfGraphicsMapFunctionality == null)
29 { //把Utility.ProcessError处理的CallbackResultCollection结果赋给Map控件
31 adfMap.CallbackResults.CopyFrom(Utility.ProcessError(\)); 32 return; }
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 41
{if (dataTable.TableName == \) {
42 featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable; 43 break; }}
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 = \cs\;
53 adfGraphicsMapFunctionality.GraphicsDataSet.Tabl
es.Add(featureGraphicsLayer); 55 //添加字段x
56 System.Data.DataColumn xDataColumn =new System.Data.DataColumn(\, System.Type.GetType(\));
57 featureGraphicsLayer.Columns.Add(xDataColumn); 58 //添加字段y
59 System.Data.DataColumn yDataColumn =new System.Data.DataColumn(\, System.Type.GetType(\));
60 featureGraphicsLayer.Columns.Add(yDataColumn); 61 //添加字段CustomDataColumn
62 System.Data.DataColumn customDataColumn =new System.Data.DataColumn(\,System.Type.GetType(\t32\));
63 featureGraphicsLayer.Columns.Add(customDataColumn); //CustomDataColumn的值等于0时的显示样式
ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
70 zeroSymbol.Width = 12;
71 zeroUniqueValue.Symbol = zeroSymbol; 72 zeroUniqueValue.SymbolLabel = \; //CustomDataColumn的值等于1时的显示样式
75 ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
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 = \;
84 ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer
85 valueMapRenderer.ValueColumnName = \; //默认的显示样式
88 valueMapRenderer.DefaultLabel = \;
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; 95 ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection
100 featureGraphicsLayer.Renderer = valueMapRenderer; //刷新Toc1
103Toc adfToc = (Toc)Utility.FindControl(\, adfMap.Page); 104 adfToc.Refresh();//通知客户端更新显示
106 adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults); // 执行客户端脚本
109 CallbackResult enableCheckBoxCallbackResult =new CallbackResult(null, null, \, string.Format(\tElementById('{0}').disabled = false\, \)); 110 //通知客户端更新显示
111 adfMap.CallbackResults.Add(enableCheckBoxCallbackResult); } 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[\] = randomValue; //把x,y存到表里
122 newDataRow[\] = string.Format(\, adfPoint.X); newDataRow[\] = string.Format(\, adfPoint.Y); //刷新地图显示
126 if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier) { adfMap.Refresh(); }
130 else
{ adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); }}}
(9)在Toolbar2的ToolbarItems中在添加一个DropDownBox然后设置相应的
属性
(10)在GraphicPointTools.cs中新增加FeatureDropDownColor类来实现上面
的DropDownBox的功能,具体代码和说明如下:
public class FeatureDropDownColor : IMapServerDropDownBoxAction 2 4
{
{//获取地图控件
3 void IServerAction.ServerAction(ToolbarItemInfo toolbarItemInfo) 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(\); 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
{if (mapFunctionality.Resource.Name == \) 16 { adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality; 18 break; }}
21 //当为null的时候调用Utility.ProcessError方法弹出提示框 22 if (adfGraphicsMapFunctionality == null)
23 {adfMap.CallbackResults.CopyFrom(Utility.ProcessError(\));
25 return;}
//FeatureGraphicLayer类似feature layer,能建立属性信息,并能基于属性来符号化。图层只能存储同一图形类型。FeatureGraphicLayer可以支持查询。
29 ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;
//从adfGraphicsMapFunctionality获取名为Feature Graphics的DataTable 31 foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables) 32
{ if (dataTable.TableName == \) 34 { featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable; 36 break; }}
40 //如果Feature Graphics的DataTable为null,设置DropDownBoxColor为原始值,同时调用Utility.ProcessError方法弹出提示框 41 if (featureGraphicsLayer == null) 42
{//设置DropDownBoxColor为原始值的脚本
44 string jsResetDropDownList = string.Format(\ent.getElementById('{0}{1}{2}').value = 'Red_Blue'\,toolbarItemInfo.Toolbar.ClientID, adfDropDownBox.Name, adfDropDownBox.Type);
45 //执行上面的脚本
46 CallbackResult resetDropDownListCallbackResult =new CallbackResult(null, null, \, jsResetDropDownList); adfMap.CallbackResults.Add(resetDropDownListCallbackResult); 48 //调用Utility.ProcessError方法弹出提示框
49 adfMap.CallbackResults.CopyFrom(Utility.ProcessError(\)); 50 return; } 52
53 //获取当前的Renderer
54 ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer
56 ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection
58 ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
59 ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
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 \:
68 currentZeroSymbol.Color = System.Drawing.Color.Red; 69 currentOneSymbol.Color = System.Drawing.Color.Blue; 70 break; 71 case \:
72 currentZeroSymbol.Color = System.Drawing.Color.Yellow; 73 currentOneSymbol.Color = System.Drawing.Color.Green; 74 break;
75 case \:
76 currentZeroSymbol.Color = System.Drawing.Color.Orange;
77 currentOneSymbol.Color = System.Drawing.Color.Purple; 78 break; 79 default: 80 break; } //刷新Toc1显示
84 Toc adfToc = (Toc)Utility.FindControl(\, adfMap.Page);
85 adfToc.Refresh();
86 adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults); 87
88 //刷新地图显示
89 if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier) 90
{ adfMap.Refresh(); }
93 else
{ adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); }
97 } }
(11)在Toolbar2的ToolbarItems中在添加一个DropDownBox然后设置相应的属性用来实现变换添加点的显示形状的功能,具体如下:
(12)在GraphicPointTools.cs中新增加FeatureDropDownSymbol类来实现上面的DropDownBoxSymbol的功能,具体代码和说明如下:
1public class FeatureDropDownSymbol : IMapServerDropDownBoxAction 2
{ #region IServerAction Members
void IServerAction.ServerAction(ToolbarItemInfo toolbarItemInfo)
6 { ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolbarItemInfo.BuddyControls[0];
8 DropDownBox adfDropDownBox = (DropDownBox)toolbarItemInfo.Toolbar.ToolbarItems.Find(\);
9 string selectedSymbol = adfDropDownBox.SelectedValue;
11 ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;
12 foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality
13 in adfMap.GetFunctionalities())
14{if (mapFunctionality.Resource.Name == \) 16
{ adfGraphicsMapFunctionality =
18 (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
19 break; }} if (adfGraphicsMapFunctionality == null) 24
{ adfMap.CallbackResults.CopyFrom
26 (Utility.ProcessError(\));
27 return;}
30 ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer featureGraphicsLayer = null;
foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables) 33
{if (dataTable.TableName == \)
35 { featureGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)dataTable; 37 break; }} if (featureGraphicsLayer == null)
42 { string jsResetDropDownList = string.Format(\lementById('{0}{1}{2}').value = 'Circle'\,
44 toolbarItemInfo.Toolbar.ClientID, adfDropDownBox.Name, adfDropDownBox.Type);
45 CallbackResult resetDropDownListCallbackResult = 46 new CallbackResult(null, null, \, jsResetDropDownList); 47 adfMap.CallbackResults.Add(resetDropDownListCallbackResult); 49 adfMap.CallbackResults.CopyFrom
50 (Utility.ProcessError(\)); 51 return; } ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer
55 (ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueMapRenderer
56 ESRI.ArcGIS.ADF.Web.Display.Renderer.ValueCollection
57 currentValueMapRenderer.Values;
59 ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
60 (ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
61 ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
62 (ESRI.ArcGIS.ADF.Web.Display.Renderer.UniqueValue
ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol zeroSymbol = (ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentZeroUniqueValue.Symbol; ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol oneSymbol = (ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol)currentOneUniqueValue.Symbol; switch (selectedSymbol) 68
{ case \:
zeroSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSy
mbolType.Circle;
oneSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Circle; 72 break;
73 case \:
zeroSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Star; oneSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Star; 76 break; 77 case \:
78 zeroSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Square;
79 oneSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Square; 80 break; 81 default: 82 break; }
85 Toc adfToc = (Toc)Utility.FindControl(\, adfMap.Page); 86 adfToc.Refresh();
87 adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults); if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier) 90
{ adfMap.Refresh(); }
91 else
{ adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); } } #endregion}
2)实验结果:
实验四. QueryNewWindow 1) 实验步骤:
(1)用ArcGis Server Manager或者ArcCatalog发布一个自定义名字的Map
Service,并且把这个Service启动起来;
(2)新建名为QueryNewWindow的ASP.NET Web应用程序,即普通的Web应用
程序;
(3)新建名为QueryNewWindow的ASP.NET Web应用程序, 然后在页面上添加
MapResourceManager1、Button1。设置MapResourceManager1的属性。 (4)Button1添加Button1_Click时间,具体代码和说明如下:
1protected void Button1_Click(object sender, EventArgs e) 2
{
3 //获取MapResourceManager1的Resource集合
4 IEnumerator egrc = MapResourceManager1.GetResources().GetEnumerator();
5 //判定初始化MapResourceManager1
6 if (!MapResourceManager1.Initialized) 7
{
8 MapResourceManager1.Initialize(); 9 }
10 while (egrc.MoveNext()) 11
{
12 //随机数
13 Random random = new Random(); 14 int randout = random.Next(0, 1000); 15
16 //获取Resource
17 IGISResource gisresource = (IGISResource)egrc.Current;
18 //判定初始化Resource
19 if (!gisresource.Initialized) 20
{
21 gisresource.Initialize(); 22 }
23 //判定是否支持QueryFunctionality
24 bool supportquery = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)); 25 if (supportquery) 26
{
27 //创建QueryFunctionalit
28 ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctio
nality qfunc;
29 qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null); 30
31 //查询图层id和名称 32 string[] lids; 33 string[] lnames;
34 qfunc.GetQueryableLayers(null, out lids, out lnames);
35 //要查询目标图层名称
36 string sourcelayername = \; 37 //获取查询目标图层的index 38 int layer_index = 0;
39 for (int i = 0; i < lnames.Length; i++) 4042
{ {
41 if (lnames[i] == sourcelayername) 43 layer_index = i; 44 break; 45 } 46 }
47 //查询过滤
48 ESRI.ArcGIS.ADF.Web.QueryFilter queryfilter = new ESRI.ArcGIS.ADF.Web.QueryFilter(); 49 //要查询字段名称
50 string fieldlist = \; 51 //查询的字段集
52 ESRI.ArcGIS.ADF.StringCollection strcollection = new ESRI.ArcGIS.ADF.StringCollection(fieldlist, ','); 53 queryfilter.SubFields = strcollection; 54 //查询语句
55 queryfilter.WhereClause = \A%'\;
56 //查询结果存入DataTable
57 System.Data.DataTable qdatatable = qfunc.Query(null, lids[layer_index], queryfilter);
58 qdatatable.Columns[0].ColumnName = \E_ALIAS\;
59 //查询结果DataTable存入Session中 60 Session[\ + randout] = qdatatable; 61 } 62
63 string argval = \ + randout;
64 //弹出新页面显示查询结果
65 Response.Write(\aspx\ + argval + \ + randout.ToString() + \dth=400, height=200, status=no, toolbar=no, menubar=no, location=no, resizable=yes, scrollbars=yes'); \); 66 } 67 }
(5)新建TableDialog.aspx页面用来作为弹出页面显示查询结果,在html里面添加一个
1protected void Page_Load(object sender, EventArgs e) 2
{
3 string id = Request.QueryString[\];
4 DataTable dt = (DataTable)Session[\ + id]; 5 if (dt != null) 6
{
7 System.Web.UI.HtmlControls.HtmlForm htmlform = (System.Web.UI.HtmlControls.HtmlForm)Page.FindControl(\); 8 Control controldiv = htmlform.FindControl(\v\); 9
10 GridView gd = new GridView(); 11 gd.DataSource = dt; 12 gd.DataBind(); 13 gd.Visible = true; 14 gd.BorderWidth = 10;
15 controldiv.Controls.Add(gd); 16 } 17 }
2)实验结果:
正在阅读:
公共部门绩效管理习题12-07
专业课作业计算机应用基础答案12-17
惠州市2012届高三第三次调研考试数学(文科)试题参考答案03-18
药剂复习12-17
最新-湖南邵阳县石齐学校2018届高三上学期第一次月考(物理)无答06-02
复变函数与积分变换(修订版-复旦大学)课后的习题答案04-06
广州市人民政府关于加强城市道路两旁的建设和管理的规定10-05
关于开展广州市体育传统项目学校10-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实习报告
- 课程
- 图文
- 设计
- WEB
- GIS
- 世界各国的主要节日
- 自主招生递推数列求通项专题
- 货币金融试题答案总结
- 中国区域总供给曲线斜率差异性分析
- 2015年全国高考理科数学分类汇编 - 9圆锥曲线
- Oracle及JDBC考试题
- 高师培养基础教育教师科学素养六结合-模式的建构
- 小学数学基础知识(太全了)
- 2013年助理物流师(三级)考试模拟题及答案要点
- GDER-2032说明书
- 2018-2019学年度第一学期人教版小学五年级数学上册第一单元《小
- 东莞市生态园中央水系二期土方工程监理报告(内容)
- 陕旅版三年级英语下册第一单元测试卷
- 嗨学网证券从业资格考试考前绝密押题《证券交易》
- 如何打造持续高效的团队
- 华南师大高级英语散文赏析 翻译
- 管理会计-王静-课后习题答案
- 探究式课堂教学模式在初中数学教学中的应用
- 2013年四川公务员面试热点:微博“国家队”如何更好发力
- 初三英语Unit 2 Keeping Healthy