`
flyingis
  • 浏览: 289204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BlueViewer 地图加载分析(C#)

阅读更多
    作者:Flyingis

    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"];
  }

}

    在default.aspx的<body/>中,onload调用main.js的startUp()方法。在startUp()中,先后调用posLoadingImage()、posBorder()、posBorderNavigation()、posTools()四个方法,它们分别代表图像加载时的"Loading"图标、放大缩小图框、方位移动图标的定位(A)、下方整个工具状态栏的位置(B,依赖方位移动图标的位置)。然后通过handleToolClick()确定当前鼠标操作是放大缩小(iToolMode==1),还是移动图层(iToolMode==2),通过m_txtXCoord和m_txtYCoord初始化当前X/Y坐标的显示(C)。

BlueViewer.jpg


m_imgMapCanvas.onload = hideWaitImage;

    这段代码说明了在服务器响应用户操作之前的时刻,客户端所作的状态清理工作,hideWaitImage主要的作用是清楚用户的放大缩小框,隐藏"Loading"图标。
 
    到目前为止,程序完成了在向ArcIMS应用服务器发送ArcXML之前的所有工作,包括程序界面显示、客户端对用户界面操作的响应,下面紧接着,就是用户请求的发送与系统服务器端(Web应用服务器、ArcIMS应用服务器和ArcIMS空间服务器统称)对用户请求的响应。因为这里描述的是程序启动的过程,不涉及到用户对地图的实际操作,但用户对地图的操作无非是一堆JavaScript代码,对后面的程序响应过程没有太多影响。不论是程序启动,还是用户对地图进行操作请求服务,都要通过submit()方法来发送请求并返回系统服务器端响应。

function submit() {

  
var sURL = m_hvMapPage.value+"?XMIN="+
    m_mapViewer.getExtent().getLeft()
+
    
"&YMIN="+m_mapViewer.getExtent().getBottom()+
    
"&XMAX="+m_mapViewer.getExtent().getRight()+
    
"&YMAX="+m_mapViewer.getExtent().getTop()+
    
"&WIDTH="+m_mapViewer.getTagWidth()+
    
"&HEIGHT="+m_mapViewer.getTagHeight();

  updateZoomLevel(m_mapViewer.getLevel());
  showWaitImage();

  
if (navigator.userAgent.indexOf('Netscape6/6') > -1{
    m_lTimerID 
= setInterval("hideWaitImageForNetscape6();",100);
  }


  m_imgMapCanvas.src 
= sURL;

  persistExtent();

}

    在default.aspx的Page_Load()中,hvMapPage.Value已被赋值为"MakeMap.aspx",此时将调用MakeMap.aspx页面并启动其Page_Load()过程,在这个过程中实现了根据用户请求封装ArcXML的发送,和系统服务器端的响应,具体的过程可以参考《ArcIMS连接器--.NET Link使用方法》。页面会返回用户所需要的图片的url,并定义当前地图的显示范围,赋给submit()的各个参数,通过persistExtent()方法将地图范围保存在hvMinX、hvMinY、hvMaxX、hvMaxY四个隐藏域中。

    到此,程序完成了整个启动过程,其界面如上图所示,当用户对其进行操作请求服务时,除了JavaScript操作不同外,其他过程基本相同。熟悉JavaScript和XML,理解了ArcIMS的体系结构和服务请求过程,进行.NET Link二次开发还是不复杂的。在Ajax横行天下的年代,将客户端请求服务和响应客户端请求的过程用Ajax来实现,可以摆脱frame框架的束缚,改善代码的逻辑结构,增强WebGIS的用户体验。
分享到:
评论

相关推荐

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习

    简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习 简历是展示个人经历、技能和能力的重要文档,以下是一个常见的简历格式和内容模板,供您参考: 简历格式: 头部信息:包括姓名、联系方式(电话号码、电子邮件等)、地址等个人基本信息。 求职目标(可选):简短描述您的求职意向和目标。 教育背景:列出您的教育经历,包括学校名称、所学专业、就读时间等。 工作经验:按时间顺序列出您的工作经历,包括公司名称、职位、工作时间、工作职责和成就等。 技能和能力:列出您的专业技能、语言能力、计算机技能等与职位相关的能力。 实习经验/项目经验(可选):如果您有相关实习或项目经验,可以列出相关信息。 获奖和荣誉(可选):列出您在学术、工作或其他领域获得的奖项和荣誉。 自我评价(可选):简要描述您的个人特点、能力和职业目标。 兴趣爱好(可选):列出您的兴趣爱好,展示您的多样性和个人素质。 参考人(可选):如果您有可提供推荐的人员,可以在简历中提供其联系信息。 简历内容模板: 姓名: 联系方式: 地址: 求职目标: (简短描述您的求职意

    asp代码asp.net电子书城系统设计与实现(源代码+论文)

    asp代码asp.net电子书城系统设计与实现(源代码+论文)本资源系百度网盘分享地址

    JW5116F 产品规格书pdf

    JW5116F ESOP-8 40V/3A异步降压转换器

    tick need to pass

    tick

    FAT32文件系统的数据隐写

    源代码

    YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip

    YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! YOLOv5交通标志物检测源码+训练好的模型+全部数据(高分优秀项目).zip个人97分的期末大作业,主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含

    pypy2.7-v7.3.0rc2-aarch64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    超微 X11DPU-XLL主板用户手册

    超微 X11DPU-XLL主板用户手册

    android studio下载

    android studio下载

    x酒高端品鉴会策划案ss.pptx

    x酒高端品鉴会策划案ss.pptx

    pypy3.10-v7.3.12rc1-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pypy2.7-v7.3.10-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    头歌python循环结构答案.txt

    头歌python循环结构答案.txt

    杰理AC1279A 规格书

    杰理AC1042B 规格书

    案例-制造业_管理信息化项目_IT规划报告dr.ppt

    案例-制造业_管理信息化项目_IT规划报告dr.ppt

    pypy3.6-v7.1.1-linux32.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pypy3.7-v7.3.5-src.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    OrCAD Capture 小工具:放置网络线阵列

    OrCAD Capture 小工具,可以提升设计效率

    基于PHP高校网上教材征订系统的设计与实现(论文+源码)-kaic.docx

    摘 要 ABSTRACT 目 录 第1章 绪论 1.1开发背景 1.2开发意义 1.3研究内容 第2章 主要技术和工具介绍 2.1 php语言 2.2 MySQL 数据库 2.3 php技术 2.4PHP简介 第3章 系统分析 3.1可行性分析 3.1.1经济可行性 3.1.2技术可行性 3.1.3操作可行性 3.2需求分析 3.3业务流程分析 3.4数据流程分析 第4章 系统设计 4.1系统结构设计 4.2功能模块设计 4.3数据库设计 4.3.1数据库设计概述 4.3.1概念设计 4.3.2表设计 第5章 系统实现 5.1基本任务 5.2登录模块的实现 5.2.1登录实现 5.2.2管理员后台登录 5.3用户模块的实现 5.3.1添加模块及登录的实现 5.2.2留言模块的实现 5.2.3征订模块的实现 5.4管理员模块的实现 5.4.1系统用户管理模块的实现 5.4.2教材信息管理模块的实现 5.4.3公告信息管理模块的实现 第6章 系统测试 6.1测试目的 6.2测试概述 6.3单元测试 6.3.1添加测试 6.3.2登录测试 6.4集成测试 第7章 总结 致 谢

Global site tag (gtag.js) - Google Analytics