在ASP.NET上开发地图查看功能,首先需要安装三个软件,vs,mapinfo,mapxtreme。Mapinfo是专业地图绘制工具。mapxteme是可用.net使用的插件,安装之后可以在vs上使用地图控件和相关命名空间,并可以将mapinfo绘制出来的地图转换成.NET可以识别的格式(如mws格式)。
一、MapInfo绘制地图
要放在.net中查看的地图首先应该在mapinfo中绘制好。Mapinfo中是以表的形式组织文件,表中又多个字段来记录信息。每个表又可以画多个图层来组成一幅图,图的信息可以用表中的多个字段来丰富。以下MapInfo绘制的简单示例:
MapInfo编辑窗口主界面:
1 新建表
新建表的时候可以使用原先的表结构,也可以创建新的表结构。创建新表的时候可以在新的地图页上编辑,也可以添加到当前的地图窗口编辑。选择界面如下:
2 表的字段设计
根据地图需要的信息设计表的字段,如下所示,placeid,placename。Placeid可以用来标志页面上的传值信息,placename可以在地图上显示地点名称。
3 绘制地图
在表的字段设计好之后,就可以利用工具栏里面的工具进行地图的绘制了。在地图上某些具体的位置用图形圈化出来,用工具栏中的 进行字段的赋值。另外,也可以导入图片,在已有图片的基础上进行地图绘制。
4 表和图层
在地图中,表和图层是可以根据需要随时更改的。 按钮可以进行图层的编辑,表的结构可以在菜单栏中选中更改。编辑完成后保存。
另外注意:在mapinfo对地图编辑的时候,不要在其他程序使用该地图,会有传值错误。应该在关掉mapinfo后进行该地图的调用。
二、Mapxtreme转换格式
Mapxtreme中的Workspace管理器整体界面:
用Mapxtreme中的Workspace管理器将在mapinfo编辑好各个表、图层(各个tab文件)整合成.NET可用的格式(mws)。可以这么来理解,如果把mws文件看成是SQL Server数据库文件,那么tab文件就相当于是SQL Server数据库中的各个表。在ASP.NET中的Webconfig中只需要连接mws文件就可以看到整个地图,就像连接SQL Server数据库到数据库的文件名可以看到所有表。
三、ASP.NET中查看地图
<%@ Register assembly="MapInfo.WebControls, Version=6.8.0.536, Culture=neutral, PublicKeyToken=0a9556cc66c0af57" namespace="MapInfo.WebControls" tagprefix="cc1" %>
<cc1:ZoomInTool ID="ZoomInTool1" runat="server" MapControlID="MapControl1" />
<cc1:ZoomOutTool ID="ZoomOutTool1" runat="server" MapControlID="MapControl1" />
<cc1:CenterTool ID="CenterTool1" runat="server" MapControlID="MapControl1" />
<cc1:PanTool ID="PanTool1" runat="server" MapControlID="MapControl1" />
<cc1:PointSelectionTool ID="InfoWebTool1" runat="server" ActiveImageUrl="MapXtremeWebResources/InfoToolControlActive.gif"
InactiveImageUrl="MapXtremeWebResources/InfoToolControlInactive.gif" MapControlID="MapControl1"
ClientCommand="InfoCommand" Command="Info" />
<cc1:MapControl ID="MapControl1" runat="server" Height="100%" Width="100%"
MapAlias="Map1" BorderColor="White" BorderStyle="None" BorderWidth="0px" />
实现控件功能的js代码:
//client info command to control client behavior for info tool.
function InfoCommand(name, interaction)
{
if (arguments.length > 0) {
this.Init(name, interaction);
}
}
InfoCommand.prototype = new MapCommand();
InfoCommand.prototype.constructor = InfoCommand;
InfoCommand.superclass = MapCommand.prototype;
InfoCommand.prototype.Execute = function() {
this.CreateUrl();
this.AddParamToUrl("PixelTolerance", this.pixelTolerance);
//create an XMLHttp obj to send request to server
var xmlHttp = CreateXMLHttp();
xmlHttp.open("GET", this.url, false);
xmlHttp.send(null);
//get response back
//debugger;
this.result = xmlHttp.responseText;
//根据this.result查询设备列表
if (this.result != "") {
ymPrompt.setDefaultCfg({ maskAlpha: 0.8, maskAlphaColor: '#ffffff' });
ymPrompt.win({ title: '设备列表', fixPosition: true, width: 800, height: 460, iframe: { id: 'myId', name: 'myName', src: '../EQBaseListByPlace.aspx?eplaceid=' + this.result} });
}
};