Package org.geotools.data.ogr.jni

Source Code of org.geotools.data.ogr.jni.JniOGR

package org.geotools.data.ogr.jni;

import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;

import org.gdal.gdal.gdal;
import org.gdal.ogr.DataSource;
import org.gdal.ogr.Driver;
import org.gdal.ogr.Feature;
import org.gdal.ogr.FeatureDefn;
import org.gdal.ogr.FieldDefn;
import org.gdal.ogr.Geometry;
import org.gdal.ogr.Layer;
import org.gdal.ogr.ogr;
import org.gdal.osr.SpatialReference;
import org.geotools.data.ogr.OGR;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import static org.gdal.ogr.ogrConstants.*;

public class JniOGR implements OGR {
   
    static {
        // perform OGR format registration once
        if (ogr.GetDriverCount() == 0) {
            ogr.RegisterAll();
        }
    }
    Vector<String> vector(String[] opts) {
        return opts != null && opts.length > 0 ? new Vector<String>(Arrays.asList(opts)) : null;
    }

    @Override
    public int GetDriverCount() {
        return ogr.GetDriverCount();
    }
   
    @Override
    public Object GetDriver(int i) {
        return ogr.GetDriver(i);
    }
   
    @Override
    public Object GetDriverByName(String name) {
        return ogr.GetDriverByName(name);
    }
   
    @Override
    public Object OpenShared(String dataSourceName, int mode) {
        return ogr.OpenShared(dataSourceName, mode);
    }
   
    @Override
    public Object Open(String dataSourceName, int mode) {
        return ogr.Open(dataSourceName, mode);
    }
   
    @Override
    public void CheckError(int code) throws IOException {
        if (code == OGRERR_NONE) {
            return;
        }
       
        String error = GetLastErrorMsg();

        switch (code) {
        case OGRERR_CORRUPT_DATA:
            throw new IOException("OGR reported a currupt data error: " + error);
        case OGRERR_FAILURE:
            throw new IOException("OGR reported a generic failure: " + error);
        //case OGRERR_INVALID_HANDLE:
        //    throw new IOException("OGR reported an invalid handle error: " + error);
        case OGRERR_NOT_ENOUGH_DATA:
            throw new IOException("OGR reported not enough data was provided in the last call: " + error);
        case OGRERR_NOT_ENOUGH_MEMORY:
            throw new IOException("OGR reported not enough memory is available: " + error);
        case OGRERR_UNSUPPORTED_GEOMETRY_TYPE:
            throw new IOException("OGR reported a unsupported geometry type error: " + error);
        case OGRERR_UNSUPPORTED_OPERATION:
            throw new IOException("OGR reported a unsupported operation error: " + error);
        case OGRERR_UNSUPPORTED_SRS:
            throw new IOException("OGR reported a unsupported SRS error: " + error);
        default:
            throw new IOException("OGR reported an unrecognized error code: " + code);
        }
   
    }
   
    @Override
    public String GetLastErrorMsg() {
        return gdal.GetLastErrorMsg();
    }

    @Override
    public String DriverGetName(Object driver) {
        return ((Driver)driver).GetName();
    }
   
    @Override
    public Object DriverOpen(Object driver, String dataSourceName, int mode) {
        return ((Driver)driver).Open(dataSourceName, mode);
    }
   
    @Override
    public Object DriverCreateDataSource(Object driver, String dataSourceName,
            String[] opts) {
        return ((Driver)driver).CreateDataSource(dataSourceName, vector(opts));
    }
   
    @Override
    public void DriverRelease(Object driver) {
        ((Driver)driver).delete();
    }
   
    @Override
    public Object DataSourceGetDriver(Object dataSource) {
        return ((DataSource)dataSource).GetDriver();
    }
   
    @Override
    public int DataSourceGetLayerCount(Object dataSource) {
        return ((DataSource)dataSource).GetLayerCount();
    }
   
    @Override
    public Object DataSourceGetLayer(Object dataSource, int i) {
        return ((DataSource)dataSource).GetLayer(i);
    }
   
    @Override
    public Object DataSourceGetLayerByName(Object dataSource, String name) {
        return ((DataSource)dataSource).GetLayerByName(name);
    }
   
    @Override
    public void DataSourceRelease(Object dataSource) {
        //if (dataSource != null)
        ((DataSource)dataSource).delete();
    }

    @Override
    public Object DataSourceCreateLayer(Object dataSource, String name,
            Object srs, long geomType, String[] opts) {

        return ((DataSource)dataSource)
            .CreateLayer(name, (SpatialReference)srs, (int)geomType, vector(opts));
    }
   
    @Override
    public Object DataSourceExecuteSQL(Object dataSource, String sql,
            Object spatialFilter) {
        return ((DataSource)dataSource).ExecuteSQL(sql, (Geometry)spatialFilter);
    }
   
    @Override
    public Object LayerGetLayerDefn(Object layer) {
        return ((Layer)layer).GetLayerDefn();
    }
   
    @Override
    public int LayerGetFieldCount(Object layerDefn) {
        return ((FeatureDefn)layerDefn).GetFieldCount();
    }
   
    @Override
    public Object LayerGetFieldDefn(Object layerDefn, int i) {
        return ((FeatureDefn)layerDefn).GetFieldDefn(i);
    }
   
    @Override
    public String LayerGetName(Object layer) {
        return ((Layer)layer).GetName();
    }
   
    @Override
    public long LayerGetGeometryType(Object layerDefn) {
        return ((FeatureDefn)layerDefn).GetGeomType();
    }
   
    @Override
    public Object LayerGetSpatialRef(Object layer) {
        return ((Layer)layer).GetSpatialRef();
    }
   
    @Override
    public Object LayerGetExtent(Object layer) {
        return ((Layer)layer).GetExtent();
    }
   
    @Override
    public long LayerGetFeatureCount(Object layer) {
        return ((Layer)layer).GetFeatureCount();
    }
   
    @Override
    public void LayerRelease(Object layer) {
        //if (layer != null)
        ((Layer)layer).delete();
    }
   
    @Override
    public void LayerReleaseLayerDefn(Object layerDefn) {
        ((FeatureDefn)layerDefn).delete();
    }
   
    @Override
    public boolean LayerCanDeleteFeature(Object layer) {
        return ((Layer)layer).TestCapability(OLCDeleteFeature);
       
    }
   
    @Override
    public boolean LayerCanWriteRandom(Object layer) {
        return ((Layer)layer).TestCapability(OLCRandomWrite);
    }
   
    @Override
    public boolean LayerCanWriteSequential(Object layer) {
        return ((Layer)layer).TestCapability(OLCSequentialWrite);
    }
   
    @Override
    public boolean LayerCanCreateField(Object layer) {
        return ((Layer)layer).TestCapability(OLCCreateField);
    }
   
    @Override
    public boolean LayerCanIgnoreFields(Object layer) {
        return ((Layer)layer).TestCapability(OLCIgnoreFields);
    }
   
    @Override
    public void LayerCreateField(Object layer, Object fieldDefn, int approx) {
        ((Layer)layer).CreateField((FieldDefn)fieldDefn, approx);
    }
   
    @Override
    public void LayerSyncToDisk(Object layer) {
        ((Layer)layer).SyncToDisk();
    }
   
    @Override
    public Object LayerNewFeature(Object layerDefn) {
        return new Feature((FeatureDefn)layerDefn);
    }
   
    @Override
    public ReferencedEnvelope toEnvelope(Object extent, CoordinateReferenceSystem crs) {
        double[] d = (double[])extent;
        return new ReferencedEnvelope(d[0], d[1], d[2], d[3], crs);
    }
   
    @Override
    public void LayerSetSpatialFilter(Object layer, Object geometry) {
        ((Layer)layer).SetSpatialFilter((Geometry) geometry);
    }
   
    @Override
    public void LayerSetAttributeFilter(Object layer, String attFilter) {
        ((Layer)layer).SetAttributeFilter(attFilter);
    }
   
    @Override
    public int LayerSetIgnoredFields(Object layer, String[] fields) {
        return ((Layer)layer).SetIgnoredFields(vector(fields));
    }
   
    @Override
    public void LayerResetReading(Object layer) {
        ((Layer)layer).ResetReading();
    }
   
    @Override
    public Object LayerGetNextFeature(Object layer) {
        return ((Layer)layer).GetNextFeature();
    }
   
    @Override
    public boolean LayerDeleteFeature(Object layer, long fid) {
        return ((Layer)layer).DeleteFeature((int) fid) == 0;
    }
   
    @Override
    public int LayerSetFeature(Object layer, Object feature) {
        return ((Layer)layer).SetFeature((Feature) feature);
    }
   
    @Override
    public int LayerCreateFeature(Object layer, Object feature) {
        return ((Layer)layer).CreateFeature((Feature) feature);
    }
   
    @Override
    public String LayerGetFIDColumnName(Object layer) {
        return ((Layer)layer).GetFIDColumn();
    }
   
    @Override
    public String FieldGetName(Object field) {
        return ((FieldDefn)field).GetName();
    }
   
    @Override
    public long FieldGetType(Object field) {
        return ((FieldDefn)field).GetFieldType();
    }
   
    @Override
    public int FieldGetWidth(Object field) {
        return ((FieldDefn)field).GetWidth();
    }
   
    @Override
    public void FieldSetWidth(Object field, int width) {
        ((FieldDefn)field).SetWidth(width);
    }
   
    @Override
    public void FieldSetJustifyRight(Object field) {
        ((FieldDefn)field).SetJustify(OJRight);
    }
   
    @Override
    public void FieldSetPrecision(Object field, int precision) {
        ((FieldDefn)field).SetPrecision(precision);
    }
   
    @Override
    public boolean FieldIsIntegerType(long type) {
        return type == OFTInteger;
    }
   
    @Override
    public boolean FieldIsRealType(long type) {
        return type == OFTReal;
    }
   
    @Override
    public boolean FieldIsBinaryType(long type) {
        return type == OFTBinary;
    }
   
    @Override
    public boolean FieldIsDateType(long type) {
        return type == OFTDate;
    }
   
    @Override
    public boolean FieldIsTimeType(long type) {
        return type == OFTTime;
    }
   
    @Override
    public boolean FieldIsDateTimeType(long type) {
        return type == OFTDateTime;
    }
   
    @Override
    public boolean FieldIsIntegerListType(long type) {
        return type == OFTIntegerList;
    }
   
    @Override
    public boolean FieldIsRealListType(long type) {
        return type == OFTRealList;
    }
   
    @Override
    public Object CreateStringField(String name) {
        return new FieldDefn(name, OFTString);
    }
   
    @Override
    public Object CreateIntegerField(String name) {
        return new FieldDefn(name, OFTInteger);
    }
   
    @Override
    public Object CreateRealField(String name) {
        return new FieldDefn(name, OFTReal);
    }
   
    @Override
    public Object CreateBinaryField(String name) {
        return new FieldDefn(name, OFTBinary);
    }
   
    @Override
    public Object CreateDateField(String name) {
        return new FieldDefn(name, OFTDate);
    }
   
    @Override
    public Object CreateTimeField(String name) {
        return new FieldDefn(name, OFTTime);
    }
   
    @Override
    public Object CreateDateTimeField(String name) {
        return new FieldDefn(name, OFTDateTime);
    }
   
    @Override
    public long FeatureGetFID(Object feature) {
        return ((Feature)feature).GetFID();
    }
   
    @Override
    public boolean FeatureIsFieldSet(Object feature, int i) {
        return ((Feature)feature).IsFieldSet(i);
    }
   
    @Override
    public void FeatureSetGeometryDirectly(Object feature, Object geometry) {
        ((Feature)feature).SetGeometryDirectly((Geometry) geometry);
    }
   
    @Override
    public Object FeatureGetGeometry(Object feature) {
        return ((Feature)feature).GetGeometryRef();
    }
   
    @Override
    public void FeatureUnsetField(Object feature, int i) {
        ((Feature)feature).UnsetField(i);
    }
   
    @Override
    public void FeatureSetFieldInteger(Object feature, int field, int value) {
        ((Feature)feature).SetField(field, value);
    }
   
    @Override
    public void FeatureSetFieldDouble(Object feature, int field, double value) {
        ((Feature)feature).SetField(field, value);
    }
   
    @Override
    public void FeatureSetFieldBinary(Object feature, int field, int length,  byte[] value) {
        //TODO: doesn't seem to be available in the api?
        //((Feature)feature).SetFieldBinary()
    }
   
    @Override
    public void FeatureSetFieldDateTime(Object feature, int field, int year,
            int month, int day, int hour, int minute, int second, int tz) {
        ((Feature)feature).SetField(field, year, month, day, hour, minute, second, tz);
    }
   
    @Override
    public void FeatureSetFieldString(Object feature, int field, String str) {
        ((Feature)feature).SetField(field, str);
    }
   
    @Override
    public String FeatureGetFieldAsString(Object feature, int i) {
        return ((Feature)feature).GetFieldAsString(i);
    }
   
    @Override
    public int FeatureGetFieldAsInteger(Object feature, int i) {
        return ((Feature)feature).GetFieldAsInteger(i);
    }
   
    @Override
    public double FeatureGetFieldAsDouble(Object feature, int i) {
        return ((Feature)feature).GetFieldAsDouble(i);
    }
   
    @Override
    public void FeatureGetFieldAsDateTime(Object feature, int i, int[] year,
            int[] month, int[] day, int[] hour, int[] minute, int[] second,
            int[] tzFlag) {
        ((Feature)feature).GetFieldAsDateTime(i, year, month, day, hour, minute, second, tzFlag);
    }
   
    @Override
    public void FeatureDestroy(Object feature) {
        ((Feature)feature).delete();
    }
   
    @Override
    public long GetPointType() {
        return wkbPoint;
    }
   
    @Override
    public long GetPoint25DType() {
        return wkbPoint25D;
    }
   
    @Override
    public long GetLinearRingType() {
        return wkbLinearRing;
    }
   
    @Override
    public long GetLineStringType() {
        return wkbLineString;
    }
   
    @Override
    public long GetLineString25DType() {
        return wkbLineString25D;
    }
   
    @Override
    public long GetPolygonType() {
        return wkbPolygon;
    }
   
    @Override
    public long GetPolygon25DType() {
        return wkbPolygon25D;
    }
   
    @Override
    public long GetMultiPointType() {
        return wkbMultiPoint;
    }
   
    @Override
    public long GetMultiLineStringType() {
        return wkbMultiPoint25D;
    }
   
    @Override
    public long GetMultiLineString25DType() {
        return wkbMultiLineString25D;
    }
   
    @Override
    public long GetMultiPolygonType() {
        return wkbMultiPolygon;
    }
   
    @Override
    public long GetMultiPolygon25DType() {
        return wkbMultiPolygon25D;
    }
   
    @Override
    public long GetGeometryCollectionType() {
        return wkbGeometryCollection;
    }
   
    @Override
    public long GetGeometryCollection25DType() {
        return wkbGeometryCollection25D;
    }
   
    @Override
    public long GetGeometryNoneType() {
        return wkbNone;
    }
   
    @Override
    public long GetGeometryUnknownType() {
        return wkbUnknown;
    }
   
    @Override
    public int GeometryGetWkbSize(Object geom) {
        return ((Geometry)geom).WkbSize();
    }
   
    @Override
    public int GeometryExportToWkb(Object geom, byte[] wkb) {
        return ((Geometry)geom).ExportToWkb(wkb, wkbXDR);
    }
   
    @Override
    public Object GeometryCreateFromWkb(byte[] wkb, int[] ret) {
        return Geometry.CreateFromWkb(wkb);
    }
   
    @Override
    public String GeometryExportToWkt(Object geom, int[] ret) {
        return ((Geometry)geom).ExportToWkt();
    }
   
    @Override
    public Object GeometryCreateFromWkt(String wkt, int[] ret) {
        return Geometry.CreateFromWkt(wkt);
    }
   
    @Override
    public void GeometryDestroy(Object geometry) {
        ((Geometry)geometry).delete();
    }
   
    @Override
    public String SpatialRefGetAuthorityCode(Object spatialRef, String authority) {
        return ((SpatialReference)spatialRef).GetAuthorityCode(authority);
    }
   
    @Override
    public String SpatialRefExportToWkt(Object spatialRef) {
        return ((SpatialReference)spatialRef).ExportToWkt();
    }
   
    @Override
    public void SpatialRefRelease(Object spatialRef) {
        ((SpatialReference)spatialRef).delete();
    }
   
    @Override
    public Object NewSpatialRef(String wkt) {
        return new SpatialReference(wkt);
    }

    public static void main(String[] args) throws Exception {
        ogr.RegisterAll();
        DataSource ds = ogr.Open("/Users/jdeolive/Projects/geotools/git/modules/library/sample-data/src/main/resources/org/geotools/test-data/shapes/statepop.shp");
       
        double[] d = ds.GetLayer(0).GetExtent();
        System.out.println(d);
    }
}
TOP

Related Classes of org.geotools.data.ogr.jni.JniOGR

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.