/** * JTS 1.14 does not support intersection on a {@link GeometryCollection}. This function works around this * by performing intersection on a flat list of geometry. The resulting list is pre-filtered for invalid * or empty geometry (outside of bounds). Invalid geometry are logged as errors. * * @param envelope non-list geometry defines bounding area * @param dataGeoms geometry pre-passed through {@link #flatFeatureList(Geometry)} * @return list of geometry from {@code data} intersecting with {@code envelope}. */ private static List<Geometry> flatIntersection(Geometry envelope, List<Geometry> dataGeoms) { final List<Geometry> intersectedGeoms = new ArrayList<>(dataGeoms.size()); Geometry nextIntersected; for(Geometry nextGeom : dataGeoms) { try { // AABB intersection culling if(envelope.getEnvelopeInternal().intersects(nextGeom.getEnvelopeInternal())) { nextIntersected = envelope.intersection(nextGeom); if(!nextIntersected.isEmpty()) { nextIntersected.setUserData(nextGeom.getUserData()); intersectedGeoms.add(nextIntersected); } } } catch (TopologyException e) { //LoggerFactory.getLogger(JtsAdapter.class).error(e.getMessage(), e); } } return intersectedGeoms; }
userDataConverter.addTags(geom.getUserData(), layerProps, featureBuilder);
Object nextUserData; for(Geometry nextInterGeom : intersectedGeoms) { nextUserData = nextInterGeom.getUserData();
public void loadSourceGeometries(Collection geoms) { for (Iterator i = geoms.iterator(); i.hasNext(); ) { Geometry geom = (Geometry) i.next(); loadVertices(geom.getCoordinates(), geom.getUserData()); } }
/** * Input is assumed to be a multiGeometry * in which every component has its userData * set to be a Coordinate which is the key to the output data. * The Coordinate is used to determine * the output data object to be written back into the component. * * @param targetGeom */ public void transferData(Geometry targetGeom) { for (int i = 0; i < targetGeom.getNumGeometries(); i++) { Geometry geom = targetGeom.getGeometryN(i); Coordinate vertexKey = (Coordinate) geom.getUserData(); if (vertexKey == null) continue; geom.setUserData(coordDataMap.get(vertexKey)); } } }
public void loadSourceGeometries(Geometry geomColl) { for (int i = 0; i < geomColl.getNumGeometries(); i++) { Geometry geom = geomColl.getGeometryN(i); loadVertices(geom.getCoordinates(), geom.getUserData()); } }
private static Geometry clipGeometryCollection(Geometry geom, Envelope clipEnv) { Geometry clipPoly = geom.getFactory().toGeometry(clipEnv); List clipped = new ArrayList(); for (int i = 0; i < geom.getNumGeometries(); i++) { Geometry g = geom.getGeometryN(i); Geometry result = null; // don't clip unless necessary if (clipEnv.contains(g.getEnvelopeInternal())) result = g; else if (clipEnv.intersects(g.getEnvelopeInternal())) { result = clipPoly.intersection(g); // keep vertex key info result.setUserData(g.getUserData()); } if (result != null && ! result.isEmpty()) { clipped.add(result); } } return geom.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(clipped)); } }
public Object getUserData() { return geometry.getUserData(); }
static String getMetadata(Geometry g, String metadata) { if (g.getUserData() instanceof Map) { Map userData = (Map) g.getUserData(); return (String) userData.get(metadata); } return null; } }
public Object getProperty(Object object, QName name) throws Exception { if ("srsName".equals(name.getLocalPart())) { Geometry geometry = (Geometry) object; if (geometry.getUserData() instanceof CoordinateReferenceSystem) { CoordinateReferenceSystem crs = (CoordinateReferenceSystem) geometry.getUserData(); return GML3EncodingUtils.crs(crs); } } return null; } }
private void writeUserData(Kryo kryo, Output out, Geometry geometry) { out.writeBoolean(geometry.getUserData() != null); if (geometry.getUserData() != null) { kryo.writeClass(out, geometry.getUserData().getClass()); kryo.writeObject(out, geometry.getUserData()); } }
public Object getProperty(Object object, QName name) throws Exception { if ("srsName".equals(name.getLocalPart())) { Geometry geometry = (Geometry) object; if (geometry.getUserData() instanceof CoordinateReferenceSystem) { return GML2EncodingUtils.crs((CoordinateReferenceSystem) geometry.getUserData()); } } return null; } }
private void writeUserData(Kryo kryo, Output out, Geometry geometry) { out.writeBoolean(geometry.getUserData() != null); if (geometry.getUserData() != null) { kryo.writeClass(out, geometry.getUserData().getClass()); kryo.writeObject(out, geometry.getUserData()); } }
private void initCRS(Geometry g) { // see if we have a native CRS in the mix if(crs == null && g.getUserData() instanceof CoordinateReferenceSystem) { crs = (CoordinateReferenceSystem) g.getUserData(); } if(srid == -1 && g.getSRID() > 0) { srid = g.getSRID(); } } }
@SuppressWarnings("rawtypes") private String getGmlID(Geometry geom, String gmlId) { String id; if (!Strings.isNullOrEmpty(gmlId)) { id = gmlId; } else if (geom.getUserData() != null && geom.getUserData() instanceof Map && ((Map) geom.getUserData()).containsKey(XmlBeansEncodingFlags.GMLID.name())) { id = (String) ((Map) geom.getUserData()).get(XmlBeansEncodingFlags.GMLID.name()); } else { id = JavaHelper.generateID(geom.toText()); } return geom.getGeometryType() + "_" + id; }
public void loadSourceGeometries(Collection geoms) { for (Iterator i = geoms.iterator(); i.hasNext(); ) { Geometry geom = (Geometry) i.next(); loadVertices(geom.getCoordinates(), geom.getUserData()); } }
@Override public Envelope decodeGeometryEnvelope(ResultSet rs, int column, Connection cx) throws SQLException, IOException { String s = rs.getString( column ); Geometry g = decodeGeometry( s, null ); if ( g == null ) { return null; } return new ReferencedEnvelope( g.getEnvelopeInternal(), (CoordinateReferenceSystem) g.getUserData() ); }
public void convert(Geometry source, SRSReferenceGroup target) { Validate.notNull(source); Validate.notNull(target); if (source.getUserData() instanceof String) { target.setSrsName((String) source.getUserData()); } else if (source.getSRID() != 0) { target.setSrsName(MessageFormat.format(this.sridPattern, source.getSRID())); } }
public void loadSourceGeometries(Geometry geomColl) { for (int i = 0; i < geomColl.getNumGeometries(); i++) { Geometry geom = geomColl.getGeometryN(i); loadVertices(geom.getCoordinates(), geom.getUserData()); } }
public Object visit(Literal expression, Object extraData) { if (!(expression.getValue() instanceof Geometry)) return super.visit(expression, extraData); // check if reprojection is needed Geometry geom = (Geometry) expression.getValue(); if(geom.getUserData() != null && geom.getUserData() instanceof CoordinateReferenceSystem) return super.visit(expression, extraData); // clone the geometry and assign the new crs Geometry clone = geom.getFactory().createGeometry(geom); clone.setUserData(defaultCrs); // clone return ff.literal(clone); } }