--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/gis/geos/__init__.py Tue Oct 14 16:00:59 2008 +0000
@@ -0,0 +1,69 @@
+"""
+ The goal of this module is to be a ctypes wrapper around the GEOS library
+ that will work on both *NIX and Windows systems. Specifically, this uses
+ the GEOS C api.
+
+ I have several motivations for doing this:
+ (1) The GEOS SWIG wrapper is no longer maintained, and requires the
+ installation of SWIG.
+ (2) The PCL implementation is over 2K+ lines of C and would make
+ PCL a requisite package for the GeoDjango application stack.
+ (3) Windows and Mac compatibility becomes substantially easier, and does not
+ require the additional compilation of PCL or GEOS and SWIG -- all that
+ is needed is a Win32 or Mac compiled GEOS C library (dll or dylib)
+ in a location that Python can read (e.g. 'C:\Python25').
+
+ In summary, I wanted to wrap GEOS in a more maintainable and portable way using
+ only Python and the excellent ctypes library (now standard in Python 2.5).
+
+ In the spirit of loose coupling, this library does not require Django or
+ GeoDjango. Only the GEOS C library and ctypes are needed for the platform
+ of your choice.
+
+ For more information about GEOS:
+ http://geos.refractions.net
+
+ For more info about PCL and the discontinuation of the Python GEOS
+ library see Sean Gillies' writeup (and subsequent update) at:
+ http://zcologia.com/news/150/geometries-for-python/
+ http://zcologia.com/news/429/geometries-for-python-update/
+"""
+from django.contrib.gis.geos.base import GEOSGeometry, wkt_regex, hex_regex
+from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon, HAS_NUMPY
+from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
+from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
+from django.contrib.gis.geos.libgeos import geos_version, geos_version_info
+
+def fromfile(file_name):
+ """
+ Given a string file name, returns a GEOSGeometry. The file may contain WKB,
+ WKT, or HEX.
+ """
+ fh = open(file_name, 'rb')
+ buf = fh.read()
+ fh.close()
+ if wkt_regex.match(buf) or hex_regex.match(buf):
+ return GEOSGeometry(buf)
+ else:
+ return GEOSGeometry(buffer(buf))
+
+def fromstr(wkt_or_hex, **kwargs):
+ "Given a string value (wkt or hex), returns a GEOSGeometry object."
+ return GEOSGeometry(wkt_or_hex, **kwargs)
+
+def hex_to_wkt(hex):
+ "Converts HEXEWKB into WKT."
+ return GEOSGeometry(hex).wkt
+
+def wkt_to_hex(wkt):
+ "Converts WKT into HEXEWKB."
+ return GEOSGeometry(wkt).hex
+
+def centroid(input):
+ "Returns the centroid of the geometry (given in HEXEWKB)."
+ return GEOSGeometry(input).centroid.wkt
+
+def area(input):
+ "Returns the area of the geometry (given in HEXEWKB)."
+ return GEOSGeometry(input).area
+