def write(self, process_tile, data): """ Write data from process tiles into GeoJSON file(s). Parameters ---------- process_tile : ``BufferedTile`` must be member of process ``TilePyramid`` """ if data is None or len(data) == 0: return if not os.path.exists(self.path): os.makedirs(self.path) assert isinstance(data, (list, types.GeneratorType)) data = list(data) # Convert from process_tile to output_tiles for tile in self.pyramid.intersecting(process_tile): # skip if file exists and overwrite is not set out_path = self.get_path(tile) self.prepare_path(tile) out_tile = BufferedTile(tile, self.pixelbuffer) write_vector_window(in_data=data, out_schema=self.output_params["schema"], out_tile=out_tile, out_path=out_path)
def write(self, process_tile, data): """ Write data from process tiles into GeoJSON file(s). Parameters ---------- process_tile : ``BufferedTile`` must be member of process ``TilePyramid`` """ if data is None or len(data) == 0: return if not isinstance(data, (list, types.GeneratorType)): raise TypeError( "GeoJSON driver data has to be a list or generator of GeoJSON objects" ) data = list(data) if not len(data): logger.debug("no features to write") else: # in case of S3 output, create an boto3 resource bucket_resource = get_boto3_bucket( self._bucket) if self._bucket else None # Convert from process_tile to output_tiles for tile in self.pyramid.intersecting(process_tile): out_path = self.get_path(tile) self.prepare_path(tile) out_tile = BufferedTile(tile, self.pixelbuffer) write_vector_window(in_data=data, out_schema=self.output_params["schema"], out_tile=out_tile, out_path=out_path, bucket_resource=bucket_resource)
def test_write_vector_window_errors(landpoly): with fiona.open(landpoly) as src: feature = next(iter(src)) with pytest.raises((DriverError, ValueError, TypeError)): write_vector_window(in_data=["invalid", feature], out_tile=BufferedTilePyramid("geodetic").tile( 0, 0, 0), out_path="/invalid_path", out_schema=dict(geometry="Polygon", properties=dict()))