| | |
| | | import java.util.LinkedList;
|
| | |
|
| | | public class ElementFactory {
|
| | | private static final int DEFAULT_ELMHEAD_LENGTH = 28;
|
| | | private static final int DEFAULT_DISPHEAD_LENGTH = 8;
|
| | | private static final int MINIMAL_ELEMLENGTH = 18 * 2;
|
| | | static final int DEFAULT_ELMHEAD_LENGTH = 28;
|
| | | static final int DEFAULT_DISPHEAD_LENGTH = 8;
|
| | | static final int MINIMAL_ELEMLENGTH = 18 * 2;
|
| | |
|
| | | private static final int MAXINUM_LINESTRING_PTLEN = 100;
|
| | | static final int MAXINUM_LINESTRING_PTLEN = 100;
|
| | |
|
| | | private static ElementFactory elementFactory = new ElementFactory();
|
| | | private static GeometryFactory factory = new GeometryFactory();
|
| | |
| | | }
|
| | | element.setVerticeSize(pts.length);
|
| | | element.setType(ElementType.SHAPE.id);
|
| | | element.setFollowLength((short) ((elmsize / 2) - 2));
|
| | | element.setRange(ring.getEnvelopeInternal());
|
| | | element.setLevelIndex(0);
|
| | | element.setColorIndex(0);
|
| | |
| | | }
|
| | | element.setVerticeSize(pts.length);
|
| | | element.setType(ElementType.LINESTRING.id);
|
| | | element.setFollowLength((short) ((elmsize / 2) - 2));
|
| | | element.setLevelIndex(0);
|
| | | element.setColorIndex(0);
|
| | | element.setWeight(0);
|
| | |
| | | }
|
| | | element.setVerticeSize(pts.length);
|
| | | element.setType(ElementType.SHAPE.id);
|
| | | element.setFollowLength((short) ((elmsize / 2) - 2));
|
| | | element.setLevelIndex(0);
|
| | | element.setColorIndex(0);
|
| | | element.setWeight(0);
|
| | |
| | | Coordinate[] allpts = linestring.getCoordinates();
|
| | | int segsize = allpts.length / MAXINUM_LINESTRING_PTLEN;
|
| | | int currentpos = 0;
|
| | | int totalLength = 0;
|
| | | for (int seg = 0; seg < segsize; seg++) {
|
| | | Coordinate[] pts = Arrays.copyOfRange(allpts,
|
| | | currentpos, currentpos + MAXINUM_LINESTRING_PTLEN, Coordinate[].class);
|
| | | currentpos, currentpos + MAXINUM_LINESTRING_PTLEN + 1, Coordinate[].class);
|
| | | LineStringElement element = elementFactory.createLineStringElement(pts);
|
| | | currentpos += MAXINUM_LINESTRING_PTLEN;
|
| | | element.setRange(element.toGeometry(factory).getEnvelopeInternal());
|
| | | element.setComponentElement(true);
|
| | | element.setLevelIndex(0);
|
| | | totalLength += element.raw.length;
|
| | | elms.add(element);
|
| | | }
|
| | | int remain = allpts.length % MAXINUM_LINESTRING_PTLEN;
|
| | |
| | | LineStringElement element = elementFactory.createLineStringElement(pts);
|
| | | element.setRange(element.toGeometry(factory).getEnvelopeInternal());
|
| | | element.setComponentElement(true);
|
| | | element.setLevelIndex(0);
|
| | | elms.add(element);
|
| | | totalLength += element.raw.length;
|
| | |
|
| | | ComplexChainElement result = new ComplexChainElement(new byte[MINIMAL_ELEMLENGTH + 12]);
|
| | | result.addAll(elms);
|
| | | result.setRange(linestring.getEnvelopeInternal());
|
| | | result.setType(ElementType.COMPLEXCHAIN.id);
|
| | | result.setFollowLength((short) (((MINIMAL_ELEMLENGTH + 12) / 2) - 2));
|
| | | result.setNumOfElement((short) elms.size());
|
| | | totalLength += result.raw.length;
|
| | | totalLength -= 19;
|
| | | result.setTotalLength((short) totalLength);
|
| | | result.setLevelIndex(0);
|
| | | result.setColorIndex(0);
|
| | | result.setWeight(0);
|