BlueViewer 地图加载分析(C#)
作者:FlyingisBlueViewer是基于.NET Link进行ArcIMS二次开发的一个实例,里面包含了WebGIS最基本的一些功能。关于ArcIMS结构及其简介可以参考我的另外一篇随笔《ArcIMS体系结构》。关于.NET Link连接器的介绍可以参考《ArcIMS连接器--.NET Link使用方法》。Mars写了一篇《浅析ArcIMS》,对BlueViewer做了简单的分析。
使用.NET Link进行ArcIMS二次开发并不复杂,但不少刚刚接触GIS朋友面对大量JavaScript和ArcXML,加上对WebGIS运行机制不了解,还是感觉无从下手。这篇随笔将对BlueViewer地图加载显示机制进行剖析,看看整个代码的运行过程,代码语言使用C#。
使用HTML、ArcExplorer、JavaViewer客户端进行开发,需要在客户端使用JavaScript对ArcXML进行编写与封装,虽然ArcXML的传输过程变得相对简单,但对人的耐力绝对是个莫大的考验,因此一般建议使用ArcIMS的各种连接器进行二次开发,BlueViewer就是基于.NET Link进行二次开发的一个实例。
连接器的主要作用,就是根据客户端的请求,将请求封装为ArcXML传输到ArcIMS应用服务器,以及将ArcIMS应用服务器发送回来的结果提取出来(一般为图片),发送给客户端,响应用户请求。在客户端,用户对地图的操作及地图的显示还是由JavaScript来控制,但相对于在客户端编写ArcXML来说,其工作量还是要减轻不少,开发方法更符合OOP,其中.NET Link相对来说在面向对象方面做的不怎么好,但使用ASP.NET进行开发,.NET Link是不二的选择。
下面是对程序启动地图显示过程的分析
----------------------------------------
在default.aspx中有五个隐藏域,hvMinX、hvMinY、hvMaxX、hvMaxY、hvMapPage,前四个对象描述当前地图显示范围,最后一个返回地图显示的url。程序启动第一步就是初始化这些值,在default.aspx.cs中有详细描述。
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">http://www.agoit.com/Images/OutliningIndicators/None.gifprotected void Page_Load(object sender, System.EventArgs e)
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifhttp://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif if (!(IsPostBack))
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif Session.Add("VALID_USER", true);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMapPage.Value = "MakeMap.aspx";
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif if ((Request.QueryString["XMIN"] == null | Request.QueryString["YMIN"] == null |
Request.QueryString["XMAX"] == null | Request.QueryString["YMAX"] == null))
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMinX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMIN"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMinY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMIN"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMaxX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMAX"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMaxY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMAX"];
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif else
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMinX.Value = Request.QueryString["XMIN"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMinY.Value = Request.QueryString["YMIN"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMaxX.Value = Request.QueryString["XMAX"];
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif hvMaxY.Value = Request.QueryString["YMAX"];
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif }
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
页:
[1]