@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)
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)
@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)
@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)
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)
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)
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)
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)