/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2007-2012, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.data.ogr;
import java.io.IOException;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
* Encapsulates calls to the OGR library.
* <p>
* </p>
*
* @author Justin Deoliveira, OpenGeo
*/
public interface OGR {
//
// Global
//
int GetDriverCount();
Object GetDriver(int i);
Object GetDriverByName(String name);
Object OpenShared(String dataSourceName, int mode);
Object Open(String dataSourceName, int mode);
/**
* Checks the ogr error status code and throws java exceptions accordingly.
*
* @param code The ogr error code.
* @throws IOException
*/
void CheckError(int code) throws IOException;
String GetLastErrorMsg();
//
//Driver
//
String DriverGetName(Object driver);
Object DriverOpen(Object driver, String dataSourceName, int mode);
Object DriverCreateDataSource(Object driver, String dataSourceName, String[] opts);
void DriverRelease(Object driver);
//
// DataSource
//
Object DataSourceGetDriver(Object dataSource);
int DataSourceGetLayerCount(Object dataSource);
Object DataSourceGetLayer(Object dataSource, int i);
Object DataSourceGetLayerByName(Object dataSource, String name);
void DataSourceRelease(Object dataSource);
Object DataSourceCreateLayer(Object dataSource, String name, Object spatialReference,
long geomType, String[] opts);
Object DataSourceExecuteSQL(Object dataSource, String sql, Object spatialFilter);
//
// Layer
//
Object LayerGetLayerDefn(Object layer);
int LayerGetFieldCount(Object layerDefn);
Object LayerGetFieldDefn(Object layerDefn, int i);
String LayerGetName(Object layer);
long LayerGetGeometryType(Object layerDefn);
Object LayerGetSpatialRef(Object layer);
Object LayerGetExtent(Object layer);
long LayerGetFeatureCount(Object layer);
void LayerRelease(Object layer);
void LayerReleaseLayerDefn(Object layerDefn);
boolean LayerCanDeleteFeature(Object layer);
boolean LayerCanWriteRandom(Object layer);
boolean LayerCanWriteSequential(Object layer);
boolean LayerCanCreateField(Object layer);
boolean LayerCanIgnoreFields(Object layer);
void LayerCreateField(Object layer, Object fieldDefn, int approx);
void LayerSyncToDisk(Object layer);
Object LayerNewFeature(Object layerDefn);
ReferencedEnvelope toEnvelope(Object extent, CoordinateReferenceSystem crs);
void LayerSetSpatialFilter(Object layer, Object geometry);
void LayerSetAttributeFilter(Object layer, String attFilter);
int LayerSetIgnoredFields(Object layer, String[] fields);
void LayerResetReading(Object layer);
Object LayerGetNextFeature(Object layer);
boolean LayerDeleteFeature(Object layer, long fid);
int LayerSetFeature(Object layer, Object feature);
int LayerCreateFeature(Object layer, Object feature);
String LayerGetFIDColumnName(Object layer);
//
// Field
//
String FieldGetName(Object field);
long FieldGetType(Object field);
int FieldGetWidth(Object field);
void FieldSetWidth(Object field, int width);
void FieldSetJustifyRight(Object field);
void FieldSetPrecision(Object field, int precision);
boolean FieldIsIntegerType(long type);
boolean FieldIsRealType(long type);
boolean FieldIsBinaryType(long type);
boolean FieldIsDateType(long type);
boolean FieldIsTimeType(long type);
boolean FieldIsDateTimeType(long type);
boolean FieldIsIntegerListType(long type);
boolean FieldIsRealListType(long type);
Object CreateStringField(String name);
Object CreateIntegerField(String name);
Object CreateRealField(String name);
Object CreateBinaryField(String name);
Object CreateDateField(String name);
Object CreateTimeField(String name);
Object CreateDateTimeField(String name);
//
// Feature
//
long FeatureGetFID(Object feature);
boolean FeatureIsFieldSet(Object feature, int i);
void FeatureSetGeometryDirectly(Object feature, Object geometry);
Object FeatureGetGeometry(Object feature);
void FeatureUnsetField(Object feature, int i);
void FeatureSetFieldInteger(Object feature, int field, int value);
void FeatureSetFieldDouble(Object feature, int field, double value);
void FeatureSetFieldBinary(Object feature, int field, int length, byte[] value);
void FeatureSetFieldDateTime(Object feature, int field, int year, int month,
int day, int hour, int minute, int second, int tz);
void FeatureSetFieldString(Object feature, int field, String str);
String FeatureGetFieldAsString(Object feature, int i);
int FeatureGetFieldAsInteger(Object feature, int i);
double FeatureGetFieldAsDouble(Object feature, int i);
void FeatureGetFieldAsDateTime(Object feature, int i, int[] year, int[] month, int[] day,
int[] hour, int[] minute, int[] second, int[] tzFlag);
void FeatureDestroy(Object feature);
//
// Geometry
//
long GetPointType();
long GetPoint25DType();
long GetLinearRingType();
long GetLineStringType();
long GetLineString25DType();
long GetPolygonType();
long GetPolygon25DType();
long GetMultiPointType();
long GetMultiLineStringType();
long GetMultiLineString25DType();
long GetMultiPolygonType();
long GetMultiPolygon25DType();
long GetGeometryCollectionType();
long GetGeometryCollection25DType();
long GetGeometryNoneType();
long GetGeometryUnknownType();
int GeometryGetWkbSize(Object geom);
int GeometryExportToWkb(Object geom, byte[] wkb);
Object GeometryCreateFromWkb(byte[] wkb, int[] ret);
String GeometryExportToWkt(Object geom, int[] ret);
Object GeometryCreateFromWkt(String wkt, int[] ret);
void GeometryDestroy(Object geometry);
//
// SpatialReference
//
String SpatialRefGetAuthorityCode(Object spatialRef, String authority);
String SpatialRefExportToWkt(Object spatialRef);
void SpatialRefRelease(Object spatialRef);
Object NewSpatialRef(String wkt);
}