虽然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 1837新增2个pointselectiontool, clientc ... -
添加数据库中的经纬度信息
2009-03-30 16:22 1793C# Code: 复制内容到剪贴板 代码: MapInfo ... -
MapxTreme测试:绘制图标和文字标注
2009-03-30 16:19 3708代码: using System; using System ... -
mapxtreme 2004 改变feature颜色
2009-03-30 16:18 15961.C# code: 复制内容到剪贴板 代码: MapI ... -
MapxTreme2005地图打印
2009-03-30 16:18 1245MapxTreme2005地图打印 一、语言: c# net2 ... -
在C#应用中如何读取存在ORACLE(或SQL Server)中的MapInfo表
2009-03-30 16:17 1272using MapInfo.Data; ... -
MapXtreme 2005查找图元方法,web的
2009-03-30 16:16 1812先添加一个TextBox和 DropDownList控件 复 ... -
MapXtreme点取地图获得信息
2009-03-30 16:15 1915拖一个pointselectiontool到页面, 修改属性 ... -
MapXtreme查看整个地图的代码
2009-03-30 16:14 958Map map = mapControl1.Map; IMap ... -
MapXtreme 2005 鹰眼源代码
2009-03-30 16:13 1820研究了一段时间的MapXtreme2005 v6.6, 实现了 ... -
实现手动画线
2009-03-30 16:12 1271为了实现在地图上手动画线的功能,煞费了一翻苦心,不过最后实现的 ... -
Web页面中实现鼠标中键缩放
2009-03-30 16:11 1560在MapXtreme 2005中,在Windows应用程序中自 ... -
两种方法实现动态轨迹
2009-03-30 16:11 1402在GIS中,动态轨迹的实现是非常有用的,可用GPS定位,热点跟 ... -
总结查找图元的三种方法
2009-03-30 16:10 1267在MapXtreme 2005中,查找图元提供了非常多的方法, ... -
添加标注图层
2009-03-30 16:08 1202在MapXtreme 2005中添加标注图层是非常容易的,只要 ... -
向图层中添加线段
2009-03-30 16:07 961向图层中添加线段和向图层中添加点是一样的,其本质都是向图层中添 ... -
向图层中添加点
2009-03-30 16:06 1050在添加点之前先要在地图上创建一个临时图层,创建临时图层请参考《 ... -
mapxtreme2005 改变选中的图元样式
2009-03-30 16:05 1095MapInfo.Styles.CompositeStyle c ... -
Mapxtreme2005 两点之间画直线
2009-03-30 16:04 1174private void DrawLine(MapInfo.D ... -
mapxtreme2005 创建各种样式
2009-03-30 16:04 1148public MapInfo.Styles.Composite ...
相关推荐
- **层控制(Layer Control)**:MapXtreme2005新增了Layer Control控件,使得在Windows Forms应用程序中管理图层变得更加直观和高效。 - **点在多边形内的行为**:针对点是否位于多边形内部的判断逻辑进行了优化,...
《基于VS2005与MapXtreme2005的地图应用开发实例解析》 在信息技术领域,地图服务已经成为不可或缺的一部分,尤其在地理信息系统(GIS)中扮演着重要角色。Visual Studio 2005(简称VS2005)作为微软推出的强大开发...
它旨在帮助开发人员了解如何使用MapXtreme 2005来开发与MapInfo强大的地图绘制组件集成的Windows桌面和基于Web的应用程序。通过阅读这本指南,开发人员可以获得关于MapXtreme 2005的主要功能、新增内容以及最佳实践...
10. **自定义渲染**:MapXtreme允许开发者自定义图层的渲染方式,如颜色、符号、标签等,以满足特定视觉需求。 通过学习和理解这些实例代码,开发者能够深入掌握MapXtreme与Visual Studio 2005的结合使用,从而构建...
4. **图层管理**:图层是MapXtreme中的重要概念,用于组织和控制不同数据的显示。开发者需要掌握如何创建、修改和管理图层,以及设置图层的显示属性。 5. **地理编码与反向地理编码**:这两项功能允许用户将地址...
3. GIS服务发布:MapXtreme 2005 v6.6能够将地理信息以Web服务的形式发布,使远程用户可以通过Web浏览器访问地图和地理数据,实现地图服务的共享和互操作。 4. 客户端应用开发:该版本支持开发基于.NET Framework的...
源代码可能包含如何创建和管理不同类型的图层,以及如何控制它们的显示样式。 6. **空间分析**:MapXtreme提供了丰富的空间分析工具,如缓冲区分析、叠置分析、距离计算等。通过源代码,你可以看到如何调用这些功能...
本资源包含的是MapXtreme内置控件的源代码,这对于深入理解和自定义MapXtreme的应用是非常有价值的。 MapXtreme的核心特性包括地图渲染、地理编码、空间分析以及数据管理等。其内置控件是预先封装好的功能模块,...
在本压缩包“CustomLayerControl_MapXtremecsharp_webgis_zip_web_”中,重点是关于如何在MapXtreme for .NET环境中自定义图层控制的功能。下面我们将深入探讨MapXtreme、C#编程语言以及WebGIS相关的知识点。 1....
5. **图层管理**:学习如何添加、删除、隐藏和显示地图层,以及如何控制图层的显示顺序和透明度。 6. **数据源处理**:理解MapXtreme API支持的数据格式,如Shapefile、GeoJSON、WMS等,以及如何加载和操作这些数据...
本主题聚焦于如何将MapXtreme图层与Google Maps进行整合,以实现更丰富的地图展示和交互功能。MapXtreme是杰仕登公司(Intergraph)开发的一款强大的地图服务器产品,它提供了丰富的地图数据处理和展示能力;而...
8. **地图样式与主题**:MapXtreme支持自定义图层样式,包括颜色、符号、标签等。通过示例,用户可以学会如何创建和应用不同的地图样式和主题。 9. **空间查询**:例如,基于位置的搜索,缓冲区分析,最近邻查找等...
5. 用户交互:如何添加鼠标事件,如点击地图获取坐标,拖动地图,缩放等,以及如何添加图层控制,让用户自定义显示内容。 6. Web服务:如果MapXtreme被用于创建Web服务,示例可能涵盖如何发布和消费这些服务,例如...
为了使地图更直观易读,Mapxtreme允许自定义图层的样式和主题。你可以改变图层的颜色、符号、标签等,甚至创建复杂规则以根据属性值动态调整样式。 10. **服务端扩展** Mapxtreme不仅限于简单的数据展示,还可以...
1. **地图渲染**:MapXtreme能以多种方式展示地图,如矢量图层、栅格图层、地形图层等,支持自定义样式和符号系统。 2. **数据管理**:支持数据导入、导出,以及在线数据编辑和版本控制,确保数据的准确性和一致性。...
2. **数据源与图层**:MapXtreme支持多种数据源,如Shapefile、GeoTIFF、ArcSDE等,这些数据源可以被组织成图层,每个图层可以包含不同类型的数据,如矢量或栅格数据。 3. **地图操作**:用户可以通过API实现缩放、...
MapXtreme2008的强大之处在于其强大的服务发布能力,它可以将地图数据转换为Web服务,供Web应用、移动应用或其他GIS系统使用。教程会详细讲解如何配置和发布地图服务,以及如何利用服务进行地图瓦片的动态生成和缓存...
1. **地图显示与控制**:MapXtreme支持加载不同格式的地图数据,包括矢量图层和栅格图层。通过C#,开发者可以实现地图的加载、缩放、平移、旋转等基本操作。此外,还可以设置地图的投影方式,以及图层的可见性、透明...
9. **自定义功能**:根据需求扩展MapXtreme的功能,如添加自定义图层、实现特殊效果或提供个性化交互。 通过阅读并分析"MainFrame.java",我们可以深入学习如何将上述知识点应用到实际项目中,进一步提升MapXtreme ...
1. 地图展示:MapXtreme Java能够加载和显示各种地理数据,包括矢量和栅格数据,用户可以自定义图层、比例尺、投影方式等。 2. 数据操作:它支持对地图数据进行添加、删除、修改等操作,同时可以进行空间查询,如...