/** * TODO: Encode more then 1 * * @param line * @param srid */ private static String toSDOGeom(MultiLineString line, int srid) { if (line.getNumGeometries() == 1) { return toSDOGeom(line.getGeometryN(0), srid); } throw new UnsupportedOperationException("Cannot encode MultiLineString (yet)"); } /**
public Object getProperty(Object object, QName name) throws Exception { if (GML.lineStringMember.equals(name)) { MultiLineString multiLineString = (MultiLineString) object; LineString[] members = new LineString[multiLineString.getNumGeometries()]; for (int i = 0; i < members.length; i++) { members[i] = (LineString) multiLineString.getGeometryN(i); } GML3EncodingUtils.setChildIDs(multiLineString); return members; } return null; } }
public Object getProperty(Object object, QName name) throws Exception { if ("curveMember".equals(name.getLocalPart())) { MultiLineString multiCurve = (MultiLineString) object; LineString[] members = new LineString[multiCurve.getNumGeometries()]; for (int i = 0; i < members.length; i++) { members[i] = (LineString) multiCurve.getGeometryN(i); } GML3EncodingUtils.setChildIDs(multiCurve); return members; } else { super.getProperty(object, name); } return null; } }
/** * 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(")"); } }
private static void addCoordinates(List list, MultiLineString lines) { for (int i = 0; i < lines.getNumGeometries(); i++) { Geometry geometryN = lines.getGeometryN(i); if (geometryN != null && !geometryN.isEmpty()) addCoordinates(list, (LineString) geometryN); } }
/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated modifiable */ public Object parse(ElementInstance instance, Node node, Object value) throws Exception { // <element maxOccurs="unbounded" minOccurs="0" ref="gml:curveMember"/> List curves = node.getChildValues(LineString.class); // <element minOccurs="0" ref="gml:curveMembers"/> if (node.hasChild(MultiLineString[].class)) { // this is a hack but we map curve itself to multi line string MultiLineString[] lines = (MultiLineString[]) node.getChildValue(MultiLineString[].class); for (MultiLineString mline : lines) { if (mline.getNumGeometries() == 1) { curves.add(mline.getGeometryN(0)); } else { // TODO: perhaps log this instead? throw new IllegalArgumentException( "Unable to handle curve member with multiple segments"); } } } return gf.createMultiLineString( (LineString[]) curves.toArray(new LineString[curves.size()])); }
/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated modifiable */ public Object parse(ElementInstance instance, Node node, Object value) throws Exception { List<LineString> lineStrings = new ArrayList<LineString>(); // This property element contains a list of curves. // The order of the elements is significant and shall be preserved when processing the // array. for (Node child : (List<Node>) node.getChildren()) { Object nodeValue = child.getValue(); if (nodeValue instanceof MultiLineString) { MultiLineString curve = (MultiLineString) nodeValue; for (int i = 0; i < curve.getNumGeometries(); i++) { LineString lineString = (LineString) curve.getGeometryN(i); lineStrings.add(lineString); } } else if (nodeValue instanceof LineString) { LineString lineString = (LineString) nodeValue; lineStrings.add(lineString); } } return gf.createMultiLineString(GeometryFactory.toLineStringArray(lineStrings)); }
public DBObject toObject(MultiLineString ml) { if (opportunisticMultiGeometryCoversion && ml.getNumGeometries() == 1) { return toObject((LineString) ml.getGeometryN(0)); } List<Object> l = new BasicDBList(); for (int i = 0; i < ml.getNumGeometries(); i++) { l.add(toList(((LineString) ml.getGeometryN(i)).getCoordinateSequence())); } return BasicDBObjectBuilder.start() .add("type", "MultiLineString") .add("coordinates", l) .get(); }
private static void addElemInfo( List elemInfoList, MultiLineString lines, final int STARTING_OFFSET, final int GTYPE) { LineString line; int offset = STARTING_OFFSET; int LEN = D(GTYPE) + L(GTYPE); for (int i = 0; i < lines.getNumGeometries(); i++) { line = (LineString) lines.getGeometryN(i); addElemInfo(elemInfoList, line, offset); offset += (line.getNumPoints() * LEN); } }
static List<TDWay> wktMultiLineStringToWays(String wktFile) { Geometry geometry = readWKTFile(wktFile); if (geometry == null || !(geometry instanceof MultiLineString)) { return null; } MultiLineString mls = (MultiLineString) geometry; List<TDWay> ret = new ArrayList<>(); for (int i = 0; i < mls.getNumGeometries(); i++) { ret.add(fromLinestring((LineString) mls.getGeometryN(i), false)); } return ret; }
return (LineString) lines.getGeometryN(0);
@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 Graphable add(Object obj) { LineString ls = null; if (obj instanceof MultiLineString) { ls = (LineString) ((MultiLineString) obj).getGeometryN(0); } else { ls = (LineString) obj;
@Override public void encode(MultiLineString geometry, AttributesImpl atts, GMLWriter handler) throws Exception { handler.startElement(multiLineString, atts); for (int i = 0; i < geometry.getNumGeometries(); i++) { handler.startElement(lineStringMember, null); LineString line = (LineString) geometry.getGeometryN(i); if (line instanceof LinearRing) { lre.encode(line, null, handler); } else { lse.encode(line, null, handler); } handler.endElement(lineStringMember); } handler.endElement(multiLineString); } }
@Test public void testParseMulticurve() throws Exception { WKTReader reader = new WKTReader2(); String WKT = "MULTICURVE EMPTY"; MultiLineString ml = (MultiLineString) reader.read(WKT); assertTrue(ml.isEmpty()); WKT = "MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))"; ml = (MultiLineString) reader.read(WKT); assertEquals(2, ml.getNumGeometries()); assertTrue(ml.getGeometryN(0).getClass() == LineString.class); assertTrue(ml.getGeometryN(1) instanceof CircularString); WKT = "MULTICURVE((100 100, 120 120), COMPOUNDCURVE(CIRCULARSTRING(0 0, 2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)))"; ml = (MultiLineString) reader.read(WKT); assertEquals(2, ml.getNumGeometries()); assertTrue(ml.getGeometryN(0).getClass() == LineString.class); assertTrue(ml.getGeometryN(1) instanceof CompoundRing); }
static void encode(Element e, MultiLineString g, PrintHandler output) throws IOException { if ((g == null) || g.getNumGeometries() <= 0) { throw new IOException("Bad MultiLineString Data"); } AttributesImpl ai = getSrsNameAttribute(g); if (e == null) { output.startElement(GMLSchema.NAMESPACE, "MultiLineString", ai); } else { output.startElement(e.getNamespace(), e.getName(), ai); } for (int i = 0; i < g.getNumGeometries(); i++) { output.startElement(GMLSchema.NAMESPACE, "lineStringMember", null); encode(null, (LineString) g.getGeometryN(i), output); output.endElement(GMLSchema.NAMESPACE, "lineStringMember"); } if (e == null) { output.endElement(GMLSchema.NAMESPACE, "MultiLineString"); } else { output.endElement(e.getNamespace(), e.getName()); } }
@Test public void testDuplicateGeometryMercator() throws Exception { ReferencedEnvelope world = new ReferencedEnvelope(-180, 180, -50, 50, WGS84); ReferencedEnvelope mercatorEnvelope = world.transform(MERCATOR, true); // a geometry that will cross the dateline and sitting in the same area as the // rendering envelope Geometry g = new WKTReader().read("LINESTRING(170 -50, 190 50)"); // make sure the geometry is not wrapped ProjectionHandler handler = ProjectionHandlerFinder.getHandler(mercatorEnvelope, WGS84, true); assertTrue(handler.requiresProcessing(g)); Geometry preProcessed = handler.preProcess(g); // no cutting expected assertEquals(g, preProcessed); // transform and post process MathTransform mt = CRS.findMathTransform(WGS84, MERCATOR, true); Geometry transformed = JTS.transform(g, mt); Geometry postProcessed = handler.postProcess(mt, transformed); // should have been duplicated in two parts assertTrue(postProcessed instanceof MultiLineString); MultiLineString mls = (MultiLineString) postProcessed; assertEquals(2, mls.getNumGeometries()); // the two geometries width should be the same as 20° double twentyDegWidth = mercatorEnvelope.getWidth() / 18; assertEquals(twentyDegWidth, mls.getGeometryN(0).getEnvelopeInternal().getWidth(), EPS); assertEquals(twentyDegWidth, mls.getGeometryN(1).getEnvelopeInternal().getWidth(), EPS); }
public void test3D() throws Exception { GML3MockData.multiLineString3D(document, document); MultiLineString multiLineString = (MultiLineString) parse(); assertNotNull(multiLineString); assertEquals(2, multiLineString.getNumGeometries()); LineString line = (LineString) multiLineString.getGeometryN(0); assertTrue(new Coordinate(1d, 2d, 10d).equals3D(line.getPointN(0).getCoordinate())); assertTrue(new Coordinate(3d, 4d, 20d).equals3D(line.getPointN(1).getCoordinate())); }
for (int count = 0; count < multiLineString.getNumGeometries(); count++) { inverted[count] = (LineString) invertGeometryCoordinates(multiLineString.getGeometryN(count));