欢迎您来到GIS动力

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

功能简介:

    示范利用VB的统计图控件读取SuperMap Objects 数据集里的属性值制作统计图的功能

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

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

控  件 及 对 象 属  性 方  法
SuperWorkspace   OpenDatasource
SuperMap    
soRecordset   GetFieldValue

功能实现:

制作统计图时一些公用的变量

Dim dt As soDatasetVector    '定义矢量数据集变量,即统计图数据来源
Dim Rcd As soRecordset       
   '定义数据集记录变量,用来获取属性值
Dim FldName() As String     
'定义统计图数据来源字段名变量
Dim ChrtDt() As Variant     
'定义统计图数据源数组
Dim LblField As String       
'定义统计图标注字段名变量
Dim Lblfld As String            
'定义"全部记录单一属性值统计图"统计字段名变量

  • "单一记录多种属性值统计图"

    选择标注字段和统计字段:统计字段必须是数值型的,不得少于一个,标注字段没有限制。获取统计字段的名称,保存到数组FldName()中

  ReDim FldName(1 To LstTjField.ListCount)
  Dim i As Integer
  For i = 1 To LstTjField.ListCount
      LstTjField.ListIndex = i - 1
      FldName(i) = LstTjField.List(LstTjField.ListIndex)
  Next i
  ReDim ChrtDt(1 To LstTjField.ListCount)
  LblField = CmbLable.Text

  •   制作柱状图设置SuperMap.Action=scaSelection,随意在地图上选择对象,会自动出现该记录相应统计字段的统计图,如下所示的是柱状图:

Private Sub SuperMap1_GeometrySelected(ByVal nSelectedGeometryCount As Long)
   Set Rcd = SuperMap1.Selection.ToRecordset(False)
    Dim i As Integer
    Dim column As Integer
    Dim row As Integer

   Rcd.MoveFirst
   ChrtDt(1) = Rcd.GetFieldValue(LblField)
   For i = 1 To UBound(ChrtDt)
       ChrtDt(i) = Rcd.GetFieldValue(FldName(i))
   Next                                                                

   MSChart1.chartType = VtChChartType2dBar
   MSChart1.ColumnCount = 1
   MSChart1.RowCount = UBound(ChrtDt)
   For column = 1 To 1 
       For row = 1 To UBound(ChrtDt)
           MSChart1.column = column
           MSChart1.row = row
           MSChart1.Data = ChrtDt(row)
           MSChart1.RowLabel = Rcd.GetFieldValue(LblField)
           MSChart1.ColumnLabel = FldName(row)
       Next row
  Next column
  MSChart1.Refresh
End Sub

  •  制作饼状图。饼状图的数据装载方式与柱状图相同,仅仅只是显示方式的不同。因此,在已经制作好的柱状图的基础上,只要改变统计图控件的显示类型就能生成饼状图了。

MSChart1.chartType = VtChChartType2dPie

MSChart1.Refresh

  •  制作折线图。制作折线图时数据的接受方式刚好与柱状图、饼状图相反,因此数据要重新装载。

MSChart1.chartType = VtChChartType2dLine
MSChart1.ColumnCount = 1
MSChart1.RowCount = UBound(ChrtDt)
For column = 1 To 1
   For row = 1 To UBound(ChrtDt)
       MSChart1.column = column
       MSChart1.row = row
       MSChart1.Data = ChrtDt(row)
       MSChart1.RowLabel = FldName(row)
       MSChart1.ColumnLabel = Rcd.GetFieldValue(LblField)
   Next row
Next column

MSChart1.Refresh

  • 全部记录单一属性值统计图

 

制作的是某一个矢量数据集中的某一个属性字段的全部记录的统计图。如果记录的个数太多则因统计图的显示比例较小,不能清楚的反映统计效果,建议只对那些记录个数少的数据集作这个统计。

Lblfld = Cmbtjfield.List(Cmbtjfield.ListIndex)
LblField = Cmblablefield.List(Cmblablefield.ListIndex)
Dim i As Integer
Dim column As Integer
Dim row As Integer
Set Rcd = SuperMap1.Layers(1).Dataset.Query("", False)
ReDim ChrtDt(1 To Rcd.RecordCount)
ReDim FldName(1 To Rcd.RecordCount)
Rcd.MoveFirst
For i = 1 To Rcd.RecordCount
   ChrtDt(i) = Rcd.GetFieldValue(Lblfld)
   FldName(i) = Rcd.GetFieldValue(LblField)
   Rcd.MoveNext
Next

MSChart1.ColumnCount = 1
MSChart1.RowCount = UBound(ChrtDt)
For column = 1 To 1
   For row = 1 To UBound(ChrtDt)
       MSChart1.column = column
       MSChart1.row = row
       MSChart1.Data = ChrtDt(row)
       MSChart1.RowLabel = FldName(row)
       MSChart1.ColumnLabel = Rcd.GetFieldValue(LblField)
   Next row
Next column
MSChart1.Refresh

  • 多个记录多个属性值统计图

    参数设置同 "单一记录多种属性值统计图"相同,在SuperMap1上随意选取至少两条记录后,单击"显示多个记录"多个属性值统计图"按钮,则相应的统计图制作成功,制作方法只是增加了统计图的维数;

ReDim FldName(1 To Lst3tjfield.ListCount)
For i = 1 To Lst3tjfield.ListCount
    FldName(i) = Lst3tjfield.List(i - 1)
Next
LblField = Cmb3lbl.Text

  •  制作折线图

Set Rcd = SuperMap1.Selection.ToRecordset(False)
ReDim ChrtDt(1 To Rcd.RecordCount + 1, 1 To UBound(FldName) + 1)
Dim i As Integer
Dim j As Integer
Dim column As Integer
Dim row As Integer
For i = 2 To UBound(ChrtDt, 2)
    ChrtDt(1, i) = FldName(i - 1)
Next
Rcd.MoveFirst
For i = 2 To UBound(ChrtDt, 1)
    ChrtDt(i, 1) = Rcd.GetFieldValue(LblField)
    Rcd.MoveNext
Next
Rcd.MoveFirst
For i = 2 To UBound(ChrtDt, 1)
   For j = 2 To UBound(ChrtDt, 2)
       ChrtDt(i, j) = Rcd.GetFieldValue(FldName(j - 1))
   Next
   Rcd.MoveNext
Next
MSChart1.ChartData = ChrtDt
MSChart1.Refresh

  •  制作柱状图

MSChart1.ColumnCount = UBound(ChrtDt) - 1
MSChart1.RowCount = 1
For column = 1 To UBound(ChrtDt) - 1
    For row = 1 To 1
        MSChart1.column = column
        MSChart1.row = row
        MSChart1.Data = ChrtDt(column)
        MSChart1.RowLabel = Rcd.GetFieldValue(LblField)
        MSChart1.ColumnLabel = FldName(column)
   Next row
Next column
MSChart1.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号