3S基础知识:MapX应用教程—查询

  查询

  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

猜你喜欢

转载自blog.csdn.net/u010687924/article/details/78475518