use of org.gdal.ogr.Layer in project com.revolsys.open by revolsys.
the class OgrRecordStore method newLayerRecordDefinition.
private RecordDefinition newLayerRecordDefinition(final DataSource dataSource, final RecordDefinition sourceRecordDefinition) {
final PathName typePath = sourceRecordDefinition.getPathName();
final String name = typePath.getName();
final PathName parentPath = typePath.getParent();
final RecordStoreSchema schema = getSchema(parentPath);
Layer layer;
if (sourceRecordDefinition.hasGeometryField()) {
final GeometryFactory geometryFactory = sourceRecordDefinition.getGeometryFactory();
final FieldDefinition geometryField = sourceRecordDefinition.getGeometryField();
final int geometryFieldType = getGeometryFieldType(geometryFactory, geometryField);
final SpatialReference spatialReference = Gdal.getSpatialReference(geometryFactory);
layer = dataSource.CreateLayer(typePath.getPath(), spatialReference, geometryFieldType);
} else {
layer = dataSource.CreateLayer(name);
}
if (dataSource.TestCapability(ogrConstants.ODsCCreateLayer) == false) {
System.err.println("CreateLayer not supported by driver.");
}
return newLayerRecordDefinition(schema, layer);
}
use of org.gdal.ogr.Layer in project com.revolsys.open by revolsys.
the class OgrRecordWriter method getLayer.
protected Layer getLayer(final RecordDefinition recordDefinition) {
final String typePath = recordDefinition.getPath();
final String layerName = this.recordStore.getLayerName(typePath);
final Layer layer = this.dataSource.GetLayer(layerName);
return layer;
}
use of org.gdal.ogr.Layer in project com.revolsys.open by revolsys.
the class OgrRecordWriter method delete.
private void delete(final Record record) {
final RecordDefinition recordDefinition = record.getRecordDefinition();
final Layer layer = getLayer(recordDefinition);
final String driverName = this.recordStore.getDriverName();
if (OgrRecordStore.SQLITE.equals(driverName) || OgrRecordStore.GEO_PAKCAGE.equals(driverName)) {
final Integer fid = record.getInteger(OgrRecordStore.ROWID);
if (fid != null) {
layer.DeleteFeature(fid);
}
}
}
use of org.gdal.ogr.Layer in project com.revolsys.open by revolsys.
the class OgrRecordStore method refreshSchemaElements.
@Override
protected synchronized Map<PathName, ? extends RecordStoreSchemaElement> refreshSchemaElements(final RecordStoreSchema schema) {
final Map<PathName, RecordStoreSchemaElement> elementsByPath = new TreeMap<>();
if (!isClosed()) {
final DataSource dataSource = getDataSource();
if (dataSource != null) {
for (int layerIndex = 0; layerIndex < dataSource.GetLayerCount(); layerIndex++) {
final Layer layer = dataSource.GetLayer(layerIndex);
if (layer != null) {
try {
final RecordDefinitionImpl recordDefinition = newLayerRecordDefinition(schema, layer);
final PathName typePath = recordDefinition.getPathName();
final String layerName = layer.GetName();
this.layerNameToPathMap.put(layerName.toUpperCase(), typePath);
this.pathToLayerNameMap.put(typePath, layerName);
elementsByPath.put(typePath, recordDefinition);
} finally {
layer.delete();
}
}
}
}
}
return elementsByPath;
}
use of org.gdal.ogr.Layer in project com.revolsys.open by revolsys.
the class OgrRecordStore method closeDo.
public void closeDo() {
synchronized (this) {
if (!isClosed()) {
if (this.dataSource != null) {
try {
for (final Layer layer : this.layersToClose) {
this.dataSource.ReleaseResultSet(layer);
}
this.layersToClose.clear();
this.dataSource.delete();
} finally {
this.dataSource = null;
super.close();
}
}
}
}
}
Aggregations