MapXtreme2004的Web选择控件(二)

本文探讨了Web程序中地图控件(Mapcontrol)的选择图层集合管理方式,包括其公共性和客户端数据交互特点,以及由此引发的问题和解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

        前段时间写了一篇有关选择控件的随笔。主要分析了一下它的模型结构,这篇随笔将具体分析它的选择图层集合的一些问题。

公共的选择图层集合

None.gif Dim  Mapcontrol1  as   new  mapcontrol
None.gif    
' Mapcontrol1. SelectableLayers 是一个只读的arraylist类型属性
None.gif
Mapcontrol1. SelectableLayers.add(layerName)  ' 添加可选择图层
None.gif
Mapcontrol1. SelectableLayers.remove(layerName) ' 删除可选择图层

None.gif
        在一个Web程序里面,所有的Mapcontrol(地图控件)实例都公用一个选择图层集合。当改变了任何一个Mapcontrol(地图控件)实例其中的选择图层集合内容都将影响到其他Mapcontrol(地图控件)实例的选择图层集合。这种实现有利的地方在于没有加载Mapcontrol(地图控件)的web页也能够对地图进行控制。比如有一个专门的地图图层加载页面,这样可以在加载时控制图层的可选择性;或者有一个配置页专门配置图层的可选择性。但是这对于一个web程序拥有多个Mapcontrol(地图控件)是有害的。他们的可选择图层设置将相互覆盖,引起一些莫名其妙的问题。要想解决此问题我们还需要更深入了解才行。

客户端的选择图层集合数据

    当浏览器请求完成后,Mapcontrol(地图控件)会将选择图层集合用脚本的形式写到客户端去。如下代码:

None.gif var  _selectlayer  =   new  MapInfoWebSelectLayer();
None.gif    _selectlayer.name 
=   " 图层一 " ;
None.gif    _selectlayer.selectable 
=   " False " ;
None.gif    _selectlayers_MapControl1.Layers[_selectlayers_MapControl1.Layers.length] 
=  _selectlayer;
None.gif    
var  _selectlayer  =   new  MapInfoWebSelectLayer();
None.gif    _selectlayer.name 
=   " 图层二 " ;
None.gif    _selectlayer.selectable 
=   " True " ;
None.gif    _selectlayers_MapControl1.Layers[_selectlayers_MapControl1.Layers.length] 
=  _selectlayer;
None.gif    
var  _selectlayer  =   new  MapInfoWebSelectLayer();
None.gif    _selectlayer.name 
=   " 图层三 " ;
None.gif    _selectlayer.selectable 
=   " True " ;
None.gif    _selectlayers_MapControl1.Layers[_selectlayers_MapControl1.Layers.length] 
=  _selectlayer;
None.gif
None.gif
None.gif

其中的selectable属性标识了图层是否可以选择。并且写到客户端的信息只包含加载的图层部分。这部分的数据到底有什么用呢?每当地图工具在地图上操作时,这些数据将回送到服务器端覆盖选择图层集合数据如下图中的(访问3部分)。
pic1.JPG

 

在这里需要非常注意的几点:

1.每次刷新,Mapcontrol(地图控件)都会将内存中最新的选择图层集合写到客户端去。

2.地图工具操作时会将保存在客户端的选择数据覆盖服务器端选择数据。

3.非地图工具操作时没有变化。图中的(访问2)

4.当已经打开了一个包含Mapcontrol的页面A,却要在另外一个没有Mapcontrol的页面B控制图层可选性或者是添加图层时,需要在B完成后刷新一下A,这时A上的最新选择图层集合才能写到客户端。不然A上的地图工具操作后将覆盖B的选择图层集合最新设置。

5.客户端也能够控制图层可选性,当然之后得使用地图工具刷新一下,而不是使用非地图工具。

6.程序一开始就将所有能选择的图层名放到选择图层集合是没有意义的。几番操作后将只剩下已经加载的图层了。

7.卸载图层时不需要在选择图层集合中删除,理由同6

从上图可以看出能够对地图图层可选性进行控制的几个切入点首先是包含地图控件的页面每次回送后,可以在服务端处理。其次是在(访问1)和(访问2)之间的 其他未包含地图控件页面内处理。最后是客户端脚本处理。不知道为什么Mapinfo的开发人员要使用如此怪异的方式来控制图层的可选性。大概是仅仅为了能够在客户端控制地图的可选性吧。

也许你看这还没有看明白怎么回事,毕竟我的水平有限。最后提供一个终极解决方案:将需要图层的选择集合保存到Session里面,在每次页面回送时再一项项写到Mapcontrol1. SelectableLayers里面。

转载于:https://www.cnblogs.com/redfire0922/archive/2006/08/24/maptreme20040823.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值