学 生 实 习 报 告
实习名称:
学
号:
学生姓名:
指导教师:
专业班级:
院(部):
2013 年 12 月 10 日
实习成绩评定表
指导老师评语:
成绩:
指导老师:
2013 年 12 月 10 日
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 slist = new SortedList();
//using System.Collections
6
7
9
slist.Add("n", env.YMax.ToString("N"));//最北的坐标
slist.Add("e", env.XMax.ToString("N"));//最东的坐标
slist.Add("s", env.YMin.ToString("N")); //最南的坐标
slist.Add("w", env.XMin.ToString("N"));//最西的坐标
IEnumerator ide = slist.GetEnumerator();
15
//控件要增加 using System.Collections;
foreach (KeyValuePair key in slist)
{ object[] o = new object[1];
o[0] = key.Value.ToString();
//CallbackResult 参数说明:控件类型如 div,控件 id,内容类型,内容
//CallbackResult 无刷新的更新页面内容
17
18
20
21
22
23
ToString(), "innercontent", o);//using ESRI.ArcGIS.ADF.Web.UI.WebControls;
24
(6) 在页面上添加 Toolbar 控件 ID 为 Toolbar1,BuddyControls 属性为 Map1,
CallbackResult crn = new CallbackResult("div", "Label" + key.Key.
Map1.CallbackResults.Add(crn);}}
同时添加 ZoomIn、ZoomOut、Pan、FullExt 四个 Map Navigation 按钮,然
后添加一个 Tool 按钮 Name 属性为 CenterAt,ClientAction 属性为 Point,
ServerActionAssembly 属性为 Callback,ServerActionClass 属性为
Callback.CustomTool;
{ public void ServerAction(ToolEventArgs args)
{public class CustomTool : IMapServerToolAction
(7)新建 CustomTool.cs 类,实现 IMapServerToolAction 接口,具体代码如下:
1 namespace Callback
2
4
6
8
9
10
(8)重新定位地图中心的功能完成了,而已运行试验一下效果。
PointEventArgs pargs = (PointEventArgs)args;
if (map != null && pargs != null)
{ map.CenterAt(pargs.ScreenPoint); //重新定位地图中心 }}} }
{Map map = (Map)args.Control;
(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 个方法具体的代码和
说明入下:
{ public partial class _Default : System.Web.UI.Page,System.Web.
{ public string sCallBackFunctionInvocation;//客户端脚本段
1 namespace Callback
2
UI.ICallbackEventHandler
4
6
8
9
11
//返回给客户端的内容
private string mapstring;
protected void Page_Load(object sender, EventArgs e)
{ //GetCallbackEventReference 生成客户端脚本
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventR
eference(this, "message", "processCallbackResult", "context", "postBa
ckError", true); }
15
16
GIS.ADF.Web.UI.WebControls.ExtentEventArgs args)
17
19
ESRI.ArcGIS.ADF.Web.Geometry.Envelope env = args.NewExtent;
SortedList slist = new SortedList();
protected void Map1_ExtentChanged(object sender, ESRI.Arc
{//获取地图控件的框
slist.Add("n", env.YMax.ToString("N"));//最北的坐标
slist.Add("e", env.XMax.ToString("N"));//最东的坐标
slist.Add("s", env.YMin.ToString("N")); //最南的坐标
slist.Add("w", env.XMin.ToString("N"));//最西的坐标
IEnumerator ide = slist.GetEnumerator();
foreach (KeyValuePair key in slist)
o[0] = key.Value.ToString();
{object[] o = new object[1];
//CallbackResult 无刷新的更新页面内容
CallbackResult crn = new CallbackResult("div", "L
33
35
//CallbackResult 参数说明:控件类型如 div,控件 id,内容类型如 content, innerco
ntent, javascript,image ,内容
37
38
abel" + key.Key.ToString(), "innercontent", o);
39
42
45
46
47
50 //接收客户端的请求,根据请求字符串 eventArgument 不同做不同的处理
52
public void RaiseCallbackEvent(string eventArgs)
53
57
(12)把服务端生成的脚本段 sCallBackFunctionInvocation 写入到页面中,
//把处理结果返回给客户端
public string GetCallbackResult()
Map1.CallbackResults.Add(crn);}}
..
}
{ //
#endregion}}
#region ICallbackEventHandler 成员
{return mapstring;//}??? }
Default.aspx 切换到 html 视图在 ZoomToLocationClient(val)方法中添
加如下代码:
function ZoomToLocationClient(val)
{ var message = 'zoomtolocation';
3
5
6
7
8
allbackResult,context,postBackError,true)
9
(13)在 RaiseCallbackEvent(string eventArgs)方法中处理 ZoomTo Location
message += ',' + val;
var context = 'Map1';
//把服务端的生成的脚本段 sCallBackFunctionInvocation 输出
//输出内容:WebForm_DoCallback('__Page',message,processC
<%=sCallBackFunctionInvocation%>}