app/django/contrib/gis/geos/__init__.py
author Lennard de Rijk <ljvderijk@gmail.com>
Thu, 13 Aug 2009 14:02:22 -0700
changeset 2770 71a5a56cf29e
parent 323 ff1a9aa48cfd
permissions -rw-r--r--
Redone the acceptedStudentsExport functionality. The method has been renamed to exportStudentsWithProjects and retrieves the document_name and the new shipping address properties. Also it filters out all invalid projects or projects for wich the scope_path doesn't match the given scope_pa th_start. Also there is no more need to use the argument given to this method when adding the extra columns. The data is now prepared by one loop which uses the key present in the accepted_students dictionary for retrieving the data used by the extra columns.

"""
 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