虽然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
整体思路是:
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
发表评论
-
mapxtreme添加标记和删除标记
2009-03-30 16:23 1786新增2个pointselectiontool, clientc ... -
添加数据库中的经纬度信息
2009-03-30 16:22 1740C# Code: 复制内容到剪贴板 代码: MapInfo ... -
MapxTreme测试:绘制图标和文字标注
2009-03-30 16:19 3651代码: using System; using System ... -
mapxtreme 2004 改变feature颜色
2009-03-30 16:18 15471.C# code: 复制内容到剪贴板 代码: MapI ... -
MapxTreme2005地图打印
2009-03-30 16:18 1184MapxTreme2005地图打印 一、语言: c# net2 ... -
在C#应用中如何读取存在ORACLE(或SQL Server)中的MapInfo表
2009-03-30 16:17 1212using MapInfo.Data; ... -
MapXtreme 2005查找图元方法,web的
2009-03-30 16:16 1754先添加一个TextBox和 DropDownList控件 复 ... -
MapXtreme点取地图获得信息
2009-03-30 16:15 1864拖一个pointselectiontool到页面, 修改属性 ... -
MapXtreme查看整个地图的代码
2009-03-30 16:14 900Map map = mapControl1.Map; IMap ... -
MapXtreme 2005 鹰眼源代码
2009-03-30 16:13 1756研究了一段时间的MapXtreme2005 v6.6, 实现了 ... -
实现手动画线
2009-03-30 16:12 1203为了实现在地图上手动画线的功能,煞费了一翻苦心,不过最后实现的 ... -
Web页面中实现鼠标中键缩放
2009-03-30 16:11 1500在MapXtreme 2005中,在Windows应用程序中自 ... -
两种方法实现动态轨迹
2009-03-30 16:11 1344在GIS中,动态轨迹的实现是非常有用的,可用GPS定位,热点跟 ... -
总结查找图元的三种方法
2009-03-30 16:10 1230在MapXtreme 2005中,查找图元提供了非常多的方法, ... -
添加标注图层
2009-03-30 16:08 1152在MapXtreme 2005中添加标注图层是非常容易的,只要 ... -
向图层中添加线段
2009-03-30 16:07 914向图层中添加线段和向图层中添加点是一样的,其本质都是向图层中添 ... -
向图层中添加点
2009-03-30 16:06 998在添加点之前先要在地图上创建一个临时图层,创建临时图层请参考《 ... -
mapxtreme2005 改变选中的图元样式
2009-03-30 16:05 1054MapInfo.Styles.CompositeStyle c ... -
Mapxtreme2005 两点之间画直线
2009-03-30 16:04 1111private void DrawLine(MapInfo.D ... -
mapxtreme2005 创建各种样式
2009-03-30 16:04 1101public MapInfo.Styles.Composite ...
相关推荐
.net2008 c# mapxtreme 加载地图,传进2个点在图层上画线
mapxtreme2005 DevelopmentReference mapxtreme2005 开发帮助手册中文版
最新中文版MapXtreme2005开发指南
mapxtreme2005说明书
mapxtreme实现自定义工具及鹰眼功能
MapXtreme2005_DevGuide中文版
MapXtreme 2005 技术手册,详细介绍MapXtreme 特点、桌面开发、web应用开发的说明和例子
仅供个人学习使用,一切法律后果本人概不负责!
vs2005+mapxtreme2005例子(带西安地图数据) 实现如下功能: 地图操作:放大、缩小、漫游; 图层控制; 查询定位; 增加点对象、删除点对象
MapXtreme 2005 6.7.1破解文件,复制到*Common Files\MapInfo\MapXtreme\6.7.1文件夹下
际编写代码之前,web 应用程序开发的许多方面都需要做出设计选择。最重要的是要了解 应用程序将如何使用,然后再去设计该应用程序。 在使用 MapXtreme 2005 设计分布式应用程序时必须考虑许多因素。有些因素是 ...
mapxtreme2005中文开发手册1
MapXtreme2005产品介绍,介绍了mapxtreme2005产品的主要功能以及与2003相比的改进
MapXtreme2005 v6.6 软件
《MapXtreme 2005 开发人员指南》概述了 MapXtreme 2005 开发环境和命名空间。Visual Studio .NET 集成的帮助系统提供了更多特定的 API 级别的信息。用户需要使用这些工具开 发与 MapInfo 强大的地图绘制组件集成的 ...
mapxtreme+vs05实例代码
MapXtreme 2005 Web 应用程序规划及最佳实践 InProc Application 开发模式 Pooled Application 开发模式 Pooled Session 和 State COM+ Object Pooling Application 性能 IIS Server 设置 Application 示例
mapxtreme2005自带的如何实现帮助文档
一个关于webgis的小程序,采用vs2005和mapxtreme2005 开发,主要包括鹰眼、测距、测面积、以及常用的地图操作等功能,自带电子地图,对初学webgis的同志很有用,希望大家喜欢。
MapInfo.MapXtreme.2005.v6.7.1-Crack