Example #1
0
    @property
    def _dtype_class(self):
        return RingDtype

    @classmethod
    def from_geopandas(cls, ga):
        """
        Build a spatialpandas RingArray from a geopandas GeometryArray or
        GeoSeries.

        Args:
            ga: A geopandas GeometryArray or GeoSeries of LinearRing shapes.

        Returns:
            RingArray
        """
        return super(RingArray, cls).from_geopandas(ga)


def _ring_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return RingArray([[0, 0, 1, 0, 1, 1, 0, 0], [2, 2, 2, 3, 3, 3, 2, 2]],
                     dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(RingDtype)(_ring_array_non_empty)
Example #2
0
    def intersects_bounds(self, bounds, inds=None):
        x0, y0, x1, y1 = bounds
        offsets0, offsets1 = self.buffer_offsets
        start_offsets0 = offsets0[:-1]
        stop_offsets0 = offsets0[1:]
        if inds is not None:
            start_offsets0 = start_offsets0[inds]
            stop_offsets0 = stop_offsets0[inds]

        result = np.zeros(len(start_offsets0), dtype=np.bool_)
        polygons_intersect_bounds(float(x0), float(y0), float(x1), float(y1),
                                  self.buffer_values, start_offsets0,
                                  stop_offsets0, offsets1, result)
        return result


def _polygon_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return PolygonArray([[[1.0, 1.0, 2.0, 1.0, 2.0, 2.0, 1.0, 2.0, 1.0, 1.0],
                          [1.1, 1.1, 1.5, 1.9, 1.9, 1.1, 1.1, 1.1]],
                         [[1.0, 1.0, 2.0, 1.0, 2.0, 2.0, 1.0, 2.0, 1.0, 1.0]]],
                        dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(PolygonDtype)(_polygon_array_non_empty)
Example #3
0
@jit(nopython=True, nogil=True)
def _lexograph_lt(a1, a2):
    """
    Compare two 1D numpy arrays lexographically
    Parameters
    ----------
    a1: ndarray
        1D numpy array
    a2: ndarray
        1D numpy array

    Returns
    -------
    comparison:
        True if a1 < a2, False otherwise
    """
    for e1, e2 in zip(a1, a2):
        if e1 < e2:
            return True
        elif e1 > e2:
            return False
    return len(a1) < len(a2)


def ragged_array_non_empty(dtype):
    return RaggedArray([[1], [1, 2]], dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(RaggedDtype)(ragged_array_non_empty)
Example #4
0
    @property
    def area(self):
        return np.zeros(len(self), dtype=np.float64)

    def intersects_bounds(self, bounds, inds=None):
        x0, y0, x1, y1 = bounds
        offsets = self.buffer_outer_offsets
        start_offsets0 = offsets[:-1]
        stop_offsets0 = offsets[1:]
        if inds is not None:
            start_offsets0 = start_offsets0[inds]
            stop_offsets0 = stop_offsets0[inds]

        result = np.zeros(len(stop_offsets0), dtype=np.bool_)
        lines_intersect_bounds(float(x0), float(y0), float(x1), float(y1),
                               self.buffer_values, start_offsets0,
                               stop_offsets0, result)
        return result


def _line_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return LineArray([[1, 0, 1, 1], [1, 2, 0, 0]], dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(LineDtype)(_line_array_non_empty)
Example #5
0
    def intersects_bounds(self, bounds, inds=None):
        x0, y0, x1, y1 = bounds
        offsets0, offsets1 = self.buffer_offsets
        start_offsets0 = offsets0[:-1]
        stop_offsets0 = offsets0[1:]
        if inds is not None:
            start_offsets0 = start_offsets0[inds]
            stop_offsets0 = stop_offsets0[inds]

        result = np.zeros(len(start_offsets0), dtype=np.bool_)
        multilines_intersect_bounds(
            float(x0), float(y0), float(x1), float(y1),
            self.buffer_values, start_offsets0, stop_offsets0, offsets1, result
        )
        return result


def _multi_line_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return MultiLineArray([
        [[1, 0, 1, 1], [1, 2, 0, 0]],
        [[3, 3, 4, 4]]
    ], dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(MultiLineDtype)(_multi_line_array_non_empty)
Example #6
0
        stop_offsets0 = offsets0[1:]
        if inds is not None:
            start_offsets0 = start_offsets0[inds]
            stop_offsets0 = stop_offsets0[inds]

        result = np.zeros(len(start_offsets0), dtype=np.bool_)
        multipolygons_intersect_bounds(float(x0), float(y0), float(x1),
                                       float(y1), self.buffer_values,
                                       start_offsets0, stop_offsets0, offsets1,
                                       offsets2, result)
        return result


def _multi_polygon_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return MultiPolygonArray(
        [[[[1.0, 1.0, 2.0, 1.0, 2.0, 2.0, 1.0, 2.0, 1.0, 1.0],
           [1.1, 1.1, 1.5, 1.9, 1.9, 1.1, 1.1, 1.1]]],
         [[[0.0, 0.0, 1.0, 0.0, 2.0, 1.0, 0.5, 3.0, -1.0, 1.0, 0.0, 0.0],
           [0.2, 0.2, 0.5, 1.0, 0.8, 0.2, 0.2, 0.2],
           [0.5, 1.25, 0.3, 2.0, 0.8, 2.0, 0.5, 1.25]]]],
        dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(MultiPolygonDtype)(
        _multi_polygon_array_non_empty)
Example #7
0
                    ax0, ay0, ax1, ay1, x, y)
                if intersects_segment:
                    result[i] = True
                    break

    return result


@ngpjit
def _perform_intersects_polygon(flat_points, flat_polygons, offsets, inds):
    n = len(inds)
    result = np.zeros(n, dtype=np.bool_)
    for i, j in enumerate(inds):
        x = flat_points[2 * j]
        y = flat_points[2 * j + 1]

        result[i] = point_intersects_polygon(x, y, flat_polygons, offsets)
    return result


def _points_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return PointArray([[1, 0], [1, 2]], dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(PointDtype)(_points_array_non_empty)
Example #8
0
        return np.zeros(len(self), dtype=np.float64)

    def intersects_bounds(self, bounds, inds=None):
        x0, y0, x1, y1 = bounds
        offsets0 = self.buffer_outer_offsets
        start_offsets0 = offsets0[:-1]
        stop_offsets0 = offsets0[1:]

        if inds is not None:
            start_offsets0 = start_offsets0[inds]
            stop_offsets0 = stop_offsets0[inds]

        result = np.zeros(len(start_offsets0), dtype=np.bool_)
        multipoints_intersect_bounds(float(x0), float(y0), float(x1),
                                     float(y1), self.buffer_values,
                                     start_offsets0, stop_offsets0, result)
        return result


def _multi_points_array_non_empty(dtype):
    """
    Create an example length 2 array to register with Dask.
    See https://docs.dask.org/en/latest/dataframe-extend.html#extension-arrays
    """
    return MultiPointArray([[1, 0, 1, 1], [1, 2, 0, 0]], dtype=dtype)


if make_array_nonempty:
    make_array_nonempty.register(MultiPointDtype)(
        _multi_points_array_non_empty)