您的位置:首页 > 其它

arcgis server for .NET学习转载5

2009-08-27 19:47 330 查看
http://www.cnblogs.com/hll2008/archive/2008/08/18/1269810.html

目的:
1.arcgis server9.2 ADF的Callback机制。
准备工作:
1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Service,并且把这个Service启动起来。
2.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_CallbackCsharp.zip。

开始:
1.新建名为Callback的ASP.NET Web应用程序。
2.在Default.aspx页面中加入MapResourceManager控件ID为MapResourceManager1,并且设置MapResourceItem的属性;Map控件ID为Map1,MapResourceManager属性为MapResourceManager1。具体过程可以参考ArcGIS.Server.9.2.DotNet自带例子分析(一、一);在地图控件的4个边分别添加LabelW、LabelN、LabelE、LabelS DIV控件,具体代码如下:

<html xmlns="http://www.w3.org/1999/xhtml" >
2<head runat="server">
3 <title>无标题页</title>
4</head>
5<body>
6 <form id="form1" runat="server">
7 <table width="533" border="1" cellspacing="0" cellpadding="0">
8 <tr>
9 <td> </td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> </td>
<td align="center"><DIV style="LEFT: 262px; WIDTH: 50px; TOP: 40px" id="LabelN"></DIV></td>
<td> </td>
</tr>
<tr>
<td><div style="left: 13px; width: 50px; top: 259px" id="LabelW">
</div>
</td>
<td><esri:Map ID="Map1" runat="server" Height="305px" Width="451px" BorderWidth="2px" MapResourceManager="MapResourceManager1"></esri:Map></td>
<td><DIV style="LEFT: 533px; WIDTH: 50px; TOP: 259px" id="LabelE"></DIV></td>
</tr>
<tr>
<td> </td>
<td align="center"><div style="left: 262px; width: 50px; top: 436px" id="LabelS">
</div>
</td>
<td> </td>
</tr>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
</table>
<esri:MapResourceManager ID="MapResourceManager1" runat="server">
<ResourceItems>
<esri:MapResourceItem Definition="<Definition DataSourceDefinition="jh-53a435fbc0e8" DataSourceType="ArcGIS Server Local" Identity="To set, right-click project and 'Add ArcGIS Identity'" ResourceDefinition="(default)@world" DataSourceShared="True" />"
DisplaySettings="visible=True:transparency=0:mime=True:imgFormat=PNG8:height=100:width=100:dpi=96:color=:transbg=False:displayInToc=True"
Name="MapResourceItem0" />
</ResourceItems>
</esri:MapResourceManager>
</form>
</body>
</html>
3.接下来做当地图视图范围发生变化时更新4个边的LabelW、LabelN、LabelE、LabelS DIV控件坐标显示,显示的是地图每个边的坐标,给Map1控件添加protected void Map1_ExtentChanged(object sender, ExtentEventArgs args)事件,然后编写相应的代码,具体的代码和说明如下:
1 protected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args)
2<esri:Toolbar ID="Toolbar1" runat="server" BuddyControlType="Map"
<esri:Tool ClientAction="Point" JavaScriptFile="" Name="CenterAt" ServerActionAssembly="Callback" ServerActionClass="Callback.CustomTool" />
</esri:Toolbar>5.新建CustomTool.cs类,实现IMapServerToolAction接口具体的代码和说明如下:
1namespace Callback
26.这样重新定位地图中心的功能完成了,而已运行试验一下效果。
7.在Default.aspx页面上添加一个Menu控件ID为Menu1,同时添加2个子项Asia和Africa,具体的代码如下:
1<asp:Menu ID="Menu1" runat="server" BackColor="#B5C7DE" DynamicHorizontalOffset="2"
2 Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284E98" StaticSubMenuIndent="10px">
3 <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
4 <DynamicHoverStyle BackColor="#284E98" ForeColor="White" />
5 <DynamicMenuStyle BackColor="#B5C7DE" />
6 <StaticSelectedStyle BackColor="#507CD1" />
7 <DynamicSelectedStyle BackColor="#507CD1" />
8 <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
9 <Items>
<asp:MenuItem Text="Zoom To" Value="Zoom To">
<asp:MenuItem Text="Asia" Value="Asia" NavigateUrl="javascript: ZoomToLocationClient('Asia');"></asp:MenuItem>
<asp:MenuItem Text="Africa" Value="Africa" NavigateUrl="javascript: ZoomToLocationClient('Africa');"></asp:MenuItem>
</asp:MenuItem>
</Items>
<StaticHoverStyle BackColor="#284E98" ForeColor="White" />
</asp:Menu>8.实现上面菜单的javascript函数ZoomToLocationClient,在页面的结束处添加代码入下:
1<form id="form1" runat="server">
2</form>9.Default.aspx切换到代码视图开始编写服务端的代码,实现无刷新必须实现System.Web.UI.ICallbackEventHandler接口,实现 ICallbackEventHandler接口就必须实现GetCallbackResult()和RaiseCallbackEvent(string eventArgument)这2个方法具体的代码和说明入下:
1namespace Callback
210.接下来要把服务端生成的脚本段sCallBackFunctionInvocation写入到页面中,Default.aspx切换到html视图在ZoomToLocationClient(val)方法中添加如下代码:
1//根据地名定位地图中心
2 function ZoomToLocationClient(val)
3//接收客户端的请求,根据请求字符串eventArgument不同做不同的处理
2 public void RaiseCallbackEvent(string eventArgs)
3//根据名称定位地图中心
public void ZoomToLocationServer(string ea)
//根据坐标定位地图中心
2 function ZoomToPointClient()
3X:<input type="text" id="TextBoxX" style="width: 72px; left: 71px; top: 473px" />
Y:<input type="text" id="TextBoxY" style="width: 72px; left: 203px;top: 472px" />
<input type="button" value="Zoom To Point" onclick="ZoomToPointClient();" style="left: 318px; top: 470px; width: 150px" />15.在服务端的RaiseCallbackEvent方法中添加对这个功能实现的代码,代码和说明如下:
1 //接收客户端的请求,根据请求字符串eventArgument不同做不同的处理
2 public void RaiseCallbackEvent(string eventArgs)
3
private void ZoomToPointServer(string eventArgs)
16.这样就完成了这个练习了,运行查看效果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: