『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯
首页 -> 3S基础知识 -> MapInfo-> 正文

MapX应用教程(3)—查询

MapX应用教程(3)—查询
       属性查找。FindSearch方法:注意的是Find方法只支持TAB表文件,不支持空间数据表。
       三、查询

 

       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

      京ICP备08100627号-22 京公网安备 11010802030428号