• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gpsgis

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

VB+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 

 

posted on 2005-12-12 18:23  handsomet  阅读(714)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3