在工作使用到了gt-grid.jar中生成矢量grid捂敌,發(fā)現(xiàn)在某些長度和寬度的時候犬第,生成的柵格并不能全覆蓋圖形锨推。
使用的方法:Grids.createSquareGrid
最開始還以為是代碼出現(xiàn)bug大年,后面對生成的grid進行測試發(fā)現(xiàn)是由于該方法本身會出現(xiàn)該問題蔽氨,于是對源碼進行了分析發(fā)現(xiàn)確實有此問題:
核心代碼源碼如下:
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不算跨算。因此出現(xiàn)了我之前的問題爆土。
解決方法:
為保證在某個寬度和長度生成的grid全覆蓋
則在傳入bound范圍時,人為擴大bound范圍保證诸蚕,其中過大的值步势,如果寬度為1,那么擴大值最好在1-2之間背犯,目前我使用的是2倍于max(寬度,長度)