|
lonestar42 :
前几天发了个帖子里说明了大概的需求.也就是对于某些图元的定制分析.由于这种话柱图的分析的数据一般来自于数据库,所以就必须要求mapinfo和数据库相连接.所以有以下几种 下面这些方案是我这两天实验上的,由于本人是新手,所以难免有纰漏,希望各位高手能够指正 方案选择: 1.数据绑定(DataBinding) mapinfo提供了表的数据绑定但是有局限性:主要在于DataBinding的数据源只能是.tab文件也就是TabTableDescHelper,而又由于分析图层只能对一个.tab文件中所有图层绘制柱图,所以这种方案不能实现定制查询. 有一个折中的办法:就是1个.tab文件上只放1个图元,一共有多少图元就制作多少.tab文件.然后对所要的几个图元依次进行绘制柱图,也就是说有几个图元就做几个分析图层,这样把这几个分析图层盖在一起就可以实现定制. 这种方案是我最初想的最"笨"的方案,缺点在于效率很低....由于当时没考虑那么多所以就稍微做了一个,并且进行了数据绑定.后来发现确实对服务器压力非常大.我的项目里要对38个图元进行绘制.如果定制20个点那么要查20遍数据库,绘制20遍分析图层.1个人就这么多次100人,1000人会怎么样就可想而知了 2.空间数据库+数据绑定 开始我还想的挺美,但是后来发现数据绑定的这个功能数据源只支持.tab文件.所以这种方案也被否定了. 3.直接对空间数据库做分析图层: 也就是说把要做分析的属性数据的字段添加在空间数据表的后面,这样就可以基本实现了定制的需要,但是问题也就来了.这种办法会非常死,比如项目后期要求增加一个统计项,那么就要在空间数据库的表中手动添加这个字段,相应的程序也要修改.而且由于我们的项目的数据库表都已经建立好了所以不可能做重复劳动.这种方案也就放弃了 4.空间数据库+联合查询(): 这个是我现在比较完美的解决方案.但是也有一定限制.在OraSoTableDescHelper中我发现输入参数可以是表也可以是个sql语句.而如果可以写sql语句的话.那查询会变的非常灵活.但由于前面的查询是定死的: 输入的是一个表 那么就是select xx,xx,xx from 表名 输入的是一个sql 那么就是是select xxx,xxx,xxx, from (你写的sql语句) 我在前面的帖子中问了一下,高手好象说第二中其实查询的是一个视图(视图的意思就是一个sql)说白了就是嵌套了一个sql子查询.而如果我在写这个sql的时候使用联合查询的话那么就可以把空间表和属性表拼接在一起了.具体做法是select xx,xx, from 空间表,属性表 where 空间表.id=属性表.id and 限制条件. 这样我就把2个表拼接在一起了.这么做也有一定的局限性但已经相当灵活了. 我发现这种局限性是当属性表是具体的记录时,这样写sql会非常的烦琐!!.比如空间数据是城市,要做一个男性数量和女性数量的柱图(很经典的哦),但是我发现数据库里只有一个人口的属性表,而这个表里全是具体的1个1个的人.也就是说1条记录1 个人.为了统计他必须用select count(*) from people group by xx 这种东西,怎么把这个查出来的小表再拼接到空间数据库的表上成了一大难题.....目前还没有解决.我们的数据库设计人员又不愿意我再建立一个统计的表...非常头疼.但是这种方法基本属于定制绘制柱图的比较好的方法了. 5.自己制作柱图 利用JfreeChart等攻击做出柱图的图片再贴到前端,这种方法是我后来实在没辙的时候想冒险尝试的一种方法,但是这种方法维护起来非常麻烦.....只提供一个思路.... 6.临时图层 就是把.tab中符合条件的图元取出来并且放入临时图层上,而临时图曾我之会用注释图层做,而分析图层有不能对注释图层进行绘制柱图.....所以这种方案也被否定了.... 最后希望在xtreme 4.8中能支持对一个.tab定制的查询.听说xtreme for windows是支持的.......羡慕下.....
wtusmchen :
好铁,感谢!
还有一种方法:自己建立一个临时图层,然后在这个临时图层上绘柱图和饼图,好处就是可以非常方便通过自己定义的数据画分析图,不过基础代码稍微有点繁琐,做好之后就很好用了,特别是统计非常多的时候。
lonestar42 :
怎么做啊!!!老大.....你是说不用mapinfo给的AnalysisLayer做分析么????自己封装一个?怎么弄啊?我的qq14143990希望老大指点?我上面写的那些是我这几天试过的几个方法hehe
yiczhu :
二楼兄弟给个思路吧!不用分析图层做柱图和饼图。
是不是用画面对象的方法画出来的啊?那样的话会随着图的放大而放大缩小而缩小啊,而分析土层做出来的柱图和饼图是不会放大缩小的
wtusmchen :
hehe,就是楼上说的意思,用画面对象的方法画出来。
随着图的放大而放大缩小而缩小---这个我是这么想的:1.做分析图的时候不运行做放大缩小,总览一下就可以了?2.随着图的放大而放大缩小而缩小个人认为更合理,可以跟客户解释通 |