mapx实现查询

来源:互联网 发布:linux shell遍历文件夹 编辑:程序博客网 时间:2024/06/05 05:42

1、 属性查找。Find、Search方法:注意的是Find方法只支持TAB表文件,不支持空间数据
表。
Find :与FoxPro中Locate定位命令想类似。
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
原创粉丝点击