Revision 42283 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/util/JTSUtils.java
JTSUtils.java | ||
---|---|---|
26 | 26 |
import java.util.Iterator; |
27 | 27 |
import java.util.List; |
28 | 28 |
|
29 |
import com.vividsolutions.jts.algorithm.HCoordinate; |
|
29 | 30 |
import com.vividsolutions.jts.geom.Coordinate; |
30 | 31 |
import com.vividsolutions.jts.geom.CoordinateSequence; |
32 |
import com.vividsolutions.jts.geom.LineSegment; |
|
31 | 33 |
import com.vividsolutions.jts.geom.LineString; |
32 | 34 |
import com.vividsolutions.jts.geom.LinearRing; |
33 | 35 |
import com.vividsolutions.jts.geom.MultiLineString; |
... | ... | |
35 | 37 |
import com.vividsolutions.jts.geom.Triangle; |
36 | 38 |
import com.vividsolutions.jts.util.GeometricShapeFactory; |
37 | 39 |
|
40 |
import org.slf4j.Logger; |
|
41 |
import org.slf4j.LoggerFactory; |
|
42 |
|
|
38 | 43 |
import org.gvsig.fmap.geom.Geometry; |
44 |
import org.gvsig.fmap.geom.GeometryException; |
|
39 | 45 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
40 | 46 |
import org.gvsig.fmap.geom.jts.GeometryJTS; |
41 | 47 |
import org.gvsig.fmap.geom.jts.MCoordinate; |
... | ... | |
67 | 73 |
*/ |
68 | 74 |
public class JTSUtils { |
69 | 75 |
|
76 |
public static final Logger logger = LoggerFactory.getLogger(JTSUtils.class); |
|
77 |
|
|
70 | 78 |
public static final com.vividsolutions.jts.geom.GeometryFactory factory = |
71 | 79 |
new com.vividsolutions.jts.geom.GeometryFactory(); |
72 | 80 |
|
... | ... | |
271 | 279 |
* @param coordinates |
272 | 280 |
* @param interiorRings |
273 | 281 |
* @return |
282 |
* @throws GeometryException |
|
274 | 283 |
*/ |
275 | 284 |
public static com.vividsolutions.jts.geom.Polygon createJTSPolygon(ArrayListCoordinateSequence coordinates, |
276 | 285 |
List<Ring> interiorRings) { |
277 | 286 |
LinearRing shell = factory.createLinearRing(coordinates); |
278 |
List<LinearRing> holes = new ArrayList<LinearRing>(interiorRings.size());
|
|
279 |
for (Iterator iterator = interiorRings.iterator(); iterator.hasNext();) {
|
|
280 |
Ring ring = (Ring) iterator.next();
|
|
281 |
holes.add((LinearRing) ((GeometryJTS)ring).getJTS());
|
|
287 |
LinearRing[] holes = new LinearRing[interiorRings.size()];
|
|
288 |
for(int i=0; i<interiorRings.size(); i++){
|
|
289 |
Ring ring = interiorRings.get(i);
|
|
290 |
holes[i] = (LinearRing) ((GeometryJTS) ring).getJTS();
|
|
282 | 291 |
} |
283 |
return factory.createPolygon(shell, holes.toArray(new LinearRing[holes.size()]));
|
|
292 |
return factory.createPolygon(shell, holes); |
|
284 | 293 |
} |
285 | 294 |
|
286 | 295 |
public static com.vividsolutions.jts.geom.MultiPolygon createJTSMultiPolygon(com.vividsolutions.jts.geom.Polygon[] polygons){ |
287 | 296 |
return factory.createMultiPolygon(polygons); |
288 | 297 |
} |
289 | 298 |
|
299 |
/** |
|
300 |
* Returns the intersection point between an ellipse and her minor axis. |
|
301 |
* |
|
302 |
* @param init |
|
303 |
* @param middle |
|
304 |
* @param end |
|
305 |
* @return |
|
306 |
*/ |
|
307 |
public static Coordinate getPointAtYAxisInEllipse(Point init, Point end, Double ydist) { |
|
308 |
|
|
309 |
LineSegment segment = new LineSegment(((PointJTS) init).getJTSCoordinate(), |
|
310 |
((PointJTS) end).getJTSCoordinate()); |
|
311 |
Coordinate middle = segment.midPoint(); |
|
312 |
|
|
313 |
LineSegment midSegment = new LineSegment(middle, ((PointJTS) end).getJTSCoordinate()); |
|
314 |
double modulus = midSegment.getLength(); |
|
315 |
|
|
316 |
//Mayor axis unitary vector |
|
317 |
Coordinate uni = new Coordinate(middle.x+((end.getX()-middle.x)/modulus), middle.y+((end.getY()-middle.y)/modulus)); |
|
318 |
//Minor axis unitary vector |
|
319 |
Coordinate perpUni = new Coordinate(-uni.y,uni.x); |
|
320 |
|
|
321 |
|
|
322 |
Coordinate point = new Coordinate(middle.x+(perpUni.x*ydist), middle.y+(perpUni.y*ydist)); |
|
323 |
|
|
324 |
return point; |
|
325 |
} |
|
326 |
|
|
327 |
/** |
|
328 |
* Returns the middle point between two points. |
|
329 |
* |
|
330 |
* @param init |
|
331 |
* @param middle |
|
332 |
* @param end |
|
333 |
* @return |
|
334 |
*/ |
|
335 |
public static Coordinate getMidPoint(Point init, Point end) { |
|
336 |
|
|
337 |
LineSegment segment = new LineSegment(((PointJTS) init).getJTSCoordinate(), |
|
338 |
((PointJTS) end).getJTSCoordinate()); |
|
339 |
Coordinate middle = segment.midPoint(); |
|
340 |
return middle; |
|
341 |
} |
|
342 |
|
|
343 |
|
|
290 | 344 |
} |
Also available in: Unified diff