|
虽然告别了gis但是前几天留下来的问题还是很不甘心就这么放掉 这两天又重新研究了研究终于把问题解决.
请看下面两句话!!!!!! 启动tomcat后做2次专题图,分析图层的名字都叫Analysis_layer 1.第一次在log中看到如下提示: ----------------------------------------------------------------------------------------------------------- DEBUG [TP-Processor1] (?:?) - Nothing in cache for key: [maxBarHeight=50.0, indepScale=false, layerName=Analysis_Layer, analysisCols=[一百千瓦, 一百五十千瓦, 五百千瓦, 六百千瓦], gradProps=[method=const, value=null, size=50.0]] DEBUG [TP-Processor1] (?:?) - Added infos to cache with key: [maxBarHeight=50.0, indepScale=false, layerName=Analysis_Layer,analysisCols=[一百千瓦, 一百五十千瓦, 五百千瓦, 六百千瓦], gradProps=[method=const, value=null, size=50.0]] ----------------------------------------------------------------------------------------------------------- 2.在不关闭tomcat时进行连续的第二次指定图元进行分析的操作 ------------------------------------------------------------------------------------- DEBUG [TP-Processor5] (?:?) - Found infos in cache for key: [maxBarHeight=50.0, indepScale=false, layerName=Analysis_Layer,analysisCols=[一百千瓦, 一百五十千瓦, 五百千瓦, 六百千瓦], gradProps=[method=const, value=null, size=50.0]] ---------------------------------------------------------------------------------------------------------- 说明: 1.从log中可以清楚的看到每次访问的时候他会将你新添的AnalysisLayer和cache中AnalysisLayer通过名字进行比较. 2.如果发现cache中没有此层,那么会将你添加的此层加入缓存中 3.如果缓存中找到了同名的AnalysisLayer则保留缓存中的AnalysisLayer. 4.缓存自动在每次启动tomcat中开辟出来.(你会看到log中类似cache size 50这种提示) 总结: 说白了,也就是如果你的AnalysisLayer的名字(也就是insertLayer方法中的最后一个参数) 在cache中有了的话那么他会对你新添加的这个不进行任何操作,同时认为你想显示缓存里的同名的analysislayer.(缺德啊......) 这样当你连续操作的时候如果不及时清除缓存而又不改变新的analysislayer的名字的话,则永远只能显示第一次分析出来的结果....... 解决办法: 我在开发手册中没有找到任何关于cache的相关信息(搜索的是cache没搜索缓存),但是我在api中发现了CacheManager的方法. 所以解决办法就是在你渲染完地图后加上如下代码: CacheManager.clearLocalCache(CacheType.ANALYSIS_LAYER_DRAW_CACHE); 这样保证每次cache中都是空的 CacheType的类型有如下几种,请各取所需: ANALYSIS_LAYER_DRAW_CACHE TABLEINFO_CACHE WMSSERVER_CACHE TABFILE_CACHE 后记: 这个问题困扰了我一个星期,今天终于圆满解决.解决完后我在想为什么mapinfo要弄出这么一套机制.猜测可能是为了提高效率.而cache的意思可能是对Session又封装了一层并写进去如此的逻辑. 如何提高效率? 比如我第一次查出10个点做了柱图,第二次查出了20个点再做柱图,而这20个点中包含之前的10个点,那么采用这种方法,在java中取出需要查的新的点做一张新的分析图层(当然名字和之前的不同),然后同时insert之前的分析层和新的分析层这样就得到20个点的柱图了,这么做可以少查10个点.觉得自己的解释有点牵强. 欢迎高手来继续讨论.
|