/*
* Copyright (c) 2016 Vivid Solutions.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
*
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package org.locationtech.jtstest.function;
import java.util.*;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.geom.util.LinearComponentExtracter;
import org.locationtech.jts.geom.util.PolygonExtracter;
public class ConversionFunctions
{
public static Geometry toPoints(Geometry g1, Geometry g2)
{
Geometry geoms = FunctionsUtil.buildGeometry(g1, g2);
return FunctionsUtil.getFactoryOrDefault(g1, g2)
.createMultiPoint(geoms.getCoordinates());
}
public static Geometry toLines(Geometry g1, Geometry g2)
{
Geometry geoms = FunctionsUtil.buildGeometry(g1, g2);
return FunctionsUtil.getFactoryOrDefault(g1, g2)
.buildGeometry(LinearComponentExtracter.getLines(geoms));
}
public static Geometry toMultiPolygon(Geometry g1, Geometry g2)
{
Geometry geoms = FunctionsUtil.buildGeometry(g1, g2);
List polys = PolygonExtracter.getPolygons(g1);
PolygonExtracter.getPolygons(g2, polys);
return FunctionsUtil.getFactoryOrDefault(g1, g2)
.createMultiPolygon( GeometryFactory.toPolygonArray(polys));
}
public static Geometry toGeometryCollection(Geometry g, Geometry g2)
{
List atomicGeoms = new ArrayList();
if (g != null) addComponents(g, atomicGeoms);
if (g2 != null) addComponents(g2, atomicGeoms);
return g.getFactory().createGeometryCollection(
GeometryFactory.toGeometryArray(atomicGeoms));
}
private static void addComponents(Geometry g, List atomicGeoms)
{
if (! (g instanceof GeometryCollection)) {
atomicGeoms.add(g);
return;
}
GeometryCollectionIterator it = new GeometryCollectionIterator(g);
while (it.hasNext()) {
Geometry gi = (Geometry) it.next();
if (! (gi instanceof GeometryCollection))
atomicGeoms.add(gi);
}
}
}