MapObejcts组件应用设计(地图要素查询)

本文介绍了MapObjects2的三种查询方法:逻辑表达式查询、距离查询和Shape查询,并提供了具体的实现示例。

MapObjets2共有3种查询方法,样例在Query工程中。

2.4.1逻辑表达式查询

MapObjects的图层对象上可以用逻辑表达式进行查询,查询结果是Recordset实例。1在图层china上查查询1990gdp小于200的省份,将查询结果保存在记录集recs中,在Map1中用显示查到的省区图。

Dim recs As MapObjects2.Recordset  查询结果记录集

Private Sub Command1_Click()  用逻辑表达式查询

Dim query As String

query = “gdp1990 < 200”   查询表达式

Set recs = Map1.Layers(“china”).SearchExpression(query)  查询,返回一个记录集

Map1.Refresh                       

End Sub

绘制查到的图形对象:

Private Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE) ‘绘制查询结果图

  If recs Is Nothing Then Exit Sub

  Dim sym As New Symbol   绘图符号

  Dim shp As Object

  sym.Color = moRed

  sym.SymbolType = moFillSymbol

  sym.Style = moDiagonalCrossFill

 

  Do While Not recs.EOF

    Set shp = recs(“Shape”).Value

    Map1.DrawShape shp, sym  绘制图查到的省区

    recs.MoveNext

  Loop

End Sub

MapObjects2不允许在Command1_Click()过程中使用绘图语句:

Map1.DrawShape shp, sym

因此,在Map1_AfterTrackingLayerDraw过程中绘制查询结果。在recs记录集中,含有记录的全部属性内容,属性值的读取方法在后续章节中介绍。

2.4.2距离查询

根据图层的几何对象距离一个给定点的距离查询,结果是一个记录集。

用鼠标左键操作获取给定点的屏幕坐标:

Dim curX As Single, curY As Single   给定点的屏幕坐标

Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

  curX = X

  curY = Y

End Sub

创建点对象,设定查询距离,查询china图层中的几何对象,获得查询结果recs:

Private Sub Command2_Click() ‘按距离查询

Dim pt As MapObjects2.Point

Dim dist As Double

Set pt = Map1.ToMapPoint(curX, curY)  根据屏幕坐标建立point实例

dist = 1000

Set recs = Map1.Layers(“china”).SearchByDistance(pt, dist, “”)按距离查询

Map1.Refresh  触发Map1_AfterTrackingLayerDraw事件过程,绘制查询结果

End Sub

查询结果绘图显示使用前面的Map1_AfterTrackingLayerDraw过程。

由上面的程序可知,使用光盘中的样例时,应先用鼠标左键在地图窗口中点击要查的省区,然后单击按钮按距离查询

  按距离查询方法SearchByDistance的第三个参数可以是一个SQL表达式,用于筛选查询结果如:

Set recs = Map1.Layers(“china”).SearchByDistance(pt, dist, “gpd1985 < 250”)

china图层中查找与pt的距离小于dist而且gpd1985 < 250的记录集合。

2.4.3 Shape查询

Shape查询方法

Map1.Layers(“china”).SearchShape( Shape  As Object, SearchMethod as SearchMathodContants, Express ion  As String )

是距离查询概念的扩充。Shape是几何元素,即pointlinepolygonSearchMethod是一个常数,表示Shape与被查询对象之间的空间关系,取值0-14,表示15种空间关系(在帮助中索引SearchMethod Constants);ExpressionSQL表达式,过滤查询结果。

下面这段程序在地图窗口中跟踪一条线,查出线经过的省份。

Private Sub Command3_Click() ‘Shape查询Line与被查询对象相交

Dim line As MapObjects2.line

Map1.MousePointer = moCross

Set line = Map1.TrackLine   在地图窗口中绘制一条线,返回一个线对象实例

Set recs = Map1.Layers(“china”).SearchShape(line, moLineCross, “”) ‘查询,返回记录集

Map1.Refresh    重新显示地图窗口

Map1.MousePointer = moDefault

End Sub

语句

Set recs = Map1.Layers(“china”).SearchShape(line, moLineCross, “gdp1990 < 300”)

查找线line经过的省份且省的gdp1990 < 300的记录集。

 
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 QueueForMcu 基于单片机实现的队列功能模块,主要用于8位、16位、32位非运行RTOS的单片机应用,兼容大多数单片机平台。 开源代码:https://.com/xiaoxinpro/QueueForMcu 一、特性 动态创建队列对象 动态设置队列数据缓冲区 静态指定队列元素数据长度 采用值传递的方式保存队列数据 二、快速使用 三、配置说明 目前QueueForMcu只有一个静态配置项,具体如下: 在文件 中有一个宏定义 用于指定队列元素的数据长度,默认是 ,可以根据需要更改为其他数据类型。 四、数据结构 队列的数据结构为 用于保存队列的状态,源码如下: 其中 为配置项中自定义的数据类型。 五、创建队列 1、创建队列缓存 由于我们采用值传递的方式保存队列数据,因此我们在创建队列前要手动创建一个队列缓存区,用于存放队列数据。 以上代码即创建一个大小为 的队列缓存区。 2、创建队列结构 接下来使用 创建队列结构,用于保存队列的状态: 3、初始化队列 准备好队列缓存和队列结构后调用 函数来创建队列,该函数原型如下: 参数说明: 参考代码: 六、压入队列 1、单数据压入 将数据压入队列尾部使用 函数,该函数原型如下: 参数说明: 返回值说明: 该函数会返回一个 枚举数据类型,返回值会根据队列状态返回以下几个值: 参考代码: 2、多数据压入 若需要将多个数据(数组)压入队列可以使用 函数,原理上循环调用 函数来实现的,函数原型如下: 参数说明: 当数组长度大于队列剩余长度时,数组多余的数据将被忽略。 返回值说明: 该函数将返回实际被压入到队列中的数据长度。 当队列中的剩余长度富余...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值