BlueViewer是基于.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中有详细描述。
protected
void
Page_Load(
object
sender, System.EventArgs e)
{
if (!(IsPostBack))
{
Session.Add("VALID_USER", true);
hvMapPage.Value = "MakeMap.aspx";
}
if ((Request.QueryString["XMIN"] == null | Request.QueryString["YMIN"] == null |
Request.QueryString["XMAX"] == null | Request.QueryString["YMAX"] == null))
{
hvMinX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMIN"];
hvMinY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMIN"];
hvMaxX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMAX"];
hvMaxY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMAX"];
}
else
{
hvMinX.Value = Request.QueryString["XMIN"];
hvMinY.Value = Request.QueryString["YMIN"];
hvMaxX.Value = Request.QueryString["XMAX"];
hvMaxY.Value = Request.QueryString["YMAX"];
}
}
{
if (!(IsPostBack))
{
Session.Add("VALID_USER", true);
hvMapPage.Value = "MakeMap.aspx";
}
if ((Request.QueryString["XMIN"] == null | Request.QueryString["YMIN"] == null |
Request.QueryString["XMAX"] == null | Request.QueryString["YMAX"] == null))
{
hvMinX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMIN"];
hvMinY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMIN"];
hvMaxX.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_XMAX"];
hvMaxY.Value = System.Configuration.ConfigurationSettings.AppSettings["DEFAULT_EXTENT_YMAX"];
}
else
{
hvMinX.Value = Request.QueryString["XMIN"];
hvMinY.Value = Request.QueryString["YMIN"];
hvMaxX.Value = Request.QueryString["XMAX"];
hvMaxY.Value = Request.QueryString["YMAX"];
}
}
在default.aspx的