CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

比较难的问题,从数据库中读出数据作图

楼主ceble(蓝色天空)2004-08-03 03:06:54 在 C++ Builder / 基础类 提问

从数据库中读出数据(有几十万条),每一行的格式是(X,Y,Z),X是经度,Y是纬度,Z是水深值(就是大海有多深)。现在要求这样作图(在一个平面里):  
  X,Y分别为纵、横坐标,Z用颜色(例如蓝色)的深浅表示(地图的效果),而且颜色要连续,不能有空白的地方,即使没有足够的数据来填补空白。  
   
  请大家帮我想想办法,能提供一个算法的思路也行  
  问题点数:50、回复次数:11Top

1 楼xpdavis(咕嘟-不想孤独)回复于 2004-08-03 08:42:01 得分 0

是画成地球仪(可以转动的),还是世界地图的方式?去找一些开放源代码?Top

2 楼thp(老滕)回复于 2004-08-03 08:52:28 得分 0

支持一下。Top

3 楼songhtao(三十年孤独)回复于 2004-08-03 09:05:40 得分 10

建议用mapinfoTop

4 楼jeep008()回复于 2004-08-03 09:31:56 得分 0

学习一下Top

5 楼ceble(蓝色天空)回复于 2004-08-03 09:52:43 得分 0

to:xpdavis(咕嘟)   :  
  画成地图的方式就可以了,不需要会动的  
   
  to:songhtao(三十年孤独):    
   
  mapinfo是什么东西?小弟孤陋寡闻哦  
  Top

6 楼yjy1001(蓝鲸--优秀得郁闷的鱼)回复于 2004-08-03 21:03:56 得分 20

这里假设你的数据库中的Z是已经排序过的(未排序,自己先排,这里不给排序代码了)  
  MaxNum为最大数据量  
   
  BYTE   liv_r,   liv_g,   liv_b;//R,G,B颜色值  
  int   buf[3][MaxNum];//里面   [0]存有x,   [1]存有y,   [2]存有z,值  
   
  liv_r   =   liv_g   =   liv_b   =   0;  
  for   (int   i   =   0;   i   <   MaxNum   -   1;   i++)  
  {  
          Canvas->Pen->Color   =   liv_r   +   (liv_g   <<   8)   +   (liv_b   <<   16);  
          Canvas->MoveTo(buf[0][i],   buf[1][i]);  
          Canvas->LineTo(buf[0][i   +   1],   buf[1][i   +   1]);  
          liv_b++;//颜色超出255时,变回0  
          if   (liv_b   >   255)  
          {  
                  liv_b   =   0;  
          }  
  }Top

7 楼yy2001()回复于 2004-08-04 09:22:35 得分 0

gzTop

8 楼yjy1001(蓝鲸--优秀得郁闷的鱼)回复于 2004-08-04 09:27:02 得分 5

兰色灰度最多是   256级啦  
  当你的灰度超出时,只有循环(或不在变化)  
   
   
          if   (liv_b   >   255)  
          {  
                  liv_b   =   255;//这样修改为不变化……  
          }Top

9 楼ceble(蓝色天空)回复于 2004-08-04 12:32:41 得分 0

 
  兰色灰度最多是   256级啦  
  当你的灰度超出时,只有循环(或不在变化)  
   
  to:   yjy1001(蓝鲸--优秀得郁闷的鱼):  
  不要超出255啊,最深的地方就用B=255啊,  
   
  我的想法是先确定在屏幕上绘图的区域大小,比如在100*100(像素)的范围内,按你所说的把Z排好序,  
                MaxZ_Blue_Color=255;  
                MinZ_Blue_Color=100;//其他小于255的值也可以  
                d_Blue_Color=MaxZ_Blue_Color-MinZ_Blue_Color;  
                d_Z=MaxZ-MinZ;  
                dColor=d_Z/d_Blue_Color;  
  对于任意一个Z,这样确定它的Color;  
                Z_Blue_Color=MinZ_Blue_Color+(Z-MinZ)/dColor;  
  这样就能保证Blue不会超过255,也有水越深兰色越深的效果,空白部分一律以MinZ_Blue_Color填充。  
  不知道有没有更好的算法  
  Top

10 楼Maconel(Maconel)回复于 2004-08-04 13:37:36 得分 10

最大是256吗,好象是255哦,0xff嘛Top

11 楼lwglucky(才鸟)回复于 2004-08-04 14:20:27 得分 5

首先你要看看bmp文件的格式,然后创建一个合适大小的内存图.   然后将你Z坐标按照XY添入内存图的位置。最后使用模糊算法使图象颜色连续(简单的模糊算法就是将每一点的颜色和周围8个点颜色加权平均)Top

相关问题

  • 从数据库读出图片信息?
  • 怎样将数据库中的图片数据读出来?
  • 如何用vb把图片存入db2数据库中和从数据库中读出?请记是db2数据库,不是mssql数据库,高手不在?
  • 把保存在access数据库中的图片读出来
  • 请问:如何从数据库中读出图片,并显示?
  • 怎样用二进制方式读出数据库的图片?
  • 如何从数据库中读出图片?
  • 怎样在数据库中插入图片,并且读出来?
  • 从mysql数据库读出并显示图片的问题?(急)
  • 怎样从数据库中读出图片100分急

关键词

  • 数据库
  • 算法
  • 数据
  • liv
  • minz
  • maxz
  • blue
  • 灰度
  • 颜色
  • 存有

得分解答快速导航

  • 帖主:ceble
  • songhtao
  • yjy1001
  • yjy1001
  • Maconel
  • lwglucky

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo