From 4df3a3e0e9bfcd64a3e2eb85e0d4449d7b8f4f6e Mon Sep 17 00:00:00 2001 From: Daniel Wiesmann Date: Mon, 1 Dec 2014 16:32:40 +0100 Subject: [PATCH] Added GDAL prototypes for raster support Refs #23804. --- AUTHORS | 1 + .../contrib/gis/gdal/prototypes/generation.py | 5 +- django/contrib/gis/gdal/prototypes/raster.py | 56 +++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 django/contrib/gis/gdal/prototypes/raster.py diff --git a/AUTHORS b/AUTHORS index e9e2a597b3..6bd44281c7 100644 --- a/AUTHORS +++ b/AUTHORS @@ -168,6 +168,7 @@ answer newbie questions, and generally made Django that much better: Daniel Poelzleithner Daniel Pyrathon Daniel Roseman + Daniel Wiesmann Danilo Bargen Dan Johnson Dan Poirier diff --git a/django/contrib/gis/gdal/prototypes/generation.py b/django/contrib/gis/gdal/prototypes/generation.py index 3d2e3046c8..69477ba044 100644 --- a/django/contrib/gis/gdal/prototypes/generation.py +++ b/django/contrib/gis/gdal/prototypes/generation.py @@ -130,9 +130,10 @@ def void_output(func, argtypes, errcheck=True): return func -def voidptr_output(func, argtypes): +def voidptr_output(func, argtypes, errcheck=True): "For functions that return c_void_p." func.argtypes = argtypes func.restype = c_void_p - func.errcheck = check_pointer + if errcheck: + func.errcheck = check_pointer return func diff --git a/django/contrib/gis/gdal/prototypes/raster.py b/django/contrib/gis/gdal/prototypes/raster.py new file mode 100644 index 0000000000..991e3c6ef0 --- /dev/null +++ b/django/contrib/gis/gdal/prototypes/raster.py @@ -0,0 +1,56 @@ +""" +This module houses the ctypes function prototypes for GDAL DataSource (raster) +related data structures. +""" +from ctypes import c_char_p, c_double, c_int, c_void_p, POINTER +from django.contrib.gis.gdal.libgdal import lgdal +from django.contrib.gis.gdal.prototypes.generation import (const_string_output, + double_output, int_output, void_output, voidptr_output) + +# For more detail about c function names and definitions see +# http://gdal.org/gdal_8h.html +# http://gdal.org/gdalwarper_8h.html + +### Raster Driver Routines ### +register_all = void_output(lgdal.GDALAllRegister, []) +get_driver = voidptr_output(lgdal.GDALGetDriver, [c_int]) +get_driver_by_name = voidptr_output(lgdal.GDALGetDriverByName, [c_char_p], errcheck=False) +get_driver_count = int_output(lgdal.GDALGetDriverCount, []) +get_driver_description = const_string_output(lgdal.GDALGetDescription, [c_void_p]) + +### Raster Data Source Routines ### +create_ds = voidptr_output(lgdal.GDALCreate, [c_void_p, c_char_p, c_int, c_int, c_int, c_int]) +open_ds = voidptr_output(lgdal.GDALOpen, [c_char_p, c_int]) +close_ds = void_output(lgdal.GDALClose, [c_void_p]) +copy_ds = voidptr_output(lgdal.GDALCreateCopy, [c_void_p, c_char_p, c_void_p, c_int, + POINTER(c_char_p), c_void_p, c_void_p]) +add_band_ds = void_output(lgdal.GDALAddBand, [c_void_p, c_int]) +get_ds_description = const_string_output(lgdal.GDALGetDescription, []) +get_ds_driver = voidptr_output(lgdal.GDALGetDatasetDriver, [c_void_p]) +get_ds_xsize = int_output(lgdal.GDALGetRasterXSize, [c_void_p]) +get_ds_ysize = int_output(lgdal.GDALGetRasterYSize, [c_void_p]) +get_ds_raster_count = int_output(lgdal.GDALGetRasterCount, [c_void_p]) +get_ds_raster_band = voidptr_output(lgdal.GDALGetRasterBand, [c_void_p, c_int]) +get_ds_projection_ref = const_string_output(lgdal.GDALGetProjectionRef, [c_void_p]) +set_ds_projection_ref = void_output(lgdal.GDALSetProjection, [c_void_p, c_char_p]) +get_ds_geotransform = void_output(lgdal.GDALGetGeoTransform, [c_void_p, POINTER(c_double * 6)], errcheck=False) +set_ds_geotransform = void_output(lgdal.GDALSetGeoTransform, [c_void_p, POINTER(c_double * 6)]) + +### Raster Band Routines ### +band_io = void_output(lgdal.GDALRasterIO, [c_void_p, c_int, c_int, c_int, c_int, c_int, + c_void_p, c_int, c_int, c_int, c_int, c_int]) +get_band_xsize = int_output(lgdal.GDALGetRasterBandXSize, [c_void_p]) +get_band_ysize = int_output(lgdal.GDALGetRasterBandYSize, [c_void_p]) +get_band_index = int_output(lgdal.GDALGetBandNumber, [c_void_p]) +get_band_description = const_string_output(lgdal.GDALGetDescription, [c_void_p]) +get_band_ds = voidptr_output(lgdal.GDALGetBandDataset, [c_void_p]) +get_band_datatype = int_output(lgdal.GDALGetRasterDataType, [c_void_p]) +get_band_nodata_value = double_output(lgdal.GDALGetRasterNoDataValue, [c_void_p, POINTER(c_int)]) +set_band_nodata_value = void_output(lgdal.GDALSetRasterNoDataValue, [c_void_p, c_double]) +get_band_minimum = double_output(lgdal.GDALGetRasterMinimum, [c_void_p]) +get_band_maximum = double_output(lgdal.GDALGetRasterMaximum, [c_void_p]) + +### Reprojection routine ### +reproject_image = void_output(lgdal.GDALReprojectImage, [c_void_p, c_char_p, c_void_p, c_char_p, + c_int, c_double, c_double, + c_void_p, c_void_p, c_void_p])