xiaonai
路人甲
路人甲
  • 注册日期2003-11-27
  • 发帖数87
  • QQ
  • 铜币418枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:3206回复:10

紧急求助:怎么做直方图

楼主#
更多 发布于:2003-12-18 17:07
我想把同一张表的同一字段的不同记录进行比较,做成专题图中的直方图,不知应该怎么做,请各位大虾指点一下,谢谢。
喜欢0 评分0
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
1楼#
发布于:2003-12-18 17:14
看看下面这个例子,你可以参考:
procedure TMapForm.SafeArrayButtonClick(Sender: TObject);
var
 theData: Variant; // Safe Array of data
 flds: CMapXFields;
 ds: Dataset;
begin
 { Create a new SafeArray and fill it with sample data. }
 theData := VarArrayCreate([1,3, 1, 2], varVariant);
 theData[1,1] := 'ME';
 theData[2,1] := 'NH';
 theData[3,1] := 'VT';
 theData[1,2] := 100;
 theData[2,2] := 200;
 theData[3,2] := 300;

 try
  { Create a new fields object }
  flds := CoFields.Create;
  { Describe the structure of the SafeArray, so that our
    columns will have names after the Datasets.Add }

  flds.Add(1, 'State', miAggregationIndividual, miTypeString);
  flds.Add(2, 'Sales', miAggregationSum, miTypeNumeric);

  { Create a SafeArray dataset. }
  ds := Map1.Datasets.Add(miDataSetSafeArray, theData, 'My Dataset', 1, EmptyParam, EmptyParam, flds, EmptyParam);

  { Create a theme based on the "Sales" column in the new
    dataset }
  ds.Themes.Add(miThemeIndividualValue, 'Sales', 'My Theme', EmptyParam);
 except
  on E: EOleException do
   Application.MessageBox(PChar(E.Message), 'Error',
    MB_OK or MB_ICONERROR);

 end;
end;
举报 回复(0) 喜欢(0)     评分
xiaonai
路人甲
路人甲
  • 注册日期2003-11-27
  • 发帖数87
  • QQ
  • 铜币418枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-12-18 21:51
我做的时候报错。说找不到绑定层。请再指教一下,谢谢。
我把我的意思再说一下:
table
name  age   mapid
张三   25       1
李四    50       2
我是通过MAPID(也就是地图上的featureID,我存放在表里的)来绑定图层的,现在我要把张三,李四的 age进行比较,做成直方图。
举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
3楼#
发布于:2003-12-19 13:02
1、你图层内有MAPID这个字段吗?
2、MAPID在图层还必须是索引字段!
你在看看的程序!
举报 回复(0) 喜欢(0)     评分
xiaonai
路人甲
路人甲
  • 注册日期2003-11-27
  • 发帖数87
  • QQ
  • 铜币418枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2003-12-19 14:13
mapid 是索引字段,而且在图层里也有
我如果用安全数组的话就必须拿一列来绑定到层,而第二列只能是AGE,不能加入姓名。因为我是一个点关联多条记录,就必须拿姓名来区分开。我如果在FILEDS里加两个字段它又会报聚集函数只能用一列绑定。
但是我查阅了一些资料如果是做直方图是可以做一个点关联多条记录的。但我就是不知该怎么写代码。
举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
5楼#
发布于:2003-12-19 15:03
你可以把你写的代码贴出来,我看看吗?
举报 回复(0) 喜欢(0)     评分
xiaonai
路人甲
路人甲
  • 注册日期2003-11-27
  • 发帖数87
  • QQ
  • 铜币418枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2003-12-19 23:25
s_sql2:='select mapid,zbzhi from tablename where (zbname='A' or zbname='B') and name='AB'';
//这个SQL我不太清楚该怎么写,因为我是要取同一个点(name)的两个zbname的zbzhi进行比较。
with ADOQuery1 do
  begin
    Close;
    sql.Clear;
    sql.add(s_sql2);
    Open;
    rs:=ADOQuery1.Recordset;
  end;
  if rs.RecordCount<>0 then
    begin
      rs.MoveLast;
      flds.add('mapid','id',miAggregationAuto,0); //id对应TAB的ID
      flds.Add('zbzhi','zbzhi',miAggregationAuto,3);
      dst:=Map1.Datasets.Add(miDatasetADO,rs,emptyparam,'id',emptyparam,emptyparam,flds,false);

      fileds.add('zbzhi','zbzhi',miAggregationAuto, 3);
      //如果这么写的话出来的直方图就只有一列,而且是 (zbname='A')+(zbname='B')的和
      //我是要zbname='A',zbname='B'两列进行比较的直方图而不需要它求和,我想绑定两个数据集好象也不对

      dst.Themes.add(MiThemeBarChart,fileds,'zbzhi',emptyparam);
    end;


举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
7楼#
发布于:2003-12-20 15:44
你写的SQL语句,我太明白你意思?
你做专题图,想达到一个什么样效果,也让人很模糊!
举报 回复(0) 喜欢(0)     评分
xiaonai
路人甲
路人甲
  • 注册日期2003-11-27
  • 发帖数87
  • QQ
  • 铜币418枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2003-12-20 17:39
这样说吧,我现在也不知道SQL应怎么写,可不可以这样,你给我一个做直方图的例子,我自己看一下。我现在不知道直方图该怎么做,等级图和独立值专题图都已经做出来了,就是直方图不知怎么下手。谢谢。
举报 回复(0) 喜欢(0)     评分
echo2003
点子王
点子王
  • 注册日期2003-07-28
  • 发帖数2453
  • QQ76947571
  • 铜币5473枚
  • 威望1点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
9楼#
发布于:2003-12-21 10:42
在论坛内就有啊!
VB+MAPX实现各种专题图的源程序
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部