欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏SuperMap应用与开发SO开发 → 正文
空间查询
07-10-26 10:00:09 作者:未知 出处:超图

功能简介:

    示范矢量数据集soDatasetVector的空间查询功能。主要途径是利用几何对象之间的空间关系,通过几何对象(点、线、面)去查询几何对象,如果查询成功且有适合查询模式关系的几何对象存在,则返回一个包含所有适合这一查询模式关系的记录集

数据来源:..\Data\World目录下的World.sdb和World.sdd两个文件

    所用SuperMap Objects 组件、对象的主要属性和方法:

控  件

属  性

方  法

SuperWorkspace

 

OpenDatasource

SuperMap

 Layers

 

soDatasetVector

Snapable

QueryEx

功能实现:

 

 

    空间查询模式中,有些模式对空间位置的精度要求比较高,因此,有必要开启矢量数据集的捕捉状态。这个范例的设计思想是通过在SuperMap的TrackingLayer上绘制一个点或线或面对象,在SuperMap_Tracked()事件中获取刚才绘制的集合对象,然后再利用这个几何对象按照指定的空间查询模式在指定的数据集上进行空间查询,如果查询结果不为空,则把查询结果追加到选择记录集中,让它亮显,再把用来进行空间查询的集合对象作为一个示例添加到SuperMap的TrackingLayer上。

 

公共变量:

 

Dim objGeometry As soGeometry
Dim objDt As soDatasetVector

 

Set objDt = SuperMap1.Layer(2).Dataset

 

Dim objRcd As soRecordset
Dim objStyle As New soStyle
With objStyle
     .PenColor = vbBlue
     .SymbolSize = 80
End With

 

 

 

  • 设置SuperMap的TrackingLayer的绘图状态

 

绘点:SuperMap1.Action = scaTrackPoint

 

绘线:SuperMap1.Action = scaTrackPolyline

 

绘面:SuperMap1.Action = scaTrackPolygon

 

 

 

  • 在SuperMap_Tracked()中接受几何对象

 

Set objGeometry = SuperMap1.TrackedGeometry

 

 

 

  • 进行给定查询模式的空间查询(代码下面的图为相应的查询结果图)

 

    如果搜索对象是多边形,返回全部或部分被搜索对象包含的对象;如果,搜索对象不是多边形,就返回全部或部分包含搜索对象的对象。

 

Set objRcd = objDt.QueryEx(objGeometry,scsAreaIntersect,"")

 

 

 

 

    如果搜索对象是多边形,返回全部或部分被搜索对象包含的对象;如果,搜索对象不是多边形,就返回全部或部分包含搜索对象的对象。

 

Set objRcd = objDt.QueryEx(objGeometry,scsAreaIntersect,"")

 

 

 

 

    与scsAreaIntersect相同,但是相邻/有边线相接触的对象不符合条件。

 

Set objRcd = objDt.QueryEx(objGeometry,scsAreaIntersectNoEdgeTouch,"")

 

 

 

 

    返回与搜索对象有公共点或者与搜索对象中的的边线有相交的所有对象。

 

Set objRcd = objDt.QueryEx(objGeometry,scsCommonPointorLineCross,"")

 

 

 

 

    返回与搜索对象有公共点的所有对象。

 

Set objRcd = objDt.QueryEx(objGeometry,scsCommonPoint,"")

 

功能实现:

    返回完全包含搜索对象的对象。如果是多边形,返回的对象必须全部包含搜索对象;如果是线,返回的对象必须重叠于搜索对象,并且搜索对象不得有任何一段超出返回的对象;如果是点,搜索对象必须重叠于返回的点对象中的一个顶点。

Set objRcd = objDt.QueryEx(objGeometry,scsContainedBy,"")

 

    返回完全包含搜索对象的对象,并且没有边线或者点接触,因此,被查询的对象必须是多边形对象。

Set objRcd = objDt.QueryEx(objGeometry,scsContainedByNoEdgeTouch,"")

 

    返回完全被搜索对象包含的对象。

Set objRcd = objDt.QueryEx(objGeometry,scsContaining,"")

 

    返回全部或部分包含搜索对象、或者全部或部分被搜索对象包含的所有对象,边线有接触的对象也符合条件。

Set objRcd = objDt.QueryEx(objGeometry,scsEdgeTouchOrAreaIntersect,"")

 

    返回与搜索对象中的与边线有相交的所有对象。

Set objRcd = objDt.QueryEx(objGeometry,scsLineCross,"")

 

    返回包含搜索对象中的第一个点的多边形对象。

Set objRcd = objDt.QueryEx(objGeometry,scsPointInPolygon,"")

  • 让空间查询的结果亮显,并显示用来查询的对象

SuperMap1.TrackingLayer.AddEvent objGeometry, objStyle, ""
SuperMap1.Selection.FromRecordset objRcd
SuperMap1.Refresh


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号