gt-grid 源码分析

在工作使用到了gt-grid.jar中生成矢量grid,发现在某些长度和宽度的时候,生成的栅格并不能全覆盖图形。

使用的方法:Grids.createSquareGrid

最开始还以为是代码出现bug,后面对生成的grid进行测试发现是由于该方法本身会出现该问题,于是对源码进行了分析发现确实有此问题:

核心代码源码如下:

 while (el.getBounds().getMinY() <= gridBounds.getMaxY()) {
            while (el.getBounds().getMaxX() <= gridBounds.getMaxX()) {
                if (((Envelope) gridBounds).contains(el.getBounds())) {
                    if (gridFeatureBuilder.getCreateFeature(el)) {
                        Map<String, Object> attrMap = new HashMap<String, Object>();
                        gridFeatureBuilder.setAttributes(el, attrMap);

                        if (densify) {
                            fb.set(geomPropName, el.toDenseGeometry(vertexSpacing));
                        } else {
                            fb.set(geomPropName, el.toGeometry());
                        }

                        for (String propName : attrMap.keySet()) {
                            fb.set(propName, attrMap.get(propName));
                        }

                        fc.add(fb.buildFeature(gridFeatureBuilder.getFeatureID(el)));
                    }
                }

                el = getNextXElement(el);
            }

            el0 = getNextYElement(el0);
            el = el0;
        }

其中 if (((Envelope) gridBounds).contains(el.getBounds()))
条件 明确表示出了生成的grid如果超出了范围,则该grid不算。因此出现了我之前的问题。
解决方法:
为保证在某个宽度和长度生成的grid全覆盖
则在传入bound范围时,人为扩大bound范围保证,其中过大的值,如果宽度为1,那么扩大值最好在1-2之间,目前我使用的是2倍于max(宽度,长度)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Grid 是CSS中最强大的布局系统。它是2-Dimensional System,这意味着它可以同时处理列和行....
    邢烽朔阅读 7,404评论 0 5
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • 今年七夕朋友圈晒的没那么厉害了,貌似被微信群代替了。不过那天的确是热闹。。 "我老公今年不知道哪根筋开窍了,情人节...
    婉瑜Alice阅读 4,270评论 0 1
  • 有了孩子以后,还真别想睡一个整夜觉,夜里起来给小屁孩换好尿不湿后,便睡意全无,刷了会朋友圈,便看到了一件颇有感触的...
    欢快的燕子阅读 3,214评论 0 1
  • UIScrollView无法滚动的几个原因 1.没有设置contentSize 2.把scrollEnabled ...
    vip4iPhonr阅读 3,392评论 0 2