返回首页
当前位置: 主页 > GPS学院 > 应用软件 >

用MapX快速开发(5)

时间:2008-01-18 10:58来源:GPS之家-导航之家 作者:www.gpsuu.com
系统是混合结构:对地图的访问使用的是文件访问方式,对属性数据的访问使用的是大型数据库形式使用ID关联:在TAB表和数据库中有ID字段,两个字段作为唯一值关联字段。(一对一的关系)。示例: Lyr.KeyField=ID Set
 系统是混合结构:对地图的访问使用的是文件访问方式,对属性数据的访问使用的是大型数据库形式使用ID关联:在TAB表和数据库中有ID字段,两个字段作为唯一值关联字段。(一对一的关系)。示例:  Lyr.KeyField=”ID”
Set Ftr=Ftrs.Item(J)
 ‘SQL语句查找对应的属性信息
SampleAdo.RecordSource =”Select a.id as id,b.name as name from Table1 a, Tabl
e2 b WHERE (a.id=b.id) AND ( a.id LIKE ‘%“ +Ftr.KeyValue+“%’)”
 九、空间数据库  ’空间数据库中的索引技术用的是R_Tree技术,而不是原来一般意义上的B_Tree索引技术。
’空间数据在Spatial中以地理属性信息形式存放。
’在Oracle的版本中有如下需要注意事项:
a) Oracle 8.1.5这个版本中,首次引入Spatial组件。使用上非常不好:图形的样式非常单一,且为黑白的而非彩色,上载地图数据时,数据丢失非常严重。存取数据时非常慢。在Spatial中自动创建prinx字段作为地图索引主关键字段
b) Oracle 8.1.6版本:图形为彩色的,增加了样式的支持,但不支持同一图层下的多样式(主要指点对象)。创建地图数据时,地图的坐标常发生偏移。属性数据更新时,需要两次刷新才能完整提交;地图数据数据提交时,其坐标发生偏移:向原点偏移,需要认为地单独将其移动到其初始创建位置。存取速度上还是比较慢,离实用尚有一定距离。在Spatial中自动创建mi_prinx字段作为地图索引主关键字段
² Oracle 8.1.7版本:支持多样式,数据上载丢失非常小(只有文本对象存在丢失的记录)。在地图数据存取不是很大的时候,速度上可以被用户接受。
² 如何将MapInfo 的TAB表内容上传到Oracle 中?
a) 免费工具:easyloader6.7(Oracle 8.1.7),下载地址:www.mapinfo.com.cn
b) 如何上载?注意:上载之前对Tab表进行紧缩。
c) 在程序中如何使用空间数据库中的地图数据?
d) 添加地图时,必须指定字段mi_prinx的明确值,且该值不能为表中已存在的值。写入地图数据时,应将其全部NOT NULL 字段值赋给,否则保存失败。
e) 示例:Tab表+空间数据表 的数据分布形式。
 十、GIS应用的分发  1、 制作你自己的系统的安装盘:可执行文件、必要系统文件、运行库文件、其他数据文件。
2、 单独的MapX安装盘:MapInfo MapX Runtime安装程序,实际上是MapX控件安装程序(存在于MapX sdk包)
3、 注册:安装完成以后,运行GeosetManager40.exe程序获得硬件ID号,然后通过EMAIL的形式将该ID号发送到MapX产品供应商申请正式的许可文件(mapx40.lic)。获得后覆盖原mapx40.lic文件即可。注意:硬盘格式化后该ID号失效。
  需求:鹰眼功能、拓扑关系、不同图形不同颜色表现、数据绑定、系统性能。  结构分析:做基于TAB文件的GIS系统
1、 鹰眼功能
(1) 建立两个Form对象,将两个Map对象分别放在这两个窗口对象中。
(2) 一个小窗口作为鹰眼窗口,大 窗口作为主地图窗口。鹰眼窗口中的Map对象的视野应很大,而主地图窗口的视野根据需要设置。
(3) 两个窗口中加载不同的GST文件。需要的是主地图窗口的显示范围应为鹰眼窗口中某个矩形所包含的地图对象范围。
(4) A、在鹰眼窗口中画一个矩形(Rect为矩形对象),B、主地图窗口执行 Set MainMap.Bounds = Rect
(5) 需要注意的是:鹰眼窗口与主地图窗口两者间的坐标投影系统应完全一致。
 2、 拓扑关系
实际上就是图元与图元的空间关系。说历史:原来建立拓扑关系使用的是属性关联。
点查询、圆查询、矩形查询、多边形查询等这些是属于简单空间关系的对比。而对拓扑关系的查询多数情况下使用Parts对象来解决。
Ftr1与另一个Ftr2的空间关联:先找到Ftr1的其止节点,然后以这个节点为中心画一个非常小的圆,在这个圆范围内的某个设备可认为与该Ftr1相连。
判断某个图元在指定图层上的相交对象集合:
Set Ftrs=Lyr.SearchWithinFeature (SearchFtr, miSearchTypePartiallyWithin)
 3、 不同图形不同颜色表现
(1)更新样式   再结合临时图层就可以很好解决(使用图层刷新)。而且刷新时不会引起整个Map对象的刷新(屏幕抖动)
(2)专题图   存在更新属性值后不能实时刷新专题图的问题。
4、 数据绑定
对未绑定的属性集合使用 MainMap.Datasets.ADD
地图集合和属性集合为一个数据集合的不可分割的两个部分
5、 系统性能
速度是否为用户所接受、系统是否稳定(界面要求)、修改数据数据的时候是否存在数据一致性维护问题、造价是否合理。
(1)速度:使用数据分布可以较好地解决:地图数据:地形图数据以文件形式存放,业务地图数据存放在空间数据库中;属性数据:全部存放在大型数据库中。
 (3)数据一致维护:遵循图元优先的原则。图形对象必须首先存在,其他相关信息在此基础上建立。注意:
² 修改时应先修改地图对象,后提交属性信息
² 删除时应先删除其他信息,最后删除图形信息
(4)造价  这里主要指平台费用。A、现有数据格式,B、功能要求:空间分析是否复杂、地图图层是否分散、系统中地图输出的质量要求、系统中统计分析复杂程度是否较繁琐、直接的平台使用用户数(并发数)。

LayerInfo.Type = miLayerInfoTypeTab    ‘加载表的类型
LayerInfo.AddParameter FileSpec, FilePath + LayerName + .TAB      ‘加载表
的全路径名
LayerInfo.AddParameter NAME, LayerName   ‘地图集的别名
LayerInfo.AddParameter AutoCreateDataset, 1    ‘是否加载属性数据集
LayerInfo.AddParameter datasetname, LayerName   ‘属性数据集别名

 

MainMap.Layers.Add LayerInfo    ‘加载到指定的MapX对象中,立即可直接使用

 

5、 第三种加载数据方式:GST文件+ LayerInfo方式。示例:
     使用两个MapX对象:MainMap、TempMap
TempMap.Geoset=GST文件
MainMap.geoset=””
TempMap.Refresh

 

For I=1 to TempMap.Layers.Count
FileName=TempMap.Layers.Item(I).Filespec
‘直接引用LayerInfo方式加载地图数据到MainMap
Next

 

(责任编辑:admin)

[ GPSUU整理发布,版权归原作者所有。]
顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------

推荐内容