Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

raster.py 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """
  2. This module houses the ctypes function prototypes for GDAL DataSource (raster)
  3. related data structures.
  4. """
  5. from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_void_p
  6. from functools import partial
  7. from django.contrib.gis.gdal.libgdal import GDAL_VERSION, std_call
  8. from django.contrib.gis.gdal.prototypes.generation import (
  9. chararray_output, const_string_output, double_output, int_output,
  10. void_output, voidptr_output,
  11. )
  12. # For more detail about c function names and definitions see
  13. # http://gdal.org/gdal_8h.html
  14. # http://gdal.org/gdalwarper_8h.html
  15. # http://www.gdal.org/gdal__utils_8h.html
  16. # Prepare partial functions that use cpl error codes
  17. void_output = partial(void_output, cpl=True)
  18. const_string_output = partial(const_string_output, cpl=True)
  19. double_output = partial(double_output, cpl=True)
  20. # Raster Driver Routines
  21. register_all = void_output(std_call('GDALAllRegister'), [], errcheck=False)
  22. get_driver = voidptr_output(std_call('GDALGetDriver'), [c_int])
  23. get_driver_by_name = voidptr_output(std_call('GDALGetDriverByName'), [c_char_p], errcheck=False)
  24. get_driver_count = int_output(std_call('GDALGetDriverCount'), [])
  25. get_driver_description = const_string_output(std_call('GDALGetDescription'), [c_void_p])
  26. # Raster Data Source Routines
  27. create_ds = voidptr_output(std_call('GDALCreate'), [c_void_p, c_char_p, c_int, c_int, c_int, c_int, c_void_p])
  28. open_ds = voidptr_output(std_call('GDALOpen'), [c_char_p, c_int])
  29. close_ds = void_output(std_call('GDALClose'), [c_void_p], errcheck=False)
  30. flush_ds = int_output(std_call('GDALFlushCache'), [c_void_p])
  31. copy_ds = voidptr_output(
  32. std_call('GDALCreateCopy'),
  33. [c_void_p, c_char_p, c_void_p, c_int, POINTER(c_char_p), c_void_p, c_void_p]
  34. )
  35. add_band_ds = void_output(std_call('GDALAddBand'), [c_void_p, c_int])
  36. get_ds_description = const_string_output(std_call('GDALGetDescription'), [c_void_p])
  37. get_ds_driver = voidptr_output(std_call('GDALGetDatasetDriver'), [c_void_p])
  38. get_ds_xsize = int_output(std_call('GDALGetRasterXSize'), [c_void_p])
  39. get_ds_ysize = int_output(std_call('GDALGetRasterYSize'), [c_void_p])
  40. get_ds_raster_count = int_output(std_call('GDALGetRasterCount'), [c_void_p])
  41. get_ds_raster_band = voidptr_output(std_call('GDALGetRasterBand'), [c_void_p, c_int])
  42. get_ds_projection_ref = const_string_output(std_call('GDALGetProjectionRef'), [c_void_p])
  43. set_ds_projection_ref = void_output(std_call('GDALSetProjection'), [c_void_p, c_char_p])
  44. get_ds_geotransform = void_output(std_call('GDALGetGeoTransform'), [c_void_p, POINTER(c_double * 6)], errcheck=False)
  45. set_ds_geotransform = void_output(std_call('GDALSetGeoTransform'), [c_void_p, POINTER(c_double * 6)])
  46. get_ds_metadata = chararray_output(std_call('GDALGetMetadata'), [c_void_p, c_char_p], errcheck=False)
  47. set_ds_metadata = void_output(std_call('GDALSetMetadata'), [c_void_p, POINTER(c_char_p), c_char_p])
  48. if GDAL_VERSION >= (1, 11):
  49. get_ds_metadata_domain_list = chararray_output(std_call('GDALGetMetadataDomainList'), [c_void_p], errcheck=False)
  50. else:
  51. get_ds_metadata_domain_list = None
  52. get_ds_metadata_item = const_string_output(std_call('GDALGetMetadataItem'), [c_void_p, c_char_p, c_char_p])
  53. set_ds_metadata_item = const_string_output(std_call('GDALSetMetadataItem'), [c_void_p, c_char_p, c_char_p, c_char_p])
  54. free_dsl = void_output(std_call('CSLDestroy'), [POINTER(c_char_p)], errcheck=False)
  55. if GDAL_VERSION >= (2, 1):
  56. get_ds_info = const_string_output(std_call('GDALInfo'), [c_void_p, c_void_p])
  57. else:
  58. get_ds_info = None
  59. # Raster Band Routines
  60. band_io = void_output(
  61. std_call('GDALRasterIO'),
  62. [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]
  63. )
  64. get_band_xsize = int_output(std_call('GDALGetRasterBandXSize'), [c_void_p])
  65. get_band_ysize = int_output(std_call('GDALGetRasterBandYSize'), [c_void_p])
  66. get_band_index = int_output(std_call('GDALGetBandNumber'), [c_void_p])
  67. get_band_description = const_string_output(std_call('GDALGetDescription'), [c_void_p])
  68. get_band_ds = voidptr_output(std_call('GDALGetBandDataset'), [c_void_p])
  69. get_band_datatype = int_output(std_call('GDALGetRasterDataType'), [c_void_p])
  70. get_band_color_interp = int_output(std_call('GDALGetRasterColorInterpretation'), [c_void_p])
  71. get_band_nodata_value = double_output(std_call('GDALGetRasterNoDataValue'), [c_void_p, POINTER(c_int)])
  72. set_band_nodata_value = void_output(std_call('GDALSetRasterNoDataValue'), [c_void_p, c_double])
  73. if GDAL_VERSION >= (2, 1):
  74. delete_band_nodata_value = void_output(std_call('GDALDeleteRasterNoDataValue'), [c_void_p])
  75. else:
  76. delete_band_nodata_value = None
  77. get_band_statistics = void_output(
  78. std_call('GDALGetRasterStatistics'),
  79. [
  80. c_void_p, c_int, c_int, POINTER(c_double), POINTER(c_double),
  81. POINTER(c_double), POINTER(c_double), c_void_p, c_void_p,
  82. ],
  83. )
  84. compute_band_statistics = void_output(
  85. std_call('GDALComputeRasterStatistics'),
  86. [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double), POINTER(c_double), c_void_p, c_void_p],
  87. )
  88. # Reprojection routine
  89. reproject_image = void_output(
  90. std_call('GDALReprojectImage'),
  91. [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]
  92. )
  93. auto_create_warped_vrt = voidptr_output(
  94. std_call('GDALAutoCreateWarpedVRT'),
  95. [c_void_p, c_char_p, c_char_p, c_int, c_double, c_void_p]
  96. )
  97. # Create VSI gdal raster files from in-memory buffers.
  98. # http://gdal.org/cpl__vsi_8h.html
  99. create_vsi_file_from_mem_buffer = voidptr_output(std_call('VSIFileFromMemBuffer'), [c_char_p, c_void_p, c_int, c_int])
  100. get_mem_buffer_from_vsi_file = voidptr_output(std_call('VSIGetMemFileBuffer'), [c_char_p, POINTER(c_int), c_bool])
  101. unlink_vsi_file = int_output(std_call('VSIUnlink'), [c_char_p])