예제 #1
0
파일: io.py 프로젝트: Artemusp/Authenticate
 def write_hex(self, geom):
     "Return the HEXEWKB representation of the given geometry."
     from django.contrib.gis.geos.polygon import Polygon
     geom = self._handle_empty_point(geom)
     wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
     if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
         wkb = wkb[:-16] + b'0' * 8
     return wkb
예제 #2
0
 def test_wktwriter_constructor_arguments(self):
     wkt_w = WKTWriter(dim=3, trim=True, precision=3)
     ref = GEOSGeometry('POINT (5.34562 23 1.5)')
     if geos_version_tuple() > (3, 10):
         ref_wkt = 'POINT Z (5.346 23 1.5)'
     else:
         ref_wkt = 'POINT Z (5.35 23 1.5)'
     self.assertEqual(ref_wkt, wkt_w.write(ref).decode())
예제 #3
0
 def write_hex(self, geom):
     "Return the HEXEWKB representation of the given geometry."
     from django.contrib.gis.geos.polygon import Polygon
     geom = self._handle_empty_point(geom)
     wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
     if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
         wkb = wkb[:-16] + b'0' * 8
     return wkb
예제 #4
0
파일: geometry.py 프로젝트: suhailvs/django
 def make_valid(self):
     """
     Attempt to create a valid representation of a given invalid geometry
     without losing any of the input vertices.
     """
     if geos_version_tuple() < (3, 8):
         raise GEOSException('GEOSGeometry.make_valid() requires GEOS >= 3.8.0.')
     return GEOSGeometry(capi.geos_makevalid(self.ptr), srid=self.srid)
예제 #5
0
파일: io.py 프로젝트: Artemusp/Authenticate
 def write(self, geom):
     "Return the WKB representation of the given geometry."
     from django.contrib.gis.geos import Polygon
     geom = self._handle_empty_point(geom)
     wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))
     if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
         # Fix GEOS output for empty polygon.
         # See https://trac.osgeo.org/geos/ticket/680.
         wkb = wkb[:-8] + b'\0' * 4
     return memoryview(wkb)
예제 #6
0
 def write(self, geom):
     "Return the WKB representation of the given geometry."
     from django.contrib.gis.geos import Polygon
     geom = self._handle_empty_point(geom)
     wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))
     if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
         # Fix GEOS output for empty polygon.
         # See https://trac.osgeo.org/geos/ticket/680.
         wkb = wkb[:-8] + b'\0' * 4
     return memoryview(wkb)
예제 #7
0
 def is_counterclockwise(self):
     """Return whether this coordinate sequence is counterclockwise."""
     if geos_version_tuple() < (3, 7):
         # A modified shoelace algorithm to determine polygon orientation.
         # See https://en.wikipedia.org/wiki/Shoelace_formula.
         area = 0.0
         n = len(self)
         for i in range(n):
             j = (i + 1) % n
             area += self[i][0] * self[j][1]
             area -= self[j][0] * self[i][1]
         return area > 0.0
     ret = c_byte()
     if not capi.cs_is_ccw(self.ptr, byref(ret)):
         raise GEOSException('Error encountered in GEOS C function "%s".' %
                             capi.cs_is_ccw.func_name)
     return ret.value == 1
예제 #8
0
파일: io.py 프로젝트: 8H33W00/piro13
class WKBWriter(IOBase):
    _constructor = wkb_writer_create
    ptr_type = WKB_WRITE_PTR
    destructor = wkb_writer_destroy
    geos_version = geos_version_tuple()

    def __init__(self, dim=2):
        super().__init__()
        self.outdim = dim

    def _handle_empty_point(self, geom):
        from django.contrib.gis.geos import Point
        if isinstance(geom, Point) and geom.empty:
            if self.srid:
                # PostGIS uses POINT(NaN NaN) for WKB representation of empty
                # points. Use it for EWKB as it's a PostGIS specific format.
                # https://trac.osgeo.org/postgis/ticket/3181
                geom = Point(float('NaN'), float('NaN'), srid=geom.srid)
            else:
                raise ValueError('Empty point is not representable in WKB.')
        return geom

    def write(self, geom):
        "Return the WKB representation of the given geometry."
        from django.contrib.gis.geos import Polygon
        geom = self._handle_empty_point(geom)
        wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))
        if self.geos_version < (3, 6, 1) and isinstance(
                geom, Polygon) and geom.empty:
            # Fix GEOS output for empty polygon.
            # See https://trac.osgeo.org/geos/ticket/680.
            wkb = wkb[:-8] + b'\0' * 4
        return memoryview(wkb)

    def write_hex(self, geom):
        "Return the HEXEWKB representation of the given geometry."
        from django.contrib.gis.geos.polygon import Polygon
        geom = self._handle_empty_point(geom)
        wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
        if self.geos_version < (3, 6, 1) and isinstance(
                geom, Polygon) and geom.empty:
            wkb = wkb[:-16] + b'0' * 8
        return wkb

    # ### WKBWriter Properties ###

    # Property for getting/setting the byteorder.
    def _get_byteorder(self):
        return wkb_writer_get_byteorder(self.ptr)

    def _set_byteorder(self, order):
        if order not in (0, 1):
            raise ValueError(
                'Byte order parameter must be 0 (Big Endian) or 1 (Little Endian).'
            )
        wkb_writer_set_byteorder(self.ptr, order)

    byteorder = property(_get_byteorder, _set_byteorder)

    # Property for getting/setting the output dimension.
    @property
    def outdim(self):
        return wkb_writer_get_outdim(self.ptr)

    @outdim.setter
    def outdim(self, new_dim):
        if new_dim not in (2, 3):
            raise ValueError('WKB output dimension must be 2 or 3')
        wkb_writer_set_outdim(self.ptr, new_dim)

    # Property for getting/setting the include srid flag.
    @property
    def srid(self):
        return bool(wkb_writer_get_include_srid(self.ptr))

    @srid.setter
    def srid(self, include):
        wkb_writer_set_include_srid(self.ptr, bool(include))
예제 #9
0
    _allowed = Point
    _typeid = 4


class MultiLineString(LinearGeometryMixin, GeometryCollection):
    _allowed = (LineString, LinearRing)
    _typeid = 5

    @property
    def closed(self):
<<<<<<< HEAD
        if geos_version_info()['version'] < '3.5':
            raise GEOSException("MultiLineString.closed requires GEOS >= 3.5.0.")
        return super(MultiLineString, self).closed
=======
        if geos_version_tuple() < (3, 5):
            raise GEOSException("MultiLineString.closed requires GEOS >= 3.5.0.")
        return super().closed
>>>>>>> 37c99181c9a6b95433d60f8c8ef9af5731096435


class MultiPolygon(GeometryCollection):
    _allowed = Polygon
    _typeid = 6

<<<<<<< HEAD
    @property
    def cascaded_union(self):
        "Returns a cascaded union of this MultiPolygon."
        warnings.warn(
            "`cascaded_union` is deprecated, use the `unary_union` property instead.",
예제 #10
0
 def closed(self):
     if geos_version_tuple() < (3, 5):
         raise GEOSException(
             "MultiLineString.closed requires GEOS >= 3.5.0.")
     return super().closed
예제 #11
0
 def closed(self):
     if geos_version_tuple() < (3, 5):
         raise GEOSException("MultiLineString.closed requires GEOS >= 3.5.0.")
     return super().closed
예제 #12
0
            # See https://trac.osgeo.org/geos/ticket/680.
            wkb = wkb[:-8] + b'\0' * 4
        return six.memoryview(wkb)

    def write_hex(self, geom):
        "Returns the HEXEWKB representation of the given geometry."
        from django.contrib.gis.geos.polygon import Polygon
        geom = self._handle_empty_point(geom)
        wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
        if isinstance(geom, Polygon) and geom.empty:
=======
        "Return the WKB representation of the given geometry."
        from django.contrib.gis.geos import Polygon
        geom = self._handle_empty_point(geom)
        wkb = wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t()))
        if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
            # Fix GEOS output for empty polygon.
            # See https://trac.osgeo.org/geos/ticket/680.
            wkb = wkb[:-8] + b'\0' * 4
        return memoryview(wkb)

    def write_hex(self, geom):
        "Return the HEXEWKB representation of the given geometry."
        from django.contrib.gis.geos.polygon import Polygon
        geom = self._handle_empty_point(geom)
        wkb = wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
        if geos_version_tuple() < (3, 6, 1) and isinstance(geom, Polygon) and geom.empty:
>>>>>>> 37c99181c9a6b95433d60f8c8ef9af5731096435
            wkb = wkb[:-16] + b'0' * 8
        return wkb