`

MapXtreme 2005自定义图层控制代码(WEB)

阅读更多
虽然MapXtreme 2005 6.7.1提供了图层控制的控件,但很多时候需要自己定义,所以就写了个DEMO,起个抛砖引玉的作用.
整体思路是:
1.从服务端获取待控制的图层信息(名称,是否可视,标注是否可视信息),JSON格式
2.客户端用户选择后,发送到服务端 JSON格式
3.服务端执行控制后,把得到到图象返回给客户端
客户端页面包含:
复制内容到剪贴板
代码:

<div style="width: 235px; height: 26px">
               图层设置<img src="images/down.gif" alt="图层设置" id="layerimg" onclick="return layerimg_onclick()" />
</div>
<div id="layerTag" style="display:none">
       <table style="width: 292px">
                <tr>
                   <td style="width: 57px; font: caption; color: blue;">
                                         图层名称</td>
                   <td style="width: 63px; font: caption; color: blue;">
                                         显示与否</td>
                   <td style="width: 57px; font: caption; color: blue;">
                                         标注与否</td>
               </tr>
              <tr id="QQ">
                   <td style="width: 57px; font: menu; color: purple; height: 22px;">
                                         QQ图层</td>
                  <td style="width: 63px; height: 22px;">
                                         <input id="QQCheckbox1" style="width: 21px" type="checkbox" /></td>
                 <td style="width: 57px; height: 22px;">
                                         <input id="QQCheckbox2" type="checkbox" /></td>
                   <td style="width: 36px; height: 22px;">
                             <input id="Button1" style="width: 38px" type="button" value="应用" onclick="return Layercontrol()" />
                  </td>
              </tr>
              <tr id="CONTACT">
                    <td style="width: 57px; font: menu; color: purple;">
                                         联系图层</td>
                     <td style="width: 63px;">
                              <input style="width: 21px" id="LLCheckbox1" type="checkbox"/></td>
                      <td style="width: 57px">
                                         <input id="LLCheckbox2" style="width: 21px" type="checkbox" /></td>
                      <td style="width: 36px; height: 22px;">
                              <input id="Button2" style="width: 38px" type="button" value="应用" onclick="return Layercontrol()"/></td>
                   </tr>
      </table>
</div>
简要控制脚本:
复制内容到剪贴板
代码:

function layerimg_onclick() {
     if ($("#layerTag").css("display")=="none"){
         $("#layerimg").attr("src","images/up.gif");
         $("#layerTag").css("display","block");
         getlayercontrol();
     }
     else{
         $("#layerimg").attr("src","images/down.gif");
         $("#layerTag").css("display","none");
     }
}
首先先做获取服务端待控制的图层信息:
客户端脚本如下:
复制内容到剪贴板
代码:
//获取图层控制信息
function getlayercontrol(){
$.ajax({
   type:"post",
   url:"GetCustomLayer.ashx",
   data:"",
   success:function(data){
      var json=eval("("+data+")");
      for(var i=0;i<json.items.length;i++){
        if(i==0) {
           form1.QQCheckbox1.checked=json.items.visible;
           form1.QQCheckbox2.checked=json.items.labelvisible;
         }
        else{
            form1.LLCheckbox1.checked=json.items.visible;
            form1.LLCheckbox2.checked=json.items.labelvisible;
        }
     }
   }
});
}
服务端执行页面是:GetCustomLayer.ashx见附件,为了使用JSON,ASP.NET AJAX的机制使用序列化和反序列化,为此先构造图层类见附件,控制当用户选择不显示/显示某个图层时的交互情况,脚本参考如下:
复制内容到剪贴板
代码:
function Layercontrol() {
    //按照顺序定义button,取序号
    var src=event.srcElement.id;
    var index=src.substring(7,src.length-1);
    //根据button序号获取td信息
    var name=$("#layerTag tr:eq("+index+")").attr("id");
    var visible=$("#layerTag tr:eq("+index+") td").eq(1).find(":checkbox").attr("checked");
    var labelvisible=$("#layerTag tr:eq("+index+") td").eq(2).find(":checkbox").attr("checked");
  
    //由于JSON.JS和JQERUY有些冲突,手工设置为JSON格式
    var jsonstr="{\"name\":\""+name+"\",\"visible\":"+visible+",\"lablelvisible\":"+labelvisible+"}";
    url = "MapController.ashx?Command=MyLayerControl&Ran=" + Math.random();
    var mapImage = document.getElementById("MapControl1_Image");
    if (mapImage.mapAlias)
    url +=  "&MapAlias=" + mapImage.mapAlias;
    url += "&Width=" + mapImage.width ;
    url += "&Height=" + mapImage.height;
    url += "&ExportFormat=" + mapImage.exportFormat ;
    $.ajax({
          type:"post",
          url:url,
          data:jsonstr,
          success:function(){
              mapImage.src=url;
          }
      });
}
服务端代码:
复制内容到剪贴板
代码:

''' <summary>
''' 自定义图层控制
''' </summary>
''' <remarks></remarks>
<Serializable()> _
Public Class MyLayerControl
    Inherits MapBaseCommand
    Public Sub New()
        Name = "MyLayerControl"
    End Sub
   'Public Overrides Sub Execute()
    '    Dim sm As StateManager = StateManager.GetStateManagerFromSession()
    '    ParseContext()
    '    If Not (sm Is Nothing) Then
    '        PrepareStateManagerParamsDictionary(sm)
    '        sm.RestoreState()
    '    End If
    '    Process()
    'End Sub
    Public Overrides Sub Process()
        Dim insm As Stream = HttpContext.Current.Request.InputStream '获取传入Http内容
        Dim br As BinaryReader = New BinaryReader(insm, System.Text.Encoding.UTF8) '转换流
        Dim by() As Byte = br.ReadBytes(insm.Length)
        Dim jsonstr As String = System.Text.Encoding.UTF8.GetString(by) '转换为string类型
        Dim model As MapControlModel = MapControlModel.GetModelFromSession()
        Dim mainmap As Map = model.GetMapObj(MapAlias)
        Dim j As Script.Serialization.JavaScriptSerializer =
            New Script.Serialization.JavaScriptSerializer()
        Try
            Dim lcs As mylayer = j.Deserialize(Of mylayer)(jsonstr)
            If lcs.visible Then '要求可视
                If Not mainmap.Layers(lcs.name).IsVisible Then '原来不可视
                    mainmap.Layers(lcs.name).Enabled = True '设置为可视
                End If
            Else '要求不可视
                If mainmap.Layers(lcs.name).IsVisible Then '原来可视
                    mainmap.Layers(lcs.name).Enabled = False '设置为不可视
                End If
            End If
        Catch ex As Exception
        Finally
            Dim ms As MemoryStream = model.GetMap(MapAlias, MapWidth, MapHeight, ExportFormat)
            StreamImageToClient(ms)
        End Try
    End Sub
End Class
分享到:
评论

相关推荐

    mapxtreme2005

    - **层控制(Layer Control)**:MapXtreme2005新增了Layer Control控件,使得在Windows Forms应用程序中管理图层变得更加直观和高效。 - **点在多边形内的行为**:针对点是否位于多边形内部的判断逻辑进行了优化,...

    vs2005+mapxtreme2005例子

    《基于VS2005与MapXtreme2005的地图应用开发实例解析》 在信息技术领域,地图服务已经成为不可或缺的一部分,尤其在地理信息系统(GIS)中扮演着重要角色。Visual Studio 2005(简称VS2005)作为微软推出的强大开发...

    MapXtreme2005开发人员指南

    它旨在帮助开发人员了解如何使用MapXtreme 2005来开发与MapInfo强大的地图绘制组件集成的Windows桌面和基于Web的应用程序。通过阅读这本指南,开发人员可以获得关于MapXtreme 2005的主要功能、新增内容以及最佳实践...

    mapxtreme+vs05实例代码

    10. **自定义渲染**:MapXtreme允许开发者自定义图层的渲染方式,如颜色、符号、标签等,以满足特定视觉需求。 通过学习和理解这些实例代码,开发者能够深入掌握MapXtreme与Visual Studio 2005的结合使用,从而构建...

    MapXtreme2005开发指南

    4. **图层管理**:图层是MapXtreme中的重要概念,用于组织和控制不同数据的显示。开发者需要掌握如何创建、修改和管理图层,以及设置图层的显示属性。 5. **地理编码与反向地理编码**:这两项功能允许用户将地址...

    MapXtreme2005 v6.6

    3. GIS服务发布:MapXtreme 2005 v6.6能够将地理信息以Web服务的形式发布,使远程用户可以通过Web浏览器访问地图和地理数据,实现地图服务的共享和互操作。 4. 客户端应用开发:该版本支持开发基于.NET Framework的...

    MapXtreme for java 小项目源代码

    源代码可能包含如何创建和管理不同类型的图层,以及如何控制它们的显示样式。 6. **空间分析**:MapXtreme提供了丰富的空间分析工具,如缓冲区分析、叠置分析、距离计算等。通过源代码,你可以看到如何调用这些功能...

    MapXtreme内置控件命令代码

    本资源包含的是MapXtreme内置控件的源代码,这对于深入理解和自定义MapXtreme的应用是非常有价值的。 MapXtreme的核心特性包括地图渲染、地理编码、空间分析以及数据管理等。其内置控件是预先封装好的功能模块,...

    CustomLayerControl_MapXtremecsharp_webgis_zip_web_

    在本压缩包“CustomLayerControl_MapXtremecsharp_webgis_zip_web_”中,重点是关于如何在MapXtreme for .NET环境中自定义图层控制的功能。下面我们将深入探讨MapXtreme、C#编程语言以及WebGIS相关的知识点。 1....

    MapXtreme API及代码实例

    5. **图层管理**:学习如何添加、删除、隐藏和显示地图层,以及如何控制图层的显示顺序和透明度。 6. **数据源处理**:理解MapXtreme API支持的数据格式,如Shapefile、GeoJSON、WMS等,以及如何加载和操作这些数据...

    将mapxtreme 图层嵌入到 goole maps 中

    本主题聚焦于如何将MapXtreme图层与Google Maps进行整合,以实现更丰富的地图展示和交互功能。MapXtreme是杰仕登公司(Intergraph)开发的一款强大的地图服务器产品,它提供了丰富的地图数据处理和展示能力;而...

    mapxtreme 桌面完整示例

    8. **地图样式与主题**:MapXtreme支持自定义图层样式,包括颜色、符号、标签等。通过示例,用户可以学会如何创建和应用不同的地图样式和主题。 9. **空间查询**:例如,基于位置的搜索,缓冲区分析,最近邻查找等...

    mapxtreme sample

    5. 用户交互:如何添加鼠标事件,如点击地图获取坐标,拖动地图,缩放等,以及如何添加图层控制,让用户自定义显示内容。 6. Web服务:如果MapXtreme被用于创建Web服务,示例可能涵盖如何发布和消费这些服务,例如...

    Mapxtreme for java 入门示例简单图解1

    为了使地图更直观易读,Mapxtreme允许自定义图层的样式和主题。你可以改变图层的颜色、符号、标签等,甚至创建复杂规则以根据属性值动态调整样式。 10. **服务端扩展** Mapxtreme不仅限于简单的数据展示,还可以...

    使用mapxtreme插件进行使用

    1. **地图渲染**:MapXtreme能以多种方式展示地图,如矢量图层、栅格图层、地形图层等,支持自定义样式和符号系统。 2. **数据管理**:支持数据导入、导出,以及在线数据编辑和版本控制,确保数据的准确性和一致性。...

    mapXtreme 入门资料大全

    2. **数据源与图层**:MapXtreme支持多种数据源,如Shapefile、GeoTIFF、ArcSDE等,这些数据源可以被组织成图层,每个图层可以包含不同类型的数据,如矢量或栅格数据。 3. **地图操作**:用户可以通过API实现缩放、...

    MapXtreme2008中文教程

    MapXtreme2008的强大之处在于其强大的服务发布能力,它可以将地图数据转换为Web服务,供Web应用、移动应用或其他GIS系统使用。教程会详细讲解如何配置和发布地图服务,以及如何利用服务进行地图瓦片的动态生成和缓存...

    mapxtreme+C#的基本功能

    1. **地图显示与控制**:MapXtreme支持加载不同格式的地图数据,包括矢量图层和栅格图层。通过C#,开发者可以实现地图的加载、缩放、平移、旋转等基本操作。此外,还可以设置地图的投影方式,以及图层的可见性、透明...

    mapxtreme for java开发CS版之一

    9. **自定义功能**:根据需求扩展MapXtreme的功能,如添加自定义图层、实现特殊效果或提供个性化交互。 通过阅读并分析"MainFrame.java",我们可以深入学习如何将上述知识点应用到实际项目中,进一步提升MapXtreme ...

    mapx.zip_MapXtreme_java mapinfo_mapinfo_wms mapinfo

    1. 地图展示:MapXtreme Java能够加载和显示各种地理数据,包括矢量和栅格数据,用户可以自定义图层、比例尺、投影方式等。 2. 数据操作:它支持对地图数据进行添加、删除、修改等操作,同时可以进行空间查询,如...

Global site tag (gtag.js) - Google Analytics