package com.revolsys.gis.parallel; import com.revolsys.geometry.model.Geometry; import com.revolsys.geometry.model.LineString; import com.revolsys.geometry.model.Polygon; import com.revolsys.geometry.util.LineStringUtil; import com.revolsys.parallel.channel.Channel; import com.revolsys.parallel.process.BaseInOutProcess; import com.revolsys.record.Record; public class ClipGeometryProcess extends BaseInOutProcess<Record, Record> { private Polygon clipPolygon; /** * @return the clipPolygon */ public Polygon getClipPolygon() { return this.clipPolygon; } @Override protected void process(final Channel<Record> in, final Channel<Record> out, final Record object) { final Geometry geometry = object.getGeometry(); if (geometry != null) { final Geometry intersection = geometry.intersection(this.clipPolygon); if (!intersection.isEmpty() && intersection.getClass() == geometry.getClass()) { if (intersection instanceof LineString) { final LineString original = (LineString)geometry; LineString lineString = (LineString)intersection; lineString = LineStringUtil.addElevation(original, lineString); } object.setGeometryValue(intersection); out.write(object); } } else { out.write(object); } } /** * @param clipPolygon the clipPolygon to set */ public void setClipPolygon(final Polygon clipPolygon) { this.clipPolygon = clipPolygon; } }