>> 最新文章
>> 阅读排行
>> 推荐文章
MapX应用教程3—查询
三、查询 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.MapUnit,,) ‘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


当前位置: