summaryrefslogtreecommitdiffstats
path: root/webapp/django/contrib/gis/geos/prototypes/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/django/contrib/gis/geos/prototypes/misc.py')
-rw-r--r--webapp/django/contrib/gis/geos/prototypes/misc.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/webapp/django/contrib/gis/geos/prototypes/misc.py b/webapp/django/contrib/gis/geos/prototypes/misc.py
new file mode 100644
index 0000000000..255da91d9e
--- /dev/null
+++ b/webapp/django/contrib/gis/geos/prototypes/misc.py
@@ -0,0 +1,27 @@
+"""
+ This module is for the miscellaneous GEOS routines, particularly the
+ ones that return the area, distance, and length.
+"""
+from ctypes import c_int, c_double, POINTER
+from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR
+from django.contrib.gis.geos.prototypes.errcheck import check_dbl
+
+### ctypes generator function ###
+def dbl_from_geom(func, num_geom=1):
+ """
+ Argument is a Geometry, return type is double that is passed
+ in by reference as the last argument.
+ """
+ argtypes = [GEOM_PTR for i in xrange(num_geom)]
+ argtypes += [POINTER(c_double)]
+ func.argtypes = argtypes
+ func.restype = c_int # Status code returned
+ func.errcheck = check_dbl
+ return func
+
+### ctypes prototypes ###
+
+# Area, distance, and length prototypes.
+geos_area = dbl_from_geom(lgeos.GEOSArea)
+geos_distance = dbl_from_geom(lgeos.GEOSDistance, num_geom=2)
+geos_length = dbl_from_geom(lgeos.GEOSLength)