Loading django/contrib/gis/gdal/field.py +19 −3 Original line number Diff line number Diff line Loading @@ -49,8 +49,11 @@ class Field(GDALBase): "Retrieves the Field's value as a double (float)." return capi.get_field_as_double(self._feat.ptr, self._index) def as_int(self): def as_int(self, is_64=False): "Retrieves the Field's value as an integer." if is_64: return capi.get_field_as_integer64(self._feat.ptr, self._index) else: return capi.get_field_as_integer(self._feat.ptr, self._index) def as_string(self): Loading Loading @@ -106,6 +109,7 @@ class Field(GDALBase): # ### The Field sub-classes for each OGR Field type. ### class OFTInteger(Field): _double = False _bit64 = False @property def value(self): Loading @@ -115,7 +119,7 @@ class OFTInteger(Field): # read as a double and cast as Python int (to prevent overflow). return int(self.as_double()) else: return self.as_int() return self.as_int(self._bit64) @property def type(self): Loading Loading @@ -185,6 +189,10 @@ class OFTTime(Field): return None class OFTInteger64(OFTInteger): _bit64 = True # List fields are also just subclasses class OFTIntegerList(Field): pass Loading @@ -201,6 +209,11 @@ class OFTStringList(Field): class OFTWideStringList(Field): pass class OFTInteger64List(Field): pass # Class mapping dictionary for OFT Types and reverse mapping. OGRFieldTypes = { 0: OFTInteger, Loading @@ -215,5 +228,8 @@ OGRFieldTypes = { 9: OFTDate, 10: OFTTime, 11: OFTDateTime, # New 64-bit integer types in GDAL 2 12: OFTInteger64, 13: OFTInteger64List, } ROGRFieldTypes = {cls: num for num, cls in OGRFieldTypes.items()} django/contrib/gis/gdal/prototypes/ds.py +5 −3 Original line number Diff line number Diff line Loading @@ -6,10 +6,10 @@ from ctypes import POINTER, c_char_p, c_double, c_int, c_long, c_void_p from django.contrib.gis.gdal.envelope import OGREnvelope from django.contrib.gis.gdal.libgdal import lgdal from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal from django.contrib.gis.gdal.prototypes.generation import ( const_string_output, double_output, geom_output, int_output, srs_output, void_output, voidptr_output, const_string_output, double_output, geom_output, int64_output, int_output, srs_output, void_output, voidptr_output, ) c_int_p = POINTER(c_int) # shortcut type Loading Loading @@ -66,6 +66,8 @@ get_field_as_datetime = int_output(lgdal.OGR_F_GetFieldAsDateTime, ) get_field_as_double = double_output(lgdal.OGR_F_GetFieldAsDouble, [c_void_p, c_int]) get_field_as_integer = int_output(lgdal.OGR_F_GetFieldAsInteger, [c_void_p, c_int]) if GDAL_VERSION >= (2, 0): get_field_as_integer64 = int64_output(lgdal.OGR_F_GetFieldAsInteger64, [c_void_p, c_int]) get_field_as_string = const_string_output(lgdal.OGR_F_GetFieldAsString, [c_void_p, c_int]) get_field_index = int_output(lgdal.OGR_F_GetFieldIndex, [c_void_p, c_char_p]) Loading django/contrib/gis/gdal/prototypes/generation.py +8 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ from ctypes import c_char_p, c_double, c_int, c_void_p from ctypes import c_char_p, c_double, c_int, c_int64, c_void_p from functools import partial from django.contrib.gis.gdal.prototypes.errcheck import ( Loading Loading @@ -56,6 +56,13 @@ def int_output(func, argtypes): return func def int64_output(func, argtypes): "Generates a ctypes function that returns a 64-bit integer value." func.argtypes = argtypes func.restype = c_int64 return func def srs_output(func, argtypes): """ Generates a ctypes prototype for the given function with Loading django/contrib/gis/gdal/prototypes/raster.py +5 −2 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ related data structures. from ctypes import POINTER, c_char_p, c_double, c_int, c_void_p from functools import partial from django.contrib.gis.gdal.libgdal import std_call from django.contrib.gis.gdal.libgdal import GDAL_VERSION, std_call from django.contrib.gis.gdal.prototypes.generation import ( const_string_output, double_output, int_output, void_output, voidptr_output, Loading @@ -30,6 +30,9 @@ get_driver_description = const_string_output(std_call('GDALGetDescription'), [c_ # Raster Data Source Routines create_ds = voidptr_output(std_call('GDALCreate'), [c_void_p, c_char_p, c_int, c_int, c_int, c_int, c_void_p]) open_ds = voidptr_output(std_call('GDALOpen'), [c_char_p, c_int]) if GDAL_VERSION >= (2, 0): close_ds = voidptr_output(std_call('GDALClose'), [c_void_p]) else: close_ds = void_output(std_call('GDALClose'), [c_void_p]) flush_ds = int_output(std_call('GDALFlushCache'), [c_void_p]) copy_ds = voidptr_output(std_call('GDALCreateCopy'), Loading django/contrib/gis/utils/ogrinspect.py +4 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,8 @@ models for GeoDjango and/or mapping dictionaries for use with the """ from django.contrib.gis.gdal import DataSource from django.contrib.gis.gdal.field import ( OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime, OFTDate, OFTDateTime, OFTInteger, OFTInteger64, OFTReal, OFTString, OFTTime, ) from django.utils import six from django.utils.six.moves import zip Loading Loading @@ -195,6 +196,8 @@ def _ogrinspect(data_source, model_name, geom_name='geom', layer_key=0, srid=Non yield ' %s = models.FloatField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTInteger: yield ' %s = models.IntegerField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTInteger64: yield ' %s = models.BigIntegerField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTString: yield ' %s = models.CharField(max_length=%s%s)' % (mfield, width, kwargs_str) elif field_type is OFTDate: Loading Loading
django/contrib/gis/gdal/field.py +19 −3 Original line number Diff line number Diff line Loading @@ -49,8 +49,11 @@ class Field(GDALBase): "Retrieves the Field's value as a double (float)." return capi.get_field_as_double(self._feat.ptr, self._index) def as_int(self): def as_int(self, is_64=False): "Retrieves the Field's value as an integer." if is_64: return capi.get_field_as_integer64(self._feat.ptr, self._index) else: return capi.get_field_as_integer(self._feat.ptr, self._index) def as_string(self): Loading Loading @@ -106,6 +109,7 @@ class Field(GDALBase): # ### The Field sub-classes for each OGR Field type. ### class OFTInteger(Field): _double = False _bit64 = False @property def value(self): Loading @@ -115,7 +119,7 @@ class OFTInteger(Field): # read as a double and cast as Python int (to prevent overflow). return int(self.as_double()) else: return self.as_int() return self.as_int(self._bit64) @property def type(self): Loading Loading @@ -185,6 +189,10 @@ class OFTTime(Field): return None class OFTInteger64(OFTInteger): _bit64 = True # List fields are also just subclasses class OFTIntegerList(Field): pass Loading @@ -201,6 +209,11 @@ class OFTStringList(Field): class OFTWideStringList(Field): pass class OFTInteger64List(Field): pass # Class mapping dictionary for OFT Types and reverse mapping. OGRFieldTypes = { 0: OFTInteger, Loading @@ -215,5 +228,8 @@ OGRFieldTypes = { 9: OFTDate, 10: OFTTime, 11: OFTDateTime, # New 64-bit integer types in GDAL 2 12: OFTInteger64, 13: OFTInteger64List, } ROGRFieldTypes = {cls: num for num, cls in OGRFieldTypes.items()}
django/contrib/gis/gdal/prototypes/ds.py +5 −3 Original line number Diff line number Diff line Loading @@ -6,10 +6,10 @@ from ctypes import POINTER, c_char_p, c_double, c_int, c_long, c_void_p from django.contrib.gis.gdal.envelope import OGREnvelope from django.contrib.gis.gdal.libgdal import lgdal from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal from django.contrib.gis.gdal.prototypes.generation import ( const_string_output, double_output, geom_output, int_output, srs_output, void_output, voidptr_output, const_string_output, double_output, geom_output, int64_output, int_output, srs_output, void_output, voidptr_output, ) c_int_p = POINTER(c_int) # shortcut type Loading Loading @@ -66,6 +66,8 @@ get_field_as_datetime = int_output(lgdal.OGR_F_GetFieldAsDateTime, ) get_field_as_double = double_output(lgdal.OGR_F_GetFieldAsDouble, [c_void_p, c_int]) get_field_as_integer = int_output(lgdal.OGR_F_GetFieldAsInteger, [c_void_p, c_int]) if GDAL_VERSION >= (2, 0): get_field_as_integer64 = int64_output(lgdal.OGR_F_GetFieldAsInteger64, [c_void_p, c_int]) get_field_as_string = const_string_output(lgdal.OGR_F_GetFieldAsString, [c_void_p, c_int]) get_field_index = int_output(lgdal.OGR_F_GetFieldIndex, [c_void_p, c_char_p]) Loading
django/contrib/gis/gdal/prototypes/generation.py +8 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ from ctypes import c_char_p, c_double, c_int, c_void_p from ctypes import c_char_p, c_double, c_int, c_int64, c_void_p from functools import partial from django.contrib.gis.gdal.prototypes.errcheck import ( Loading Loading @@ -56,6 +56,13 @@ def int_output(func, argtypes): return func def int64_output(func, argtypes): "Generates a ctypes function that returns a 64-bit integer value." func.argtypes = argtypes func.restype = c_int64 return func def srs_output(func, argtypes): """ Generates a ctypes prototype for the given function with Loading
django/contrib/gis/gdal/prototypes/raster.py +5 −2 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ related data structures. from ctypes import POINTER, c_char_p, c_double, c_int, c_void_p from functools import partial from django.contrib.gis.gdal.libgdal import std_call from django.contrib.gis.gdal.libgdal import GDAL_VERSION, std_call from django.contrib.gis.gdal.prototypes.generation import ( const_string_output, double_output, int_output, void_output, voidptr_output, Loading @@ -30,6 +30,9 @@ get_driver_description = const_string_output(std_call('GDALGetDescription'), [c_ # Raster Data Source Routines create_ds = voidptr_output(std_call('GDALCreate'), [c_void_p, c_char_p, c_int, c_int, c_int, c_int, c_void_p]) open_ds = voidptr_output(std_call('GDALOpen'), [c_char_p, c_int]) if GDAL_VERSION >= (2, 0): close_ds = voidptr_output(std_call('GDALClose'), [c_void_p]) else: close_ds = void_output(std_call('GDALClose'), [c_void_p]) flush_ds = int_output(std_call('GDALFlushCache'), [c_void_p]) copy_ds = voidptr_output(std_call('GDALCreateCopy'), Loading
django/contrib/gis/utils/ogrinspect.py +4 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,8 @@ models for GeoDjango and/or mapping dictionaries for use with the """ from django.contrib.gis.gdal import DataSource from django.contrib.gis.gdal.field import ( OFTDate, OFTDateTime, OFTInteger, OFTReal, OFTString, OFTTime, OFTDate, OFTDateTime, OFTInteger, OFTInteger64, OFTReal, OFTString, OFTTime, ) from django.utils import six from django.utils.six.moves import zip Loading Loading @@ -195,6 +196,8 @@ def _ogrinspect(data_source, model_name, geom_name='geom', layer_key=0, srid=Non yield ' %s = models.FloatField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTInteger: yield ' %s = models.IntegerField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTInteger64: yield ' %s = models.BigIntegerField(%s)' % (mfield, kwargs_str[2:]) elif field_type is OFTString: yield ' %s = models.CharField(max_length=%s%s)' % (mfield, width, kwargs_str) elif field_type is OFTDate: Loading