http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> MapInfo >> 正文

MapX应用教程(3)—查询

作者:未知    文章来源:网络    点击数:    更新时间:2006-12-25
摘要:
三、查询 
 
1、 属性查找。FindSearch方法:注意的是Find方法只支持TAB表文件,不支持空间数据
表。 
Find :与FoxProLocate定位命令想类似。 
Search:支持SQL语句。写法:仅指SQL语句的WHERE 部分,且From语句中只能有一个表—
—仅对单表进行操作:Select * from LayerName WHERE ID LIKE %北京% 
示例: 
A、查找 
Dim Ftrs AS MapXlib.Features     ‘图元集合 
 
SET Ftrs=Lyr.Search(ID LIKE ““%北京%”””) 
For I=1 to Ftrs.Count 
   ‘执行语句 
Next 
B、高亮显示 
Lyr.Selection.Replace Ftrs    ‘将当前查询所得的结果集全部高亮显示(隐含执行:
Lyr.ClearSelection语句)——加入selection集合 
闪烁:不能用Selection,否则会对整个屏幕进行整个刷新(抖动)。使用更新Style的方
法进行选定图元的闪烁。 
记载图元的老样式:Set Oldsytle=Ftr.Style 
 
Lyr.Selection.Add Ftrs    ‘将当前查询所得的结果集添加到已有的结果集中,再全部
高亮显示 
C、对查询的结果集进行属性修改 
示例程序:完成的是Professional中信息工具功能 
Dim ds AS MapXlib.Dataset 
Dim Flds AS MapXlib.Fields 
Dim Ftr AS MapXlib.Feature 
 
Set Lyr=MainMap.Layers.Item(LayerName) 
Set ds=Lyr.Datasets.item(1) 
Set Flds=ds.Fields 
‘查找 
SET Ftrs=Lyr.Search(ID LIKE ““%北京%”””) 
If Ftrs.count=0 then exit sub 
 
‘读取属性值 
For I=1 to Ftrs.Count 
   Set Ftr=Ftrs.Item(I) 
   For j=1 to Flds.count 
FldsName(J)=Flds.Item(J).Name    ‘字段列表 
Lyr.KeyField=FldsName(J) 
  ValueStr(I,J)=Ftr.KeyValue        ‘值列表 
   Next 
Next 
 
‘修改属性 
MainMap.AuyoRedraw=False 
Lyr.Editable=True 
 
For j=1 to Flds.count 
Lyr.KeyField= Flds.Item(J).Name 
Ftrs.Item(j).KeyValue =ValueStr(J)     ‘更新值列表 
Ftrs.Item(j).Update True 
Next 
 
Lyr.Refresh 
Lyr.Editable=False 
MainMap.AuyoRedraw=True 
 
‘修改样式 
Dim NewStyle AS MapXlib.Style 
 
With NewStyle 
‘设置样式 
End With 
 
MainMap.AuyoRedraw=False 
Lyr.Editable=True 
 
For i=1 to Ftrs.count 
Set Ftr =Ftrs.Item(I) 
SET Ftr.Style=NewStyle        ‘更新样式 
Ftr.Update True 
Next 
 
Lyr.Refresh 
Lyr.Editable=False 
MainMap.AuyoRedraw=True 
 
2、 空间查找 
² 点查找:SearchAtPoint,结果集为Features类型 
Dim Pnt AS MapXlib.Point 
 
Pnt.Set X,Y 
Set Ftrs=Lyr.SearchAtPoint(Pnt,miSearchResultAll) 
For I=1 to Ftrs.Count 
   ‘执行语句 
Next 
注意:点查找时,一般情况下结果集在一个以上的图层都存在。所以取值时应分别提取 
 
 
² 园查找:在临时图层上画一个不保存的圆,然后查找被这个圆所包含的所有图层的
图元对象。 
Dim Pnt AS MapXlib.Point 
Dim TempCir AS MapXlib.Feature 
Dim FeaFac AS MapXLIB.featurefactory 
 
Pnt.Set X,Y 
Set tempcir=FeaFac.CreateCircularRegion(miCircleTypeMap ,Pnt,1, MainMap.MapUni
t,,) 
 
miSearchTypeCentroidWithin :中心点包含 
miSearchTypePartiallyWithin :部分包含 
miSearchTypeEntirelyWithin :全部包含 
 
Set Ftrs=Lyr.SearchWithinFeature (TempCir, miSearchTypePartiallyWithin) 
 
For I=1 to Ftrs.Count 
   ‘执行语句 
Next 
 
SET Pnt =Nothing 
set TempCir =Nothing 
set FeaFac =Nothing 
 
3、 相交 
判断两个图元是否有交点以及交点坐标信息。 
1)判断是否相交 
IF Lyr.IntersectionTest( ftr1, ftr2, miIntersectFeature ) THEN 
   ‘交点 
END IF 
 
2)获取相交点坐标信息 
‘交点 
Dim Ftr AS MapXlib.Feature 
 
SET Ftr=MainMap.FeatureFactory. IntersectFeatures(Ftr1,Ftr2) 
‘交点坐标信息 
For J=1 to Ftr.parts.item(1).count 
    X1= Ftr.parts.item(1).Item(J).X 
    Y1= Ftr.parts.item(1).Item(J).Y 
Next 
 
4、 测距 
使用Map对象的Distance方法。如何测量任意多边形的周长? 
使用累加的方法,还要使用图元节点集合。 
DistanceValue=0 
‘第一个点 
Pnt.Set Ftr.Parts.Item(1).Item(1).X, Ftr.Parts.Item(1).Item(1).Y 
For j=2 TO Ftr.Parts.Item(1).Count 
   ‘累加 
   X1= Ftr.Parts.Item(1).Item(j-1).X 
   Y1= Ftr.Parts.Item(1).Item(j-1).Y 
   X2= Ftr.Parts.Item(1).Item(j).X 
Y2= Ftr.Parts.Item(1).Item(j).Y 
   DistanceValue = DistanceValue +MainMap.Distance(X1, Y1, X2, Y2) 
Next 
‘多边形周长 
Msgbox DistanceValue+” ”+MainMap.MapUnit 

Tags:MapX应用教程  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图