Search in sources :

Example 36 with GeometryFactory

use of com.revolsys.geometry.model.GeometryFactory in project com.revolsys.open by revolsys.

the class EsriGeodatabaseXmlRecordWriter method writeDataElement.

private void writeDataElement(final RecordDefinition recordDefinition, final Geometry geometry) {
    final String dataElementType;
    final FieldDefinition geometryField = recordDefinition.getGeometryField();
    boolean hasGeometry = false;
    DataType geometryDataType = null;
    if (geometryField != null) {
        geometryDataType = geometryField.getDataType();
        if (this.fieldTypes.getFieldType(geometryDataType) != null) {
            hasGeometry = true;
            if (geometryDataType.equals(DataTypes.POINT)) {
                this.geometryType = GEOMETRY_TYPE_POINT;
            } else if (geometryDataType.equals(DataTypes.MULTI_POINT)) {
                this.geometryType = GEOMETRY_TYPE_MULTI_POINT;
            } else if (geometryDataType.equals(DataTypes.LINE_STRING)) {
                this.geometryType = GEOMETRY_TYPE_POLYLINE;
            } else if (geometryDataType.equals(DataTypes.MULTI_LINE_STRING)) {
                this.geometryType = GEOMETRY_TYPE_POLYLINE;
            } else if (geometryDataType.equals(DataTypes.POLYGON)) {
                this.geometryType = GEOMETRY_TYPE_POLYGON;
            } else {
                if (geometry instanceof Point) {
                    this.geometryType = GEOMETRY_TYPE_POINT;
                } else if (geometry instanceof Punctual) {
                    this.geometryType = GEOMETRY_TYPE_MULTI_POINT;
                } else if (geometry instanceof Lineal) {
                    this.geometryType = GEOMETRY_TYPE_POLYLINE;
                } else if (geometry instanceof Polygon) {
                    this.geometryType = GEOMETRY_TYPE_POLYGON;
                } else {
                    hasGeometry = false;
                }
            }
        }
    }
    if (hasGeometry) {
        dataElementType = DATA_ELEMENT_FEATURE_CLASS;
        this.datasetType = DATASET_TYPE_FEATURE_CLASS;
    } else {
        dataElementType = DATA_ELEMENT_TABLE;
        this.datasetType = DATASET_TYPE_TABLE;
    }
    this.out.startTag(DATA_ELEMENT);
    this.out.attribute(XsiConstants.TYPE, dataElementType);
    final String path = recordDefinition.getPath();
    final String localName = PathUtil.getName(path);
    this.out.element(CATALOG_PATH, "/FC=" + localName);
    this.out.element(NAME, localName);
    this.out.element(METADATA_RETRIEVED, true);
    this.out.startTag(METADATA);
    this.out.attribute(XsiConstants.TYPE, XML_PROPERTY_SET_TYPE);
    this.out.startTag(XML_DOC);
    this.out.text("<?xml version=\"1.0\"?>");
    this.out.text("<metadata xml:lang=\"en\">");
    this.out.text("<Esri>");
    this.out.text("<MetaID>{");
    this.out.text(UUID.randomUUID().toString().toUpperCase());
    this.out.text("}</MetaID>");
    this.out.text("<CreaDate>");
    final Timestamp date = new Timestamp(System.currentTimeMillis());
    this.out.text(Dates.format("yyyyMMdd", date));
    this.out.text("</CreaDate>");
    this.out.text("<CreaTime>");
    this.out.text(Dates.format("HHmmssSS", date));
    this.out.text("</CreaTime>");
    this.out.text("<SyncOnce>TRUE</SyncOnce>");
    this.out.text("</Esri>");
    this.out.text("</metadata>");
    this.out.endTag(XML_DOC);
    this.out.endTag(METADATA);
    this.out.element(DATASET_TYPE, this.datasetType);
    this.out.element(DSID, this.datasetId++);
    this.out.element(VERSIONED, false);
    this.out.element(CAN_VERSION, false);
    this.out.element(HAS_OID, true);
    this.out.element(OBJECT_ID_FIELD_NAME, "OBJECTID");
    writeFields(recordDefinition);
    this.out.element(CLSID, "{52353152-891A-11D0-BEC6-00805F7C4268}");
    this.out.emptyTag(EXTCLSID);
    this.out.startTag(RELATIONSHIP_CLASS_NAMES);
    this.out.attribute(XsiConstants.TYPE, NAMES_TYPE);
    this.out.endTag(RELATIONSHIP_CLASS_NAMES);
    this.out.element(ALIAS_NAME, localName);
    this.out.emptyTag(MODEL_NAME);
    this.out.element(HAS_GLOBAL_ID, false);
    this.out.emptyTag(GLOBAL_ID_FIELD_NAME);
    this.out.emptyTag(RASTER_FIELD_NAME);
    this.out.startTag(EXTENSION_PROPERTIES);
    this.out.attribute(XsiConstants.TYPE, PROPERTY_SET_TYPE);
    this.out.startTag(PROPERTY_ARRAY);
    this.out.attribute(XsiConstants.TYPE, PROPERTY_ARRAY_TYPE);
    this.out.endTag(PROPERTY_ARRAY);
    this.out.endTag(EXTENSION_PROPERTIES);
    this.out.startTag(CONTROLLER_MEMBERSHIPS);
    this.out.attribute(XsiConstants.TYPE, CONTROLLER_MEMBERSHIPS_TYPE);
    this.out.endTag(CONTROLLER_MEMBERSHIPS);
    if (hasGeometry) {
        this.out.element(FEATURE_TYPE, FEATURE_TYPE_SIMPLE);
        this.out.element(SHAPE_TYPE, this.geometryType);
        this.out.element(SHAPE_FIELD_NAME, geometryField.getName());
        final GeometryFactory geometryFactory = geometryField.getProperty(FieldProperties.GEOMETRY_FACTORY);
        this.out.element(HAS_M, false);
        this.out.element(HAS_Z, geometryFactory.hasZ());
        this.out.element(HAS_SPATIAL_INDEX, false);
        this.out.emptyTag(AREA_FIELD_NAME);
        this.out.emptyTag(LENGTH_FIELD_NAME);
        writeExtent(geometryFactory);
        writeSpatialReference(geometryFactory);
    }
    this.out.endTag(DATA_ELEMENT);
}
Also used : Punctual(com.revolsys.geometry.model.Punctual) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) Lineal(com.revolsys.geometry.model.Lineal) FieldDefinition(com.revolsys.record.schema.FieldDefinition) DataType(com.revolsys.datatype.DataType) Point(com.revolsys.geometry.model.Point) Polygon(com.revolsys.geometry.model.Polygon) Timestamp(java.sql.Timestamp)

Example 37 with GeometryFactory

use of com.revolsys.geometry.model.GeometryFactory in project com.revolsys.open by revolsys.

the class DirectoryRecordWriter method getWriter.

private Writer<Record> getWriter(final Record record) {
    final RecordDefinition recordDefinition = record.getRecordDefinition();
    final String path = recordDefinition.getPath();
    Writer<Record> writer = this.writers.get(path);
    if (writer == null) {
        final File directory = getDirectory(recordDefinition);
        directory.mkdirs();
        final String fileName = getFileName(recordDefinition);
        final File file = new File(directory, fileName + this.nameSuffix + "." + this.fileExtension);
        final PathResource resource = new PathResource(file);
        writer = RecordWriter.newRecordWriter(recordDefinition, resource);
        if (writer == null) {
            throw new IllegalArgumentException("Unable to create writer for " + resource);
        } else {
            final Map<String, Object> properties = getProperties();
            writer.setProperties(properties);
            final Geometry geometry = record.getGeometry();
            if (geometry != null) {
                final GeometryFactory geometryFactory = geometry.getGeometryFactory();
                setProperty(IoConstants.GEOMETRY_FACTORY, geometryFactory);
            }
            this.writers.put(path, writer);
            RecordDefinition writerRecordDefinition = recordDefinition;
            if (writer instanceof AbstractRecordWriter) {
                final AbstractRecordWriter recordWriter = (AbstractRecordWriter) writer;
                writerRecordDefinition = recordWriter.getRecordDefinition();
                if (writerRecordDefinition == null) {
                    writerRecordDefinition = recordDefinition;
                }
            }
            this.recordDefinitionMap.put(path, writerRecordDefinition);
        }
    }
    return writer;
}
Also used : Geometry(com.revolsys.geometry.model.Geometry) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) AbstractRecordWriter(com.revolsys.io.AbstractRecordWriter) PathResource(com.revolsys.spring.resource.PathResource) Record(com.revolsys.record.Record) File(java.io.File) RecordDefinition(com.revolsys.record.schema.RecordDefinition)

Example 38 with GeometryFactory

use of com.revolsys.geometry.model.GeometryFactory in project com.revolsys.open by revolsys.

the class EsriXmlRecordDefinitionUtil method newDETable.

public static DETable newDETable(final RecordDefinition recordDefinition, final SpatialReference spatialReference, final boolean createLengthField, final boolean createAreaField) {
    final String typePath = recordDefinition.getPath();
    String schemaPath = PathUtil.getPath(typePath).replaceAll("/", "\\\\");
    final FieldDefinition geometryField = recordDefinition.getGeometryField();
    boolean hasGeometry = false;
    DataType geometryDataType = null;
    GeometryType shapeType = null;
    if (geometryField != null) {
        if (spatialReference == null) {
            throw new IllegalArgumentException("A Geometry Factory with a coordinate system must be specified.");
        }
        geometryDataType = geometryField.getDataType();
        if (FIELD_TYPES.getFieldType(geometryDataType) != null) {
            hasGeometry = true;
            // TODO Z,m
            if (geometryDataType.equals(DataTypes.POINT)) {
                shapeType = GeometryType.esriGeometryPoint;
            } else if (geometryDataType.equals(DataTypes.MULTI_POINT)) {
                shapeType = GeometryType.esriGeometryMultipoint;
            } else if (geometryDataType.equals(DataTypes.LINE_STRING)) {
                shapeType = GeometryType.esriGeometryPolyline;
            } else if (geometryDataType.equals(DataTypes.LINEAR_RING)) {
                shapeType = GeometryType.esriGeometryPolyline;
            } else if (geometryDataType.equals(DataTypes.MULTI_LINE_STRING)) {
                shapeType = GeometryType.esriGeometryPolyline;
            } else if (geometryDataType.equals(DataTypes.POLYGON)) {
                shapeType = GeometryType.esriGeometryPolygon;
            } else if (geometryDataType.equals(DataTypes.MULTI_POLYGON)) {
                shapeType = GeometryType.esriGeometryPolygon;
            } else {
                throw new IllegalArgumentException("Unable to detect geometry type");
            }
        }
    }
    final List<FieldDefinition> fieldDefinitions = new ArrayList<>(recordDefinition.getFields());
    final String path = recordDefinition.getPath();
    final String name = PathUtil.getName(path);
    DETable table;
    if (hasGeometry) {
        final DEFeatureClass featureClass = new DEFeatureClass();
        table = featureClass;
        featureClass.setShapeType(shapeType);
        final String geometryFieldName = geometryField.getName();
        featureClass.setShapeFieldName(geometryFieldName);
        final GeometryFactory geometryFactory = spatialReference.getGeometryFactory();
        featureClass.setSpatialReference(spatialReference);
        featureClass.setHasM(geometryFactory.hasM());
        featureClass.setHasZ(geometryFactory.hasZ());
        final EnvelopeN envelope = new EnvelopeN(spatialReference);
        featureClass.setExtent(envelope);
        final Class<?> geometryClass = geometryDataType.getJavaClass();
        if (!Punctual.class.isAssignableFrom(geometryClass)) {
            final LengthFieldName lengthFieldNameProperty = LengthFieldName.getProperty(recordDefinition);
            String lengthFieldName = lengthFieldNameProperty.getFieldName();
            if (createLengthField) {
                if (!Property.hasValue(lengthFieldName)) {
                    lengthFieldName = geometryFieldName + "_Length";
                    lengthFieldNameProperty.setFieldName(lengthFieldName);
                }
                if (!recordDefinition.hasField(lengthFieldName)) {
                    fieldDefinitions.add(new FieldDefinition(lengthFieldName, DataTypes.DOUBLE, true));
                }
            }
            featureClass.setLengthFieldName(lengthFieldName);
            if (!Lineal.class.isAssignableFrom(geometryClass)) {
                final AreaFieldName areaFieldNameProperty = AreaFieldName.getProperty(recordDefinition);
                String areaFieldName = areaFieldNameProperty.getFieldName();
                if (createAreaField) {
                    if (!Property.hasValue(areaFieldName)) {
                        areaFieldName = geometryFieldName + "_Area";
                        areaFieldNameProperty.setFieldName(areaFieldName);
                    }
                    if (!recordDefinition.hasField(areaFieldName)) {
                        fieldDefinitions.add(new FieldDefinition(areaFieldName, DataTypes.DOUBLE, true));
                    }
                }
                featureClass.setAreaFieldName(areaFieldName);
            }
        }
    } else {
        table = new DETable();
        schemaPath = "\\";
    }
    String oidFieldName = recordDefinition.getProperty(EsriGeodatabaseXmlConstants.ESRI_OBJECT_ID_FIELD_NAME);
    if (!Property.hasValue(oidFieldName)) {
        oidFieldName = "OBJECTID";
    }
    final String catalogPath;
    if (schemaPath.equals("\\")) {
        catalogPath = "\\" + name;
    } else {
        catalogPath = schemaPath + "\\" + name;
    }
    table.setCatalogPath(catalogPath);
    table.setName(name);
    table.setHasOID(true);
    table.setOIDFieldName(oidFieldName);
    addObjectIdField(table);
    final FieldDefinition idField = recordDefinition.getIdField();
    for (final FieldDefinition fieldDefinition : fieldDefinitions) {
        if (fieldDefinition == geometryField) {
            addGeometryField(shapeType, table, fieldDefinition);
        } else {
            final String fieldName = fieldDefinition.getName();
            if (!fieldName.equals(oidFieldName)) {
                final Field field = addField(table, fieldDefinition);
                if (idField == fieldDefinition) {
                    table.addIndex(field, true, fieldName + "_PK");
                }
            }
        }
    }
    table.setAliasName(name);
    return table;
}
Also used : GeometryFactory(com.revolsys.geometry.model.GeometryFactory) LengthFieldName(com.revolsys.record.property.LengthFieldName) FieldDefinition(com.revolsys.record.schema.FieldDefinition) ArrayList(java.util.ArrayList) GeometryType(com.revolsys.record.io.format.esri.gdb.xml.model.enums.GeometryType) Punctual(com.revolsys.geometry.model.Punctual) Lineal(com.revolsys.geometry.model.Lineal) DataType(com.revolsys.datatype.DataType) AreaFieldName(com.revolsys.record.property.AreaFieldName)

Example 39 with GeometryFactory

use of com.revolsys.geometry.model.GeometryFactory in project com.revolsys.open by revolsys.

the class SaifReader method open.

/**
 * Open a SAIF archive, extracting compressed archives to a temporary
 * directory.
 */
@Override
public void open() {
    if (!this.opened) {
        this.opened = true;
        try {
            if (log.isDebugEnabled()) {
                log.debug("Opening SAIF archive '" + this.file.getCanonicalPath() + "'");
            }
            if (this.file.isDirectory()) {
                this.saifArchiveDirectory = this.file;
            } else if (!this.file.exists()) {
                throw new IllegalArgumentException("SAIF file " + this.file + " does not exist");
            } else {
                this.zipFile = new ZipFile(this.file);
            }
            if (log.isDebugEnabled()) {
                log.debug("  Finished opening archive");
            }
            loadSchema();
            loadExportedObjects();
            loadSrid();
            final GeometryFactory geometryFactory = GeometryFactory.fixed3d(this.srid, 1.0, 1.0, 1.0);
            for (final RecordDefinition recordDefinition : ((RecordDefinitionFactoryImpl) this.recordDefinitionFactory).getRecordDefinitions()) {
                final FieldDefinition geometryField = recordDefinition.getGeometryField();
                if (geometryField != null) {
                    geometryField.setProperty(FieldProperties.GEOMETRY_FACTORY, geometryFactory);
                }
            }
        } catch (final IOException e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }
}
Also used : RecordDefinitionFactoryImpl(com.revolsys.record.schema.RecordDefinitionFactoryImpl) GeometryFactory(com.revolsys.geometry.model.GeometryFactory) ZipFile(java.util.zip.ZipFile) FieldDefinition(com.revolsys.record.schema.FieldDefinition) IOException(java.io.IOException) RecordDefinition(com.revolsys.record.schema.RecordDefinition)

Example 40 with GeometryFactory

use of com.revolsys.geometry.model.GeometryFactory in project com.revolsys.open by revolsys.

the class ShapefileGeometryHandler method getShapeType.

public int getShapeType(final Geometry geometry) {
    if (geometry != null) {
        final GeometryFactory geometryFactory = geometry.getGeometryFactory();
        final DataType dataType = geometry.getDataType();
        return getShapeType(geometryFactory, dataType);
    }
    return ShapefileConstants.NULL_SHAPE;
}
Also used : GeometryFactory(com.revolsys.geometry.model.GeometryFactory) DataType(com.revolsys.datatype.DataType)

Aggregations

GeometryFactory (com.revolsys.geometry.model.GeometryFactory)360 Point (com.revolsys.geometry.model.Point)142 Geometry (com.revolsys.geometry.model.Geometry)72 BoundingBox (com.revolsys.geometry.model.BoundingBox)70 LineString (com.revolsys.geometry.model.LineString)61 ArrayList (java.util.ArrayList)45 DataType (com.revolsys.datatype.DataType)25 FieldDefinition (com.revolsys.record.schema.FieldDefinition)24 Polygon (com.revolsys.geometry.model.Polygon)22 List (java.util.List)18 RecordDefinition (com.revolsys.record.schema.RecordDefinition)17 Test (org.junit.Test)16 CoordinateSystem (com.revolsys.geometry.cs.CoordinateSystem)15 Vertex (com.revolsys.geometry.model.vertex.Vertex)14 Record (com.revolsys.record.Record)14 IOException (java.io.IOException)13 PathName (com.revolsys.io.PathName)12 LinearRing (com.revolsys.geometry.model.LinearRing)10 PointDoubleXY (com.revolsys.geometry.model.impl.PointDoubleXY)10 QuadEdgeDelaunayTinBuilder (com.revolsys.elevation.tin.quadedge.QuadEdgeDelaunayTinBuilder)8