package com.ximple.eofms.util; import java.util.ArrayList; import java.util.TreeMap; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.MultiPoint; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.geotools.feature.AttributeTypeBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.referencing.CRS; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.AttributeType; import org.opengis.feature.type.GeometryType; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.MathTransform; public final class FeatureTypeBuilderUtil { protected static final String DEFAULTNAMESPACE = "http://www.ximple.com.tw/tpc/"; private static final Logger LOGGER = LogManager.getLogger(FeatureTypeBuilderUtil.class); private static boolean notAllowNull = false; private static boolean allowNull = true; public static boolean isNotAllowNull() { return notAllowNull; } public static void setNotAllowNull(boolean notAllowNull) { FeatureTypeBuilderUtil.notAllowNull = notAllowNull; } protected static AttributeType createAttributeType(String name, Class clazz, boolean isNillable) { AttributeTypeBuilder attrBuilder = new AttributeTypeBuilder(); attrBuilder.setName(name); attrBuilder.setBinding(clazz); attrBuilder.setNillable(isNillable); return attrBuilder.buildType(); } protected static GeometryType createGeometryType(AttributeTypeBuilder attrBuilder, String name, Class clazz, boolean isNillable, CoordinateReferenceSystem crs) { return createGeometryType(attrBuilder, name, clazz, isNillable, crs, null); } protected static GeometryType createGeometryType(AttributeTypeBuilder attrBuilder, String name, Class clazz, boolean isNillable, CoordinateReferenceSystem crs, Object defaultValue) { attrBuilder.setName(name); attrBuilder.setBinding(clazz); attrBuilder.setNillable(isNillable); if (defaultValue != null) attrBuilder.setDefaultValue(defaultValue); if (crs != null) attrBuilder.setCRS(crs); return attrBuilder.buildGeometryType(); } protected static AttributeType createAttributeType(AttributeTypeBuilder attrBuilder, String name, Class clazz, boolean isNillable) { attrBuilder.setName(name); attrBuilder.setBinding(clazz); attrBuilder.setNillable(isNillable); return attrBuilder.buildType(); } protected static AttributeType createAttributeType(AttributeTypeBuilder attrBuilder, String name, Class clazz, boolean isNillable, Object defaultValue) { attrBuilder.setName(name); attrBuilder.setBinding(clazz); attrBuilder.setNillable(isNillable); attrBuilder.setDefaultValue(defaultValue); return attrBuilder.buildType(); } protected static AttributeType createAttributeType(AttributeTypeBuilder attrBuilder, String name, Class clazz, boolean isNillable, int len, Object defaultValue) { attrBuilder.setName(name); attrBuilder.setBinding(clazz); attrBuilder.setNillable(isNillable); attrBuilder.setLength(len); attrBuilder.setDefaultValue(defaultValue); return attrBuilder.buildType(); } public static SimpleFeatureTypeBuilder createNormalPointFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); // typeBuilder.add("geom", Point.class, -1); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PointType", Point.class, false, lookupCRS(defaultSRID)))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "font", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "just", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "height", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "width", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "angle", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "context", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 254, ""))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createNormalLineFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "LineType", LineString.class, true, lookupCRS(defaultSRID)))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createNormalMultiLineFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, true, lookupCRS(defaultSRID)))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createNormalPolygonFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true, lookupCRS(defaultSRID)))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createNormalArcFeatureTypeBuilder(String featureName) { return createNormalLineFeatureTypeBuilder(featureName); } public static SimpleFeatureTypeBuilder createNormalEllipseFeatureTypeBuilder(String featureName) { return createNormalPolygonFeatureTypeBuilder(featureName); } public static SimpleFeatureTypeBuilder createNormalIndexFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "x1", createAttributeType(attrBuilder, "DoubleType", Double.class, notAllowNull, 1, 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "y1", createAttributeType(attrBuilder, "DoubleType", Double.class, notAllowNull, 1, 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "x2", createAttributeType(attrBuilder, "DoubleType", Double.class, notAllowNull, 1, 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "y2", createAttributeType(attrBuilder, "DoubleType", Double.class, notAllowNull, 1, 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tpclid", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createNormalIndexTextFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PointType", Point.class, true, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "just", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "height", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "width", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "angle", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tpclid", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createPointFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "just", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "height", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "width", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "angle", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "context", createAttributeType(attrBuilder, "StringType", String.class, allowNull, 254, ""))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createSymbolFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "just", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "height", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "width", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "angle", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symbol", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 20))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "origin", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID)))); typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createPolygonFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createLineFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "LineStringType", LineString.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createMultiLineFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } public static SimpleFeatureTypeBuilder createEllipseFeatureTypeBuilder(String featureName) { return createPolygonFeatureTypeBuilder(featureName); } public static SimpleFeatureTypeBuilder createArcFeatureTypeBuilder(String featureName) { return createLineFeatureTypeBuilder(featureName); } public static SimpleFeatureTypeBuilder createMultiSymbolFeatureTypeBuilder(String featureName) { SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); // .build(featureName); typeBuilder.setName(featureName); typeBuilder.setNamespaceURI(DEFAULTNAMESPACE); AttributeTypeBuilder attrBuilder; ArrayList attrDescs = new ArrayList(); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "geom", createGeometryType(attrBuilder, "MultiPointType", MultiPoint.class, notAllowNull, lookupCRS(defaultSRID)))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "did", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "tid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "oid", createAttributeType(attrBuilder, "LongType", Long.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "cid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "lid", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "level", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "dyncolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); */ attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symcolor", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 12, ""))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symweight", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symstyle", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "just", createAttributeType(attrBuilder, "ShortType", Short.class, notAllowNull, 1, (short) 0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "height", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "width", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 1.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "angle", createAttributeType(attrBuilder, "FloatType", Float.class, notAllowNull, 1, (float) 0.0))); attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "symbol", createAttributeType(attrBuilder, "StringType", String.class, notAllowNull, 20))); /* attrBuilder = new AttributeTypeBuilder(); attrDescs.add(attrBuilder.buildDescriptor( "fowner", createAttributeType(attrBuilder, "IntegerType", Integer.class, allowNull, 1, -1))); */ typeBuilder.addAll(attrDescs); return typeBuilder; } static int defaultSRID = 3826; static TreeMap crsMap = null; static TreeMap geometryConverterMap = null; static void initializeFactories() { try { crsMap = new TreeMap(); CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326"); crsMap.put(4326, wgs84); CoordinateReferenceSystem epsg3825 = CRS.decode("EPSG:3825"); // TWD97-ZONE 119 crsMap.put(3825, epsg3825); CoordinateReferenceSystem epsg3826 = CRS.decode("EPSG:3826"); // TWD97-ZONE 121 crsMap.put(3826, epsg3826); CoordinateReferenceSystem epsg3827 = CRS.decode("EPSG:3827"); // TWD67-ZONE 119 crsMap.put(3827, epsg3827); CoordinateReferenceSystem epsg3828 = CRS.decode("EPSG:3828"); // TWD67-ZONE 121 crsMap.put(3828, epsg3828); } catch (FactoryException e) { LOGGER.warn(e.getMessage(), e); } geometryConverterMap = new TreeMap(); geometryConverterMap.put(3825, new EPSG3825GeometryConverterDecorator()); geometryConverterMap.put(3826, new EPSG3826GeometryConverterDecorator()); } public static CoordinateReferenceSystem lookupCRS(int SRID) { if (crsMap == null) initializeFactories(); return crsMap.get(SRID); } public static GeometryConverterDecorator lookupGeometryConverter(int SRID) { if (crsMap == null) initializeFactories(); return geometryConverterMap.get(SRID); } public static GeometryConverterDecorator lookupDefaultGeometryConverter() { return lookupGeometryConverter(defaultSRID); } public static int getDefaultFeatureSRID() { return defaultSRID; } public static void setDefaultFeatureSRID(int SRID) { initializeFactories(); defaultSRID = SRID; } public static MathTransform getTWD67ToTWD97Zone191Transform() throws FactoryException { CoordinateReferenceSystem sourceCRS = lookupCRS(3827); CoordinateReferenceSystem targetCRS = lookupCRS(3825); MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true); return transform; } public static MathTransform getTWD67ToTWD97Zone121Transform() throws FactoryException { CoordinateReferenceSystem sourceCRS = lookupCRS(3828); CoordinateReferenceSystem targetCRS = lookupCRS(3826); MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true); // Geometry targetGeometry = JTS.transform( sourceGeometry, transform); return transform; } }