From 623597c786e89daae15a52dccfcdded7f808da9f Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Sat, 23 Dec 2023 16:26:22 +0000 Subject: [PATCH] Refs #35058 -- Added support for WKB > 2GB with GDAL 3.3+. GDAL 3.3.0 added OGR_G_WkbSizeEx() and OGR_G_CreateFromWkbEx() to handle WKB > 2GB. Prefer these new functions when available. https://github.com/OSGeo/gdal/blob/master/NEWS.md#ogr-330---overview-of-changes --- django/contrib/gis/gdal/prototypes/geom.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/django/contrib/gis/gdal/prototypes/geom.py b/django/contrib/gis/gdal/prototypes/geom.py index 06c2a75f3a..d5fb1a5c99 100644 --- a/django/contrib/gis/gdal/prototypes/geom.py +++ b/django/contrib/gis/gdal/prototypes/geom.py @@ -1,7 +1,7 @@ from ctypes import POINTER, c_char_p, c_double, c_int, 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.errcheck import check_envelope from django.contrib.gis.gdal.prototypes.generation import ( const_string_output, @@ -52,9 +52,18 @@ gety = pnt_func(lgdal.OGR_G_GetY) getz = pnt_func(lgdal.OGR_G_GetZ) # Geometry creation routines. -from_wkb = geom_output( - lgdal.OGR_G_CreateFromWkb, [c_char_p, c_void_p, POINTER(c_void_p), c_int], offset=-2 -) +if GDAL_VERSION >= (3, 3): + from_wkb = geom_output( + lgdal.OGR_G_CreateFromWkbEx, + [c_char_p, c_void_p, POINTER(c_void_p), c_int], + offset=-2, + ) +else: + from_wkb = geom_output( + lgdal.OGR_G_CreateFromWkb, + [c_char_p, c_void_p, POINTER(c_void_p), c_int], + offset=-2, + ) from_wkt = geom_output( lgdal.OGR_G_CreateFromWkt, [POINTER(c_char_p), c_void_p, POINTER(c_void_p)], @@ -88,7 +97,10 @@ to_wkt = string_output( to_gml = string_output( lgdal.OGR_G_ExportToGML, [c_void_p], str_result=True, decoding="ascii" ) -get_wkbsize = int_output(lgdal.OGR_G_WkbSize, [c_void_p]) +if GDAL_VERSION >= (3, 3): + get_wkbsize = int_output(lgdal.OGR_G_WkbSizeEx, [c_void_p]) +else: + get_wkbsize = int_output(lgdal.OGR_G_WkbSize, [c_void_p]) # Geometry spatial-reference related routines. assign_srs = void_output(