TMapData地图控件说明
-----------------------------Talent Corp. QQ:4818472
•
MapX可以实现矢量图的绘制和控制,但不能响应短时间内大量用户的并发响应,而必须串行处理, 无法满足实际需求, SQL Server功能强大,速度快,可以响应并发请求, 但不能实现矢量图, 可以将两者结合,先把mapinfo矢量图的所有图元信息 (经纬度,颜色,符号...)导出到数据库中,然后在网络上访问,使用TCanvas对象进行绘制,注意经纬度和图形像素的转换, 速度很快,如果是C/S结构,能方便实现,如果是B/S结构, 必须下载ACTIVEX控件,等于只要下载图元记录,在客户端实现绘制,本方案完美实现矢量图和速度的结合,对用户数量没有限制, 因为利用了SQL服务器的高性能,且可以放弃mapx,对程序的部署和安装的压力大大减轻。
•
使用Delphi开发ActiveX控件TMapData,实现以上思路.适用于车辆监控和地图查询项目,并可根据实际项目修改控件,增加功能.
•
与MapX相比有以下特点
文件小:1M左右
简单:1天就可学会
地图数据与程序分离:地图数据存放在数据库中,而不是本地
地图数据透明:SQL Server数据库,可轻松维护
网络应用:局域网和互联网皆可,只要能连接数据库
并发性能:SQL Server的并发性能不用多说,地球人都知道
•
免费提供控件的DEMO版本(MapDataProj1.ocx)
•
免费提供测试程序源代码(delphi源码,如果没有装delphi,可以把pas文件改成txt进
行参考,如UnitTestMap.pas
UnitTestMap.txt)
•
免费提供Mapinfo地图文件到数据库的转换程序(需要安装Mapx5)
•
免费提供测试网页(在IE中使用javascript调用ocx)
•
•
工作流程
1. 安装SQL Server 2000数据库服务器
2. 建立数据库(本例子中为 “DT”)
3. 把Mapinfo格式的地图文件中的所有图元信息倒入数据库(本例子已完成,从文件‘DT20060126.BAK’还原)
4. 安装控件TMapData(命令:‘regsvr32 D:/TMapData公开部分/控件/MapDataProj1.ocx’,路径看实际情况)
5. 使用连接方法连接数据库
6. 使用画图方法绘制图形
7. 使用控件的其他属性和方法控制图形
控件属性:
ServerIP:string 数据库服务器地址
UserName:string 数据库服务器帐号
PassWord:string 数据库服务器密码
DataBase:string 数据库名称,例子中为”DT”
Tool:string 地图操作工具
工具 含义
Big 放大(点击或框选)
Small 缩小(点击或框选)
Move 移动
Distance 两点距离测量
none 空的工具,没有功能,只是点击图片,用于增加点图元的时候获得经纬度
polygon 绘制多边形工具
rect 绘制矩形工具
radio 绘制圆形工具
selectrect 用矩形框选
Select 选择(用鼠标点击选择)
GstID:integer地图ID
SelectFeature:integer选中的图元编号
Connected:boolean 是否已连接数据库
CenterX:float 中心经度
CenterY:float 中心纬度
ViewDistance:float 视野宽度(公里)
Zoom:float 缩放比 100显示全图,50显示一半
GetJD(x: Integer): Single 得到经度.参数像素X
GetWD(y: Integer): Single 得到纬度,参数像素Y
GetDistance(x1, y1, x2, y2: Single): Single 得到两点距离,参数两点的经纬度
GetAngle(jd, wd, jdold, wdold: Single): Single 得到两点的角度,参数两点的经纬度
AngleName(Angle: Single): WideString 得到方向的名称,参数角度,返回”东,南,西,北...
Getx(JD: Single): Integer 得到像素X,参数经度
GetY(wd: Single): Integer 得到像素Y,参数纬度
GetWidth: Single 得到地图边界左右经度差
GetHeight: Single 得到地图边界上下纬度差
GetFeatures(x, y: Single;count: Integer): WideString 得到附近的图元,参数点的经纬度,想
得到图元的数量,返回CommaText(逗号分隔结果),
QueryFeature(const name: WideString): WideString 查询类似名称的图元,参数名称,
返回CommaText(逗号分隔结果)
ShowTempLayer: WordBool 是否显示临时图层
BackColor: Integer 背景颜色
QueryCenter(x, y, distance: Single): WideString 查询中心点附近的的点图元,参数经纬
度, 距离(公里), 返回CommaText(逗号分隔结果)
AllLayers: WideString 得到所有的层,返回CommaText(逗号分隔结果)
VisibleLayers: WideString 设置可以显示的层,
参数CommaText(逗号分隔结果)
PopMenu: WideString 设置弹出菜单(当选中点图元的时候触发),
参数CommaText(逗号分隔结果)
ShowControlButton: WordBool 是否显示控制按钮(放大,缩小,移动...)
PointInArea(x, y: Single): WordBool; 点是否在绘制的范围之内 参数:经纬度
(配合工具polygon,rect,radio使用)
ShowBoundArrow: WordBool 是否显示边界的箭头(上下左右)
控件方法:
AboutBox:调用”关于”对话框
ConnectSQL:连接数据库
DrawMap(GstID: Integer):绘制城市地图,参数:地图ID,参考表map字段ID
LocateFeature(const name: WideString) 把图元的中心点作为地图的中心,参数图元名称
MoveTo(x, y: Single) 移动地图,参数:经纬度
AddTempPoint(const Name: WideString;
jd, wd: Single;radius: Integer)
在临时图层上增加点,参数:图元名称,经纬度,半径
DeleteTempFeature 删除临时图元
AddTempLine(const name, nodes: WideString;
Arrow: WordBool)
在临时图层上增加线,参数:图元名称,节点(commatext),是否显示箭头
AddPoint(const Name: WideString;
x, y: Single;
LayerID: Integer)
在图层上增加点,参数:图元名称,经纬度,图层ID
事先要把工具设为”none”来点击图片获得经纬度
SaveToJpg(const FileName: WideString) 保存到JPG图片,参数:JPG文件名
AddPolygon(const name: WideString;
LayerID: Integer) 增加多边形
参数:多边形名称,所属层的ID,
事先必须选择工具”polygon”,在地图上用鼠标绘出多边形
(移动画线,单击确定中间点,双击完成)
控件事件:
ViewChanged(Sender: TObject):地图视野改变
MouseMove(ASender: TObject;
x, y: Integer;
jd, wd: Single):
鼠标移动,参数像素,经纬度
MouseDown(ASender: TObject;
x, y: Integer;
jd, wd: Single):
鼠标按下, 参数像素,经纬度
MouseUp(ASender: TObject;
x, y: Integer;
jd, wd: Single):
鼠标抬起, 参数像素,经纬度
Select(ASender: TObject;
FeatureID: Integer;
const FeatureName: WideString)
图元被选择,参数图元编号,图元名称
Distance(ASender: TObject;
Distance: Single)
当使用距离工具的时候触发,参数距离(公里)
MenuClick(ASender: TObject;
const MenuItem: WideString;
FeatureID: Integer;
const FeatureName: WideString);
选中点图元以后按下菜单触发
参数:菜单项,图元编号,图元名称
MultiSelect(ASender: TObject;
const Features: WideString);
当矩形框选的时候,选择的图元不为空,触发图元多选事件,
参数Features:选中的图元ID列表,逗号间隔