gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:5747回复:12

MapObjects开发指南 选择元素以及检索信息

楼主#
更多 发布于:2003-07-28 11:24
地图是关于地理地点信息的存储库:它们的位置,空间关系以及属性值.
你可以通过学习如何察询与你的数集有关的表及通过掌握空间和逻辑的查询方法来从你的数据中获取信息.管理有关 Map object 的信息的关键就是记录集.它表示了你的地图层中的属性信息并向你提供了使用表记录的方法.
同时我们将学习如何查询记录集中的信息组,修改它们, 以及更新它们的值.并且我们将为了三种返回一个为选定地形核对位置的记录集的方法再次访问地图控制器.
在本章中,我们将涵盖以下主题:
使用记录集指导浏览与一个图层相关联的多个记录.
对一个记录集进行基本的数值统计计算.
查询及更改一个记录集中的信息组.
使用 ODBC 的项目表及关联.
在给定距离内搜索元素
使用从一个形状文件或 SDE 层中得到的形状来选择其它形状.
寻找重叠了地形的形状.
寻找多个在一条线或点相接触的形状.
寻找包含其它地形的形状.
使用一条选择语句来选择元素.
在前些章中我们已讨论了一些数据存取目标, 在本章中我们将集中讨论剩下的数据存取目标.
记录集是用来同一个图层中信息进行交互作用的关键目标, 一个记录集代表从一个地图层中得到的多个记录.
记录集有 Table Desc 目标和信息组集合两个特性,其中包括信息组目标.
从一个记录集目标中,你可以用基本的统计信息来计算一个统计目标.
表目标也可用来增加关联或进行地址匹配.
字符串集合包含有标准的字符串数据类型并且在更改用户接口控制和 Renderer 目标的一部分.
在本章的结尾,我们将看到应用在 mo View  样本应用程序上三条命令中记录集:Identify (辨别), Find (寻找)和 Spatial Search (空间搜索).
      
使用记录集
一个记录集目标是作为 Map Layer (地图层)目标的一个特性而被创建的,新的记录集也可以通过在 Map Layer (地图层)目标上运用方法而被创建.
有两种途径得到一个记录集目标.
当你创建了一个地图层目标时, 你就将一个记录集目标作为记录特性创建起来.这个记录集包括那个地图层的所有记录.
当你运用下述地图层方法之一时; Search By Distance (通过距离搜索)搜索表达式 (Search Expression),以及 Seafch Shape (搜索形状), 一个记录集将被该方法返回, 只有满足该方法条件的记录格被包含在该记录集中.
记录集是不可创建目标.也就是,你不能用 New key word (新关键字)或 Create Object (创建目标)功能来声明一个记录集.一个记录集仅能作为一个地图层的属性或通过应用三种方法之一而被创建.

记录集目标
这里提供了记录目标的属性及完整方法
当你建立了一个记录集时,其位置在第一个记录上.Move Next,Move  First及 Move Previous 法使你可在多个记录中浏览.EOF 特征返回你是否到达了记录集的结尾.
这里有一段简单的程序,它演示了一个记录集在一名叫人口普查的地图层上的基本用法. 这个例子将对此记录集中所有记录打印一称为家庭的信息组的值到 Visual Basic 下的 Debug 窗口.程序
注意 Visual Basic 也有一个运行情况相似称为记录集的目标.为了区别这此目标,用像这样的一个声明来充分限定你对 Map objects 记录集目标的声明将是十分重要的:
某些记录集可以被更改,其余则不然.察看可更改特性来确定你是否可以更改一个记录集中的记录.如果你希望更改一个与形状文件有关联的记录集,而可更改是舍己救人假的. 可以通过在你的文件系统中修改形状文件三位字节的只读状态如果你有特权这样做.如果可更改是假的并且记录集与-- SDE 层有关联与你的 SDE 管理员商议以取得所需特权来更改 SDE 层.
如果一个记录集包含从一个关联表得到的信息组(通过在一 Map Layer 上运用 Add Relate 法)并且记录集可更改,你只可以更改从基本记录集中得来的信息组.你不能更改从关联表联接来的信息组.
        
统计目标
统计目标是通过一个记录集上的 Calcu late Statistics (计算统计) 法而被创建的. 其目的是给你提供一个关于一个记录集中一个数字信息组的基本的统计一览.
这里有一简单的程序片段,它从一个叫作人口普查的地图层中创建一个统计标并计算一个称为家庭的信息组的统计值.
注意被表示的统计数字在你创建统计目标的是有效的. 如果你更改记录集中的值,你必须计算一个新的统计目标察询新的统计结果.

信息组集合和信息组目标
信息组集合和信息组目标表示了一个记录集中多列数据表格
正如同记录集一样, Misual Basic 同样也有一个信息组目标. 要确定像
     如下来充分限定你对一个 Map Objects 信息组目标的声明:声明语句
这里有一简单的程序片段,它将显示有关-- 称为人口普查的地图层的所有信
息组的名字及它们的类型代码.程序段
又如, 它设定一个信息组的值并将称为人口普查的地图层中由多边形表示的人口提升5个百分点.
在每个记录集中有一个称为"形状"的特殊的信息组.此信息组代表了地学数据集中地形的几何形状.如果此记录集是可更改的, 你可以对此信息组运用编辑方法并可立即在-- 形状文件内用另一形状来代替此形状. 这就是如何利用 Map Objects 进行简单的形状文件编辑.信息组称为"形状" 的类型特性可是 mo Point,mo Line mo Poly Gon 类型常量的任一.

Table Desc 目标
你可以用信息组集合来察询信息组并且你可在记录集中修改信息组值, 是要修改一个信息给的特性,你就需要使用 Pable Desc 目标了.
Table Desc 目标向你提供关于与-- 记录集有关联的项目表中信息组的信息.它典型用于创建新--新记录集和形状文件.修改已存在的记录集的信息组定义,以及查询信息组特征.
举一个应用一个 Data Connection (数据联接)的 Add Geo Data Set (增加地学数据集,法同 Table Desc 目标的例子,请在 Map Objects 中察看为 Add Geo Data set (增加地学数据集)法编写的在线帮助范例程序.

表目标以及创建关键
一个表目标代表了从-- ODBC 数据源中得到的单个项目表
     表目标是一个只读数据访问目标,它代表从-- ODBC  数据源得到个单个项目表.你可以将一个项目表作为一个关联加到 Map Layer 的目标上.

选择元素
在 Map Objects 中,你可以通过应用-- 地图层目标上的三种方法来选择元素.结果将以一个记录集的形式返回.
Search By Distance 和 Search Expression 很快就可解释完,但 Search Shape 法提供了如此丰富的一套搜索方法我们不久将要涵盖. 每种搜索方法的注解前均有其用法的句式.
形状自变量可以传递用鼠标在 Map 控制器上画的一个或许多个形状, 从Map Layer 返回的形状.或被创建的有着程序计算坐标的几何目标.要注意的是从--Map Layer 得来的形状可以是在同一层或另外--Map Layer  中得来的.

通过距离来搜索元素
对在一个或多个形状的限定范围内元素进行定位.使用--Map Layer  目标上的 Search By Distance 法.距离值使用 Map Layer 的地图单位;英尺,米,或其它.Search By Distance 法接受一个或一集的点,线,矩形或多边形目标.并且选定所有全部或部分在限定距离内的元素.
你可以任意地用一 ANSI SQL 语句的哪里条款来进一步地限定选择果你不选择的话,那所有符合空间搜索的元素将在记录集中被选中.

通过询问方式搜索元素.
Search Expression 法接受一 ANSI SQL  语句的哪里项并且返回一包括所有满足表达式的元素的记录集.

通过形状来搜索元素.
Search Shape 法有三个自变量:
     1. Shape 是一目标,它可以是一个点,一条线, 一个矩形或多边形目标或是这些目标的集合.这个目标可以从像 Mouse Down,Trackline,Track Polvgon 或 Track Rectangle 等地图控制事件之一中定义,或通过勾画建设一几何目标,或通过重复通过一记录集并从"形状" 信息组返回一个或一集合形状.
     2. Search Method 是一整型量.为了你的方便,你可以输入搜索类型常数之一.如果你愿意,你可以输入搜索类型常量的整数值.
     3. expression 是一字符串,它是一 ANSI SQL 语句的哪里条款.此表达式是任意的,但当你调用此方法时, 你必须放置两个引号来表示一空白表达式.
观察 mo View 应用程序中的 Spatial.frm 的程序,以看到在从地图控制器事件中的形状或从一地图层中得到的形状上应用 Search Shape 法的范例那程序的一部分将在本章末尾列出.现在我将研究 Search Shape 法的所有搜索类型.

形状和元素边界重叠
此搜索类型返回所有其矩形范围整个地或部分地重叠搜索元素范围的元素.此搜索方法的一个实际用法是在当前地图范围内选定所有元素.从一几何的通过 Map  控制器上的一鼠标事件构造的目标及从一个或一集从一 Map Layer  中得到的形状中为此种搜索类型构造搜索元素将是非常有用的.

形状与元素有共同点
此搜索类型返回与搜索元素至少有一个同一的共同点的元素.用此种方法同 Mouse Down 事件来选择几乎是不可能的.然而,当此种搜索方法应用在从一 Map Layer 中得来的点来给所有将那点的精确位置共享为一个多边形或线的顶点的其它元素定位时, 此搜索方法将是十分有效的.

形状和元素交叉边界
此搜索类型返回与搜索元素相交叉的元素.
从一通过地图控制器上的一鼠标事件构造的几何目标和一个或一集从 一 Map Layer  中得到的形状中为此种搜索类型构造搜索元素将是非常有用的.

形状和元素共享一公有线.
被此搜索类型返回的元素必须与搜索元素共享至少一条同一的公共线.
此搜索类型对从一个 Map Layer 中来的搜索形状是十分实用的,但对由地图控制器上的鼠标事件构造的搜索形状并不实用.

形状和元素共享公共点或交叉边界
此搜索类型返回与搜索元素(或多个搜索元素)共享一个共点, 或与之相交叉的元素.
从一个由地图控制器上一鼠标事件所构造的几何目标,和从一 Map Layer 来的一个或一集形状中为此搜索类型构造搜索元素将是十分有用的.

形状和元素相交叉
此搜索类型返回与搜索元素接触的,全部或部分地在搜索元素之内的,或全部或部分地包括搜索元素的元素.
从一个由地图控制器上由一鼠标事件所构造的几何目标和从一 Map Layer 中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的

形状和元素在内部交叉
如果搜索元素是一多边形元素,此搜索类型返回全部或部分包含在其中的元素,但不是与之邻近的.另外,返回元素本身也应是多边形元素, 并且此法返回部分或全部地包括搜索元素的多个元素.
从一个由地图控制器上由一鼠标事件所构造的几何目标和从一 MapLayer 中得来的一个或多个形状中为此搜索类型构造搜索元素是十分有用的

形状和元素相交叉但没有相切边界
此搜索类型与 mo Ares Intersect 相同, 但搜索元素和元素的边界不可以交叉或接触.
从一个由地图控制器上由一鼠标事件所构造的几何目标和从一 Map Layer  中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的

形状包含元素
此搜索类型返回完全包含搜索元素的元素.
如果此元素是一多边形元素,那么,搜索元素必须全部在其中,包括此元素的边界.如果此元素为一线元素,搜索元素必须沿着此元素的路线,如果此元素为一点元素.搜索元素必须在其一点顶点上.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的.      
        
元素包含形状
此搜索类型返回完全包含在搜索元素中的多个元素.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的.    

形状完全地包含元素
此搜索类型返回完全地包含在搜索元素的多个元素.不包括搜索元素的边界.此元素必须是一个多边形元素,搜索元素必须完全地在其中,并且它们的边界不可以交叉或相切.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的.    
        
元素完全地包含形状
此搜索类型返回完全被搜索元素所包含的多个元素,并不包括搜索元素的边界.
搜索元素必须是一多边形元素,此元素必须完全在其中, 并且它们的边界不可以交叉或相切.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或多个形状中为此搜索类型构造搜索元素是十分有用的.

元素包含形状的第一点.
此搜索类型返回包含搜索元素的第一个坐标位置的多个多边形元素.如果搜索元素是一条线,线的始点即被使用的位置.
如果搜索元素是一个多边形,那么始点与终点是相同的,并且被使用.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或一集形状中为此搜索方法构造搜索元素是十分有用的.    

形状包含元素的重心
此搜索类型返回其重心被形状所包含的多边形元素.重心是一多边形受重力的中心的位置.
从一个由地图控制器上由一鼠标事件所构造的几何目标以及从一地图层中得来的一个或一集形状中为此搜索类型构造搜索元素是十分有用的.    

元素与形状是完全相同的
此搜索类型返回与搜索元素完全相同的元素."完全相同"的意思是指形状的每个顶点的坐标位置是完全相同的.
当判断元素是否完全相同时,此方法要考虑元素类型以及坐标描述. 也就
是,一条与一多边形有着相同的点的集合的多边线与多边形并不认为其是等同的.此搜索类型典型用于寻找完全一样的数据.
仅从从一地图层中得到来的一个或一集形状中为此搜索类型构造搜索外形是十分有用的.

在 mo View 应用程序中应用记录集
我们现在将在 mo View 的范例应用程序中应用记录集以及它的支持目标. 你将看到一范例界面,从中你可以借鉴一些想法,同时还有在 Map Layer 目标上应用了我们已经讨论过的记录集目标和方法的范例程序.
在 mo View 中有三种形式应用记录集从一地图层中检索信息; Identify.frm,Find.Frm 和 Spatial.Frm.

mo View 应用程序中的辨别工具.
当辨别工具被激活时,你可以用光标拾起任何元素并检查它的信息组的值当你使用这个工具时,一个带有从选定元素中得来的属性值的表格将出现.如果你的搜索提供了不只一个极为接近的元素,那你将在一复合框中被提供对外形进行选择的机会.当你用毕辨别形式.你可以消除它.
注意在 mo View 中的主要工具条中一个按钮组中有五种工具: Zoom in   Zoom out, Pan,Identify 和 Graphics.仅有这些键中一个可以被按下. 当你按下 Identify 时,当你在地图内敲击鼠标时元素就被选中了. 当辨别工具被激活时,地图控制器中的 Mouse Down 事件就启动辨别方式.
以下为辨别工具的程序遵循这此步骤来返回在一点选定的元素的有关信息:
1. 从 Mouse Down 事件接收 X 和 Y 位置作为过程变量.
2. 更新表格上的字幕,包括当前位置.
3. 为寻找元素设置一个 100 个地图单位的搜索公差.这是十分必要的, 因
          为如果没有一个搜索公差,寻找点和线元素将会是非常困难的.
4. 重复通过每个层来此点的搜索公差内寻找元素. Search By Distance  
          法被应用在一地图层上并且结果以一记录集形式返回.
5. 用从一记录集中选定元素中得到的信息组名和信息组值来填充一复合  
          框.
下叙程序是从 mo View 样本应用程序中的 Identify.frm 中得来的.这些是那程序中一些关键控制和目标:
frm Identify 是 Identify.frm 的名字.控制地图器叫做 map Disp 并且在一称作 frm Main 的表格中.
CDO IDList 是有着所有所被找到的元素的表列的复合框.
Ist Feat List 为每一表列的一个信息组以及它们的值的表列.当你从
cbo IDList 复合框中选择另一个元素时此表列框框将更新.

mo View 应用程序中的寻找命令
mo View 中主工具条中的寻找命令允许你输入一个值. 然后它在你限定层中的所有信息进行搜索来进行字符串匹配.
当你敲击寻找钮来寻找含有一字符串为一信息组值的元素地时候.下叙寻找元素方式中程序遵循这些步骤:
1. 根据输入的字符串建立一搜索表达式.
2. 重复通过层集合中每一个层并且仅在选定层中搜索字符串.
3. 重复访问一层中每个信息组并且建立并应用搜索表达式.
4. 从被找到的元素中,用层名,信息组名和信息组值来填充表格控制器.
下面的程序是从 mo View 样本应用程序的 Find.frm 中得到的.这些是那程序中的一些关键控制和目标:
frmFind 是寻找表格的名字.
地图控制器被称为 map Disp 并且在一叫做 frm Main 的表格中.grd Feat List 是含有搜索结果的表格控制器.
mo View 中的空间搜索命令
当你敲击主工具条中的空间搜索命令时, 空间选择表允许你为选择元素限定一个层,搜索元素的类型,以及空间搜索方法之一.
当你应用一空间搜索时,下面的空间搜索方式中的程序遵循这此步骤:
1. 检查形状集合,如果是空的就退出.
2. 对限定的层运行搜索方法.
3. 用 After Tracking Layer Refresh 法中的 Draw Shape  法画出选定元素.
下面的程序出版自 mo View (人工操作视图)中 Spatial.frm ( 空间检索形式)的运用举例.这些是该程序中的一些关键控制器及目标:
frm Spatial 是空间检索形式的名称.
Map 控制器叫 map Disp ,置于一个名为 frm Main 的表格中.
g-search Shape 是检索形状的集合. g-selected Featwes 是选择特征属性的集合.

<img src="images/post/smile/dvbbs/em10.gif" />
喜欢0 评分0
GIS麦田守望者,期待与您交流。
janecat
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数50
  • QQ
  • 铜币371枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2003-08-18 21:54
例子在哪里
举报 回复(0) 喜欢(0)     评分
wavvylia
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数384
  • QQ
  • 铜币555枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-08-22 12:26
辛苦辛苦!
举报 回复(0) 喜欢(0)     评分
总有黎明
路人甲
路人甲
  • 注册日期2003-09-25
  • 发帖数59
  • QQ
  • 铜币276枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2003-09-27 16:14
谢谢!太棒了
举报 回复(0) 喜欢(0)     评分
mtf
mtf
路人甲
路人甲
  • 注册日期2004-04-21
  • 发帖数22
  • QQ
  • 铜币162枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-05-24 19:20
好的
举报 回复(0) 喜欢(0)     评分
bianguowei
路人甲
路人甲
  • 注册日期2004-02-06
  • 发帖数51
  • QQ
  • 铜币280枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-05-26 10:40
<P>辛苦了!</P><P>希望大家也都能踊跃发言,解答问题,我们共同进步!</P>
举报 回复(0) 喜欢(0)     评分
aying
路人甲
路人甲
  • 注册日期2003-10-05
  • 发帖数60
  • QQ
  • 铜币275枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-06-01 09:58
不错
举报 回复(0) 喜欢(0)     评分
zhjhp
路人甲
路人甲
  • 注册日期2004-02-22
  • 发帖数62
  • QQ
  • 铜币296枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-06-23 10:40
<img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
zhjhp
路人甲
路人甲
  • 注册日期2004-02-22
  • 发帖数62
  • QQ
  • 铜币296枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2004-06-27 09:53
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
heyou
路人甲
路人甲
  • 注册日期2004-04-07
  • 发帖数59
  • QQ
  • 铜币324枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2004-07-23 18:50
<P>很好,喝好的</P>
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部