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);
}
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;
}
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;
}
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);
}
}
}
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;
}
Aggregations