示例#1
0
    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)
示例#2
0
    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)
示例#3
0
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()))