/** * Returns the perimeter of a MultiLineString. * * @param multiLineString the MultiLineString for which the perimeter is calculated. * @return the total perimter (length) of the lines in multiLineString. */ protected double getPerimeter(MultiLineString multiLineString) { double perimeter = 0.0d; int numberOfGeometries = multiLineString.getNumGeometries(); for (int i = 0; i < numberOfGeometries; i++) { perimeter += getPerimeter(multiLineString.getGeometryN(i)); } return perimeter; }
/** * Converts a <code>MultiLineString</code> to <MultiLineString Text> format, then appends * it to the writer. * * @param multiLineString the <code>MultiLineString</code> to process * @param writer the output writer to append to */ private void appendMultiLineStringText( MultiLineString multiLineString, int level, boolean indentFirst, Writer writer) throws IOException { if (multiLineString.isEmpty()) { writer.write("EMPTY"); } else { int level2 = level; boolean doIndent = indentFirst; writer.write("("); for (int i = 0; i < multiLineString.getNumGeometries(); i++) { if (i > 0) { writer.write(", "); level2 = level + 1; doIndent = true; } appendLineStringText( (LineString) multiLineString.getGeometryN(i), level2, doIndent, writer); } writer.write(")"); } }
MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStringArray); multiLineString.setUserData(getSRS()); multiLineString.setSRID(getSRID()); LOGGER.fine("created " + multiLineString);
/** */ public int getLength(Object geometry) { MultiLineString multi = (MultiLineString) geometry; int numlines; int numpoints; int length; numlines = multi.getNumGeometries(); numpoints = multi.getNumPoints(); if (shapeType == ShapeType.ARC) { length = 44 + (4 * numlines) + (numpoints * 16); } else if (shapeType == ShapeType.ARCM) { length = 44 + (4 * numlines) + (numpoints * 16) + 8 + 8 + (8 * numpoints); } else if (shapeType == ShapeType.ARCZ) { length = 44 + (4 * numlines) + (numpoints * 16) + 8 + 8 + (8 * numpoints) + 8 + 8 + (8 * numpoints); } else { throw new IllegalStateException("Expected ShapeType of Arc, got " + shapeType); } return length; }
public static MultiLineString translateLineString(final MultiLineString line, final double offset) { ArgumentChecks.ensureNonNull("MultiLineString", line); if (offset == 0) return line; final GeometryFactory geomFact = line.getFactory(); final LineString[] ls = new LineString[line.getNumGeometries()]; for(int i=0;i<ls.length;i++){ ls[i] = translateLineString((LineString)line.getGeometryN(i), offset); } final MultiLineString mls = geomFact.createMultiLineString(ls); mls.setSRID(line.getSRID()); mls.setUserData(line.getUserData()); return mls; }
public void write(ByteBuffer buffer, Object geometry) { MultiLineString multi = (MultiLineString) geometry; Envelope box = multi.getEnvelopeInternal(); buffer.putDouble(box.getMinX()); buffer.putDouble(box.getMinY()); buffer.putDouble(box.getMaxY()); final int numParts = multi.getNumGeometries(); final CoordinateSequence[] lines = new CoordinateSequence[numParts]; final double[] zExtreame = {Double.NaN, Double.NaN}; final int npoints = multi.getNumPoints(); lines[i] = ((LineString) multi.getGeometryN(i)).getCoordinateSequence(); buffer.putInt(idx); idx = idx + lines[i].size(); for (int t = 0, tt = multi.getNumGeometries(); t < tt; t++) { LineString line = (LineString) multi.getGeometryN(t); CoordinateSequence seq = line.getCoordinateSequence(); for (int i = 0; i < seq.size(); i++) {
@Test public void testDecimateCollection() throws Exception { WKTReader2 reader = new WKTReader2(); MultiLineString origin = (MultiLineString) reader.read("MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))"); Decimator d = new Decimator(0.1, 0.1); MultiLineString simplified = (MultiLineString) d.decimateTransformGeneralize(origin, identity); assertEquals(origin.getGeometryN(0), simplified.getGeometryN(0)); assertNotEquals(origin.getGeometryN(1), simplified.getGeometryN(1)); assertEquals("CircularString", origin.getGeometryN(1).getGeometryType()); assertEquals("LineString", simplified.getGeometryN(1).getGeometryType()); } }
public void testParseWithCurveMembers() throws Exception { GML3MockData.multiCurve(document, document, false); MultiLineString mline = (MultiLineString) parse(); assertEquals(2, mline.getNumGeometries()); } }
/** * Drape a multilinestring to a set of triangles * @param lines * @param triangles * @param sTRtree * @return */ public static Geometry drapeMultiLineString(MultiLineString lines, Geometry triangles, STRtree sTRtree) { GeometryFactory factory = lines.getFactory(); //Split the triangles in lines to perform all intersections Geometry triangleLines = LinearComponentExtracter.getGeometry(triangles, true); int nbLines = lines.getNumGeometries(); LineString[] lineStrings = new LineString[nbLines]; for (int i = 0; i < nbLines; i++) { lineStrings[i] = (LineString) lineMerge(lines.getGeometryN(i).difference(triangleLines), factory); } Geometry diffExt = factory.createMultiLineString(lineStrings); CoordinateSequenceFilter drapeFilter = new DrapeFilter(sTRtree); diffExt.apply(drapeFilter); return diffExt; }
voronoiBorderLines.add(((Polygon)geometryFactory.toGeometry(envelope)).getExteriorRing()); MultiLineString env = (MultiLineString)geometryFactory.createMultiLineString(voronoiBorderLines. toArray(new LineString[0])).union(); for (int i = 0; i < env.getNumGeometries(); i++) { lineStrings.add((LineString) env.getGeometryN(i));
assertTrue(geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[] { }), new LinearRing[] { }).isEmpty()); assertTrue(geometryFactory.createMultiPolygon(new Polygon[] { }).isEmpty()); assertTrue(geometryFactory.createMultiLineString(new LineString[] { }).isEmpty()); assertTrue(geometryFactory.createMultiPoint(new Point[] { }).isEmpty()); assertTrue(geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[] { }), new LinearRing[] { }).getBoundary().isEmpty()); assertTrue(geometryFactory.createMultiPolygon(new Polygon[] { }).getBoundary().isEmpty()); assertTrue(geometryFactory.createMultiLineString(new LineString[] { }).getBoundary().isEmpty()); assertTrue(geometryFactory.createMultiPoint(new Point[] { }).getBoundary().isEmpty()); assertTrue(geometryFactory.createPolygon(null, null).isEmpty()); assertTrue(geometryFactory.createMultiPolygon(null).isEmpty()); assertTrue(geometryFactory.createMultiLineString(null).isEmpty()); assertTrue(geometryFactory.createMultiPoint((Point[]) null).isEmpty()); assertEquals(1, (geometryFactory.createPolygon(null, null)).getBoundaryDimension()); assertEquals(1, (geometryFactory.createMultiPolygon(null)).getBoundaryDimension()); assertEquals(0, (geometryFactory.createMultiLineString(null)).getBoundaryDimension()); assertEquals(-1, (geometryFactory.createMultiPoint((Point[]) null)).getBoundaryDimension()); assertEquals(0, (geometryFactory.createPolygon(null, null)).getNumPoints()); assertEquals(0, (geometryFactory.createMultiPolygon(null)).getNumPoints()); assertEquals(0, (geometryFactory.createMultiLineString(null)).getNumPoints()); assertEquals(0, (geometryFactory.createMultiPoint((Point[]) null)).getNumPoints()); assertEquals(0, (geometryFactory.createPolygon(null, null)).getCoordinates().length); assertEquals(0, (geometryFactory.createMultiPolygon(null)).getCoordinates().length); assertEquals(0, (geometryFactory.createMultiLineString(null)).getCoordinates().length); assertEquals(0, (geometryFactory.createMultiPoint((Point[]) null)).getCoordinates().length);
public Object parse(Handler arg, GeometryFactory gf) throws SAXException { // one child, either a coord // or a coordinate sequence if(arg.children.size()<1) throw new SAXException("Cannot create a multi-linestring without atleast one linestring"); int srid = getSrid(arg.attrs,gf.getSRID()); LineString[] lns = (LineString[]) arg.children.toArray(new LineString[arg.children.size()]); MultiLineString mp = gf.createMultiLineString(lns); if(mp.getSRID()!=srid) mp.setSRID(srid); return mp; } });
lines.setSRID(SRID);
/** * Construct a line string from CurveMembers coordinates. * * @param node * @return */ public static CoordinateList extractCurveMemberCoordinates(Node node) { List curveMembers = node.getChildren("curveMember"); CoordinateList clist = new CoordinateList(); for (int i = 0; i < curveMembers.size(); i++) { List curves = ((Node) curveMembers.get(i)).getChildren(MultiLineString.class); for (int j = 0; j < curves.size(); j++) { MultiLineString mls = (MultiLineString) ((Node) curves.get(j)).getValue(); clist.add(mls.getCoordinates(), false); } } return clist; } }
public boolean isClosed() { if (isEmpty()) { return false; } for (int i = 0; i < geometries.length; i++) { if (!((LineString) geometries[i]).isClosed()) { return false; } } return true; }
MultiLineString multi = castToMultiLineString(geometry); Envelope box = multi.getEnvelopeInternal(); buffer.putDouble(box.getMinX()); buffer.putDouble(box.getMinY()); buffer.putDouble(box.getMaxY()); int numParts = multi.getNumGeometries(); int npoints = multi.getNumPoints(); buffer.putInt(npoints); lines[i] = (LineString) multi.getGeometryN(i); buffer.putInt(idx); idx += lines[i].getNumPoints(); Coordinate[] coords = multi.getCoordinates();
public Graphable add(Object obj) { LineString ls = null; if (obj instanceof MultiLineString) { ls = (LineString) ((MultiLineString) obj).getGeometryN(0); } else { ls = (LineString) obj;
public void testParseWithCurveMember() throws Exception { GML3MockData.multiCurve(document, document); MultiLineString mline = (MultiLineString) parse(); assertEquals(2, mline.getNumGeometries()); }
public int getLength(Geometry geometry){ MultiLineString multi = (MultiLineString) geometry; int numlines, numpoints; numlines = multi.getNumGeometries(); numpoints = multi.getNumPoints(); if (myShapeType == 3) { return 22 + 2*numlines + (numpoints * 8); } if (myShapeType == 23) { return 22 + 2*numlines + (numpoints * 8) + 4+4+4*numpoints; } return 22 + 2*numlines + (numpoints * 8) + 4+4+4*numpoints+ 4+4+4*numpoints; // return 22 + 2*numlines + (numpoints * 8); //return (44+(4*((GeometryCollection)geometry).getNumGeometries())); }
geometry.setSRID(4326); getCurrentLine().setGeometry(geometry);