mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
gis: gdal: Now supports the official GDAL 1.5 binaries for Windows, greatly simplifying installation for that platform; implemented STDCALL aliases for OSR routines that have inconsistent calling convention via the std_call
function; removed unused prototypes module code.
git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@6993 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
b11172e4e7
commit
1d5e689af2
@ -14,7 +14,7 @@ if lib_name:
|
|||||||
pass
|
pass
|
||||||
elif os.name == 'nt':
|
elif os.name == 'nt':
|
||||||
# Windows NT shared library
|
# Windows NT shared library
|
||||||
lib_name = 'libgdal-1.dll'
|
lib_name = 'gdal15.dll'
|
||||||
elif os.name == 'posix':
|
elif os.name == 'posix':
|
||||||
platform = os.uname()[0]
|
platform = os.uname()[0]
|
||||||
if platform == 'Darwin':
|
if platform == 'Darwin':
|
||||||
@ -29,6 +29,24 @@ else:
|
|||||||
# This loads the GDAL/OGR C library
|
# This loads the GDAL/OGR C library
|
||||||
lgdal = CDLL(lib_name)
|
lgdal = CDLL(lib_name)
|
||||||
|
|
||||||
|
# On Windows, the GDAL binaries have some OSR routines exported with
|
||||||
|
# STDCALL, while others are not. Thus, the library will also need to
|
||||||
|
# be loaded up as WinDLL for said OSR functions that require the
|
||||||
|
# different calling convention.
|
||||||
|
if os.name == 'nt':
|
||||||
|
from ctypes import WinDLL
|
||||||
|
lwingdal = WinDLL(lib_name)
|
||||||
|
|
||||||
|
def std_call(func):
|
||||||
|
"""
|
||||||
|
Returns the correct STDCALL function for certain OSR routines on Win32
|
||||||
|
platforms.
|
||||||
|
"""
|
||||||
|
if os.name == 'nt':
|
||||||
|
return lwingdal[func]
|
||||||
|
else:
|
||||||
|
return lgdal[func]
|
||||||
|
|
||||||
#### Version-information functions. ####
|
#### Version-information functions. ####
|
||||||
def _version_info(key):
|
def _version_info(key):
|
||||||
"Returns GDAL library version information with the given key."
|
"Returns GDAL library version information with the given key."
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
"""
|
|
||||||
This routine provides shortuct functions to generate ctypes prototypes
|
|
||||||
for the GDAL routines.
|
|
||||||
"""
|
|
||||||
# OGR Geometry prototypes.
|
|
||||||
from django.contrib.gis.gdal.prototypes.geom import \
|
|
||||||
assign_srs, clone_geom, create_geom, destroy_geom, from_wkb, from_wkt, \
|
|
||||||
get_area, get_coord_dims, get_dims, get_envelope, get_geom_count, get_geom_name, get_geom_srs, get_geom_type, get_point_count, get_wkbsize, \
|
|
||||||
getx, get_geom_ref, gety, getz, to_gml, to_wkt
|
|
||||||
|
|
||||||
# Spatial Reference prototypes.
|
|
||||||
from django.contrib.gis.gdal.prototypes.srs import \
|
|
||||||
clone_srs
|
|
||||||
|
|
||||||
# TEMPORARY
|
|
||||||
from generation import double_output, string_output, void_output
|
|
@ -1,5 +1,5 @@
|
|||||||
from ctypes import c_char_p, c_int, c_void_p, POINTER
|
from ctypes import c_char_p, c_int, c_void_p, POINTER
|
||||||
from django.contrib.gis.gdal.libgdal import lgdal
|
from django.contrib.gis.gdal.libgdal import lgdal, std_call
|
||||||
from django.contrib.gis.gdal.prototypes.generation import \
|
from django.contrib.gis.gdal.prototypes.generation import \
|
||||||
const_string_output, double_output, int_output, \
|
const_string_output, double_output, int_output, \
|
||||||
srs_output, string_output, void_output
|
srs_output, string_output, void_output
|
||||||
@ -20,10 +20,10 @@ def units_func(f):
|
|||||||
return double_output(f, [c_void_p, POINTER(c_char_p)], strarg=True)
|
return double_output(f, [c_void_p, POINTER(c_char_p)], strarg=True)
|
||||||
|
|
||||||
# Creation & destruction.
|
# Creation & destruction.
|
||||||
clone_srs = srs_output(lgdal.OSRClone, [c_void_p])
|
clone_srs = srs_output(std_call('OSRClone'), [c_void_p])
|
||||||
new_srs = srs_output(lgdal.OSRNewSpatialReference, [c_char_p])
|
new_srs = srs_output(std_call('OSRNewSpatialReference'), [c_char_p])
|
||||||
release_srs = void_output(lgdal.OSRRelease, [c_void_p], errcheck=False)
|
release_srs = void_output(lgdal.OSRRelease, [c_void_p], errcheck=False)
|
||||||
destroy_srs = void_output(lgdal.OSRDestroySpatialReference, [c_void_p], errcheck=False)
|
destroy_srs = void_output(std_call('OSRDestroySpatialReference'), [c_void_p], errcheck=False)
|
||||||
srs_validate = void_output(lgdal.OSRValidate, [c_void_p])
|
srs_validate = void_output(lgdal.OSRValidate, [c_void_p])
|
||||||
|
|
||||||
# Getting the semi_major, semi_minor, and flattening functions.
|
# Getting the semi_major, semi_minor, and flattening functions.
|
||||||
@ -34,7 +34,7 @@ invflattening = srs_double(lgdal.OSRGetInvFlattening)
|
|||||||
# WKT, PROJ, EPSG, XML importation routines.
|
# WKT, PROJ, EPSG, XML importation routines.
|
||||||
from_wkt = void_output(lgdal.OSRImportFromWkt, [c_void_p, POINTER(c_char_p)])
|
from_wkt = void_output(lgdal.OSRImportFromWkt, [c_void_p, POINTER(c_char_p)])
|
||||||
from_proj = void_output(lgdal.OSRImportFromProj4, [c_void_p, c_char_p])
|
from_proj = void_output(lgdal.OSRImportFromProj4, [c_void_p, c_char_p])
|
||||||
from_epsg = void_output(lgdal.OSRImportFromEPSG, [c_void_p, c_int])
|
from_epsg = void_output(std_call('OSRImportFromEPSG'), [c_void_p, c_int])
|
||||||
from_xml = void_output(lgdal.OSRImportFromXML, [c_void_p, c_char_p])
|
from_xml = void_output(lgdal.OSRImportFromXML, [c_void_p, c_char_p])
|
||||||
|
|
||||||
# Morphing to/from ESRI WKT.
|
# Morphing to/from ESRI WKT.
|
||||||
@ -49,15 +49,15 @@ linear_units = units_func(lgdal.OSRGetLinearUnits)
|
|||||||
angular_units = units_func(lgdal.OSRGetAngularUnits)
|
angular_units = units_func(lgdal.OSRGetAngularUnits)
|
||||||
|
|
||||||
# For exporting to WKT, PROJ.4, "Pretty" WKT, and XML.
|
# For exporting to WKT, PROJ.4, "Pretty" WKT, and XML.
|
||||||
to_wkt = string_output(lgdal.OSRExportToWkt, [c_void_p, POINTER(c_char_p)])
|
to_wkt = string_output(std_call('OSRExportToWkt'), [c_void_p, POINTER(c_char_p)])
|
||||||
to_proj = string_output(lgdal.OSRExportToProj4, [c_void_p, POINTER(c_char_p)])
|
to_proj = string_output(std_call('OSRExportToProj4'), [c_void_p, POINTER(c_char_p)])
|
||||||
to_pretty_wkt = string_output(lgdal.OSRExportToPrettyWkt, [c_void_p, POINTER(c_char_p), c_int], offset=-2)
|
to_pretty_wkt = string_output(std_call('OSRExportToPrettyWkt'), [c_void_p, POINTER(c_char_p), c_int], offset=-2)
|
||||||
|
|
||||||
# FIXME: This leaks memory, still don't know why.
|
# Memory leak fixed in GDAL 1.5; still exists in 1.4.
|
||||||
to_xml = string_output(lgdal.OSRExportToXML, [c_void_p, POINTER(c_char_p), c_char_p], offset=-2)
|
to_xml = string_output(lgdal.OSRExportToXML, [c_void_p, POINTER(c_char_p), c_char_p], offset=-2)
|
||||||
|
|
||||||
# String attribute retrival routines.
|
# String attribute retrival routines.
|
||||||
get_attr_value = const_string_output(lgdal.OSRGetAttrValue, [c_void_p, c_char_p, c_int])
|
get_attr_value = const_string_output(std_call('OSRGetAttrValue'), [c_void_p, c_char_p, c_int])
|
||||||
get_auth_name = const_string_output(lgdal.OSRGetAuthorityName, [c_void_p, c_char_p])
|
get_auth_name = const_string_output(lgdal.OSRGetAuthorityName, [c_void_p, c_char_p])
|
||||||
get_auth_code = const_string_output(lgdal.OSRGetAuthorityCode, [c_void_p, c_char_p])
|
get_auth_code = const_string_output(lgdal.OSRGetAuthorityCode, [c_void_p, c_char_p])
|
||||||
|
|
||||||
@ -67,5 +67,5 @@ islocal = int_output(lgdal.OSRIsLocal, [c_void_p])
|
|||||||
isprojected = int_output(lgdal.OSRIsProjected, [c_void_p])
|
isprojected = int_output(lgdal.OSRIsProjected, [c_void_p])
|
||||||
|
|
||||||
# Coordinate transformation
|
# Coordinate transformation
|
||||||
new_ct= srs_output(lgdal.OCTNewCoordinateTransformation, [c_void_p, c_void_p])
|
new_ct= srs_output(std_call('OCTNewCoordinateTransformation'), [c_void_p, c_void_p])
|
||||||
destroy_ct = void_output(lgdal.OCTDestroyCoordinateTransformation, [c_void_p], errcheck=False)
|
destroy_ct = void_output(std_call('OCTDestroyCoordinateTransformation'), [c_void_p], errcheck=False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user