第七章数据绑定

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

49第七章数据绑定概述数据集使您可以在地图绑定用户数据。例如,如果现在有关于县市销售的MicrosoftAccess数据库以及反映推销人员位置的LotusNotes数据库,那么就可以把这些数据绑定到地图上,并且可以在两套数据集之间标注趋势或显示数据的相关性。第一节数据绑定的概念所谓数据绑定,就是将数据从数据源放入MapX的处理过程。现今的商业中有许多不同类型的数据库,因此,MapX使您得以对几种不同类型的数据源进行绑定。将自己的数据绑定到地图上有两个主要优点:能在地图上以图元浏览数据。可首先向地图绑定属性数据,然后基于这些数据创建专题渲染地图。第二节怎样向地图添加数据有两种方法进行数据绑定:如果有VisualBasic的绑定数据控件,就可以在设计时使用Map对象的DataSet属性。通过使用DataSets.Add方法编程来绑定数据。此数据绑定过程会创建DataSet对象。这个添加到DataSets集合中的DataSet对象,包含了数据绑定到地图图层中的图元的计算值。例如,如果数据已绑定到美国的州地图上,那么每个州将会有新的数据值用来控制各州的绘制。如果在数据源中某个州有多条记录,则这些值会被求和,求平均值或计数。DataSet的Value属性可用来访问地图中每行(即图元)的计算过的数值。对于大多数数据绑定类型,DataSource(DataSets.Add的第二个参数)其实是一种OLE接口。MapX通过这个接口直接从数据源中访问数据。数据并没有真正传递给DataSets.Add。第三节DataSet对象和DataSets集合DataSet对象是在从数据源向MapX绑定数据的过程中生成的。DataSet包含了数据绑定的地图图层中图元的计算过的值。数据源可能是DAO记录集,ODBC数据源等形式。DataSets集合是代表地图中所有DataSets的对象。DataSets集合的方法和属性用来添加,删除Dataset对象,或者在集合中使用现有的DataSet对象。下表中列出了从指定的集合中添加或删除DataSet对象的方法:50方法描述代码示例添加创建特定数据集并将它添加到该集合中。Setds=Map1.Datasets.Add_(miDataSetDAO,rs)删除从Datasets集合中删除指定的DataSet对象。Map1.Datasets.Remove2DataSets.Add方法使用DataSets.Add方法,可向MapX绑定来自数据源的数据。使外部数据源和地图建立联系。语法如下:DataSets.AddType,SourceData,[Name],[Geofield],[SecondaryGeofield],[BindLayer],[Fields],[Dynamic]Type参数此参数用来说明所添加数据集的类型。它获取DataSetTypeConstants的值。下面列出的是DataSet类型常量:Type参数描述miDataSetADOADOmiDataSetDAODataAccessObjectmiDataSetDelphiDelphiNativemiDataSetDelphi4Delphi4miDataSetGlobalHandle以Tab键分隔的数据miDataSetLayerMapInfo表miDataSetNotesQueryLotusNotesQuerymiDataSetNotesViewLotusNotesViewmiDataSetODBCODBC数据库miDataSetOEOOracleexpressObjectsmiDataSetOLEDataOLEdatasourcemiDataSetRDORDOmiDataSetSafeArraySafeArraymiDataSetUnboundMapX从容器中请求数据SourceData参数该参数用来引用数据,随Dataset类型的不同而不同。下面是每一种数据集类型的有效数据源:Dataset类型有效源数据miDataSetADOADO表miDataSetDAODAORecordset对象.miDataSetDelphiDelphiNativemiDataSetDelphi4Delphi4记录集51miDataSetGlobalHandleVT_I4类型的变量且lVal相当于全局内存句柄.miDataSetLayerMapInfo表miDataSetNotesQueryLotusNotesQuerymiDataSetNotesViewLotusNotesViewmiDataSetODBCODBCQueryInfo对象miDataSetOEOOracleexpress对象miDataSetOLEData被Datasets.Add忽略miDataSetRDORDO表格miDataSetSafeArraySafeArraymiDataSetUnbound无类型(对应地,使用RequestData事件访问只有程序员知道的数据格式)。Name参数该参数为唯一标识数据集的字符串。属于可选参数,如果不指定,则缺省名为DataSetN,其中“N”为Datasets集合中的数字。Geofield参数该参数是数据源中包含地理信息的列名称或索引。如果该参数未指定,则MapX搜索所有字段,以决定数据源中哪一列包含了GeoDictionary中指定的地理信息。此字段不必是地理数据字段,因为它可能是诸如邮政编码之类的唯一关键列。但是,如果已经知道数据源中的哪一列包含了地理信息,则应当指定它。如果打算在地图上查看图元数据,那么数据源中的GeoField列必须是唯一的。GeoField列用来为新点层的图元命名。若值不唯一,则将导致在新点层中添加的只是单个点,该点是在多个重复关键值中首次遇到的,并且将会聚合重复行中的数据值。如果指定了Fields集合,Geofield参数引用Fields集合的列,而不是数据源的列。请参阅下面的Fields参数。SecondaryGeofield参数此参数只有当绑定数据集的图层存在不唯一关键列时才需要。例如,使用MapInfo表“UnitedStatesCounties”绑定数据就需要依靠Secondarygeofield参数,因为一个州中的县名是不唯一的。可能存在在表中的多个州都有县名为“Warren”或“Washington”的情况。这样,在数据绑定过程中,就需要更多的信息以解决可能存在的模棱两可的情况。什么时候绑定数据到NewYork的Warren,又是什么时候绑定到NewJersey的Warren呢?通过指定“County”列作为Geofield以及“State”列作为SecondaryGeofield,MapX经过对各州中的县名的精确数据绑定处理,就能够辨别出绑定到NewYork的Warren数据和绑定到NewJersey的Warren数据(这和创建Find对象的RefiningBoundary概念相同。请参阅在地图中查找图元)。如果指定了Fields集合,SecondaryGeofield参数会引用Fields集合中的列,而不是源数据中的列。BindLayer参数如果正在绑定属性数据,则此参数指定和数据连接的地图图层,或者,若引入的数据被地52理引用到到点引用文件中(如:邮政编码)或包含经/纬度值,则指定一个BindLayerObject。这是可选参数,如果没有指定,则MapX会搜索GeoDictionary中的图层去连接。如果已知要绑定的地图图层,基于性能的原因,应当指定它。匹配BindLayer时,Geofields必须唯一。否则只匹配不唯一设置的数据中的第一项。其余的则被忽略。Fields参数该参数是Field对象集合中的Fields对象。Field对象用来描述导入数据源的字段,以及当匹配特定地图图元的数据源记录多于一个时,使用的聚合函数。这将建立要绑定到地图的字段(列)集合。它是可选参数,如果没有指定,则导入所有列,并且如果每个图元有多个记录,对数据值求和。本章后面更详细地讨论了Fields集合。如果指定了Fields集合,则Geofield和SecondaryGeofield参数会被指定为Fields集合中的列,而不是源数据中的列。Dynamic参数该参数的值为布尔型,控制数据绑定是否是动态的。它是可选的,未指定时默认为False,即静态绑定数据。(即,当数据库打开时MapX复制所需数据)。如果此参数指定为True,MapX只在需要数据时实时访问数据(例如,在标注时)。如果此参数指定为True但数据集不支持动态列,则会导致异常。DataSets.Add的简单实例下面的代码从MSAccess数据库“MapStats”中打开US_Cust表,该数据库在MapInfoMapX4.0目录下的DATA文件夹中。DimdsAsDatasetDimdbAsDatabaseDimrsAsRecordset'OpentheMapStats.MDBDatabasseSetdb=DBEngine.Workspaces(0).OpenDatabase(_C:\ProgramFiles\MapInfoMapX4.0\Data\Mapstats.mdb)'rsisthesourceDatarecordsetwhichisanMSAccesstableSetrs=db.OpenRecordset(US_Cust)'AddthedatasettothemapSetds=Map1.Datasets.Add(miDataSetDAO,rs)第四节使用Fields集合数据源有多个数据列。MapX管理绑定的每一列数据,因此应当只绑定地图上所需的数据(例如,想要进行专题化地图或标注用的数据)。用DataSets.Add(Fields)的最后一个参数来建立要绑定到地图的字段(列)的Fields集合。说明:声明字段变量时使用“MapXLib.Fields”。这样可防止与DAOFields对象发生冲突。DimfldsAsNewMapXLib.Fields可以通过Dataset.Fields的属性访问数据集的Fields集合。53方法描述代码示例Add向Fields集合中添加一个字段flds.Add“Sales”,“Sum_of_Sales”_,miAggregationSumRemove从Fields集合中删除一个字段flds.Remove3RemoveAll从该集合中删除所有Field对象flds.RemoveAllFields.Add方法Fields.Add方法使您得以将数据源中的一列数据作为字段添加到Fields集合中。Fields集合使用DataSets.Add方法建立。Datasets.Add的Fields参数获取Fields集合,并使用Add方法建立它。一旦数据集已经创建,就不能再将Add方法用在数据集的Fields集合上。Fields.Add的语法规则如下所示:Fields.AddDataSourceCol,Name,[AggregateFunction],[Type]部件描述DataSourceCol数据源的列名或列索引。Name欲添加的字段名。AggregateFunction所使用的聚合函数。此参数获取AggregationFunctionConstants值。Type列中的数据类型。此参数获取FieldTypeConstants值。此参数仅用于非绑定DataSets。其它DataSet类型则忽略它。数据聚合Fields.Add方法的AggregateFunction参数决定当多匹配情况出现时MapX怎样计算Field的值。下面是用于处理多匹配情况的聚合:AggregationFunction常量常量描述MiAggregationSum数据求和。MiAggregationAverage求数据平均值。MiAggregationIndividual拖进每一个单独记录里。MiAggregationCount对记录计数。下面的示例显示了怎样从DAO记

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功