From 9789467fb349a9e0da5bffe3681293469141c2d2 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Tue, 01 Nov 2011 01:18:52 +0800 Subject: [PATCH] Symbol with Polygon --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java | 3 ++- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletions(-) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java index 471694c..9505fb3 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java @@ -1,7 +1,11 @@ package com.ximple.eofms.filter; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateArrays; +import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; +import com.vividsolutions.jts.geom.Point; import com.ximple.eofms.util.*; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; @@ -18,6 +22,7 @@ import org.opengis.feature.simple.SimpleFeatureType; import javax.swing.event.EventListenerList; +import java.awt.geom.AffineTransform; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; @@ -87,6 +92,46 @@ } else { gobj = txtElement.toGeometry(geometryFactory); } + + if (gobj instanceof Point) { + Coordinate p = gobj.getCoordinate(); + double width = txtElement.getTextWidth(); + double height = txtElement.getTextHeight(); + + AffineTransform at = new AffineTransform(); + at.translate(width, height); + at.setToRotation(angle, p.x, p.y); + at.scale(1, 1); + + Envelope envelope = new Envelope(p); + envelope.expandBy(width / 2, height / 2); + + double[] srcPt = new double[8]; + double[] dstPt = new double[8]; + srcPt[0] = envelope.getMinX(); + srcPt[1] = envelope.getMinY(); + srcPt[2] = envelope.getMinX(); + srcPt[3] = envelope.getMaxY(); + srcPt[4] = envelope.getMaxX(); + srcPt[5] = envelope.getMaxY(); + srcPt[6] = envelope.getMaxX(); + srcPt[7] = envelope.getMinY(); + + at.transform(srcPt, 0, dstPt, 0, 4); + + Coordinate[] coords = new Coordinate[4]; + for (int i = 0; i < 4; i++) { + coords[i] = new Coordinate(dstPt[i*2], dstPt[i*2+1]); + } + int srid = gobj.getSRID(); + gobj = geometryFactory.createPolygon(geometryFactory.createLinearRing(coords), null); + if (gobj.getSRID() != srid) { + gobj.setSRID(srid); + } + } else { + gobj = null; + } + if (gobj != null) feature = SimpleFeatureBuilder.build(featureType, new Object[]{ gobj, diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java index 028aa86..9e31c73 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java @@ -422,7 +422,8 @@ // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Point.class, notAllowNull)); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( - "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID)))); + // "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID)))); + "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, notAllowNull, lookupCRS(defaultSRID)))); // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull)); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( -- Gitblit v0.0.0-SNAPSHOT