示例#1
0
    def vectorize(self, index_feature):
        # target path
        name = index_feature[str('name')]
        path = os.path.join(self.target_path, name[:3], '{}'.format(name))
        if os.path.exists(path):
            return

        # create directory
        try:
            os.makedirs(os.path.dirname(path))
        except OSError:
            pass  # no problem

        index_geometry = index_feature.geometry()
        geo_transform = self.geo_transform.shifted(index_geometry)

        # data with one pixel margin on all sides
        indices = self.geo_transform.get_indices(index_geometry)
        indices = (indices[0] - 1, indices[1] - 1, indices[2] + 1,
                   indices[3] + 1)
        direction = self.direction_group.read(indices)
        accumulation = self.accumulation_group.read(indices)

        # processing
        data_source = SHAPE.CreateDataSource(str(path))
        layer_sr = osr.SpatialReference(self.projection)
        layer_name = str(os.path.basename(path))
        layer = data_source.CreateLayer(layer_name, layer_sr)
        layer.CreateField(ogr.FieldDefn(str('class'), ogr.OFTReal))
        layer_defn = layer.GetLayerDefn()
        generator = vectorize(direction=direction, accumulation=accumulation)
        for klass, indices in generator:
            feature = ogr.Feature(layer_defn)
            points = geo_transform.get_coordinates(indices)
            feature[str('class')] = klass
            geometry = ogr.Geometry(ogr.wkbLineString)
            for p in zip(*points):
                geometry.AddPoint_2D(*p)
            feature.SetGeometry(geometry)
            layer.CreateFeature(feature)
示例#2
0
    def get_mask(self, geometry, shape):

        # create an ogr datasource
        driver = ogr.GetDriverByName(str('Memory'))
        source = driver.CreateDataSource(str(''))
        sr = osr.SpatialReference(self.projection)
        layer = source.CreateLayer(str(''), sr)
        defn = layer.GetLayerDefn()
        feature = ogr.Feature(defn)
        feature.SetGeometry(geometry)
        layer.CreateFeature(feature)

        # burn where data should be
        mask = np.zeros(shape, dtype='u1')
        geo_transform = self.geo_transform.shifted(geometry)
        kwargs = {
            'geo_transform': geo_transform,
            'projection': self.projection
        }
        with datasets.Dataset(mask, **kwargs) as dataset:
            gdal.RasterizeLayer(dataset, (1, ), layer, burn_values=(1, ))

        return mask.astype('b1').repeat(3, axis=0)
示例#3
0
import os
import shlex
import subprocess

import numpy as np

from raster_tools import datasets
from raster_tools import gdal
from raster_tools import ogr
from raster_tools import osr
from raster_tools import vectors

PROJECTION = osr.GetUserInputAsWKT(str('epsg:28992'))
MEM_DRIVER = ogr.GetDriverByName(str('Memory'))
NO_DATA_VALUE = np.finfo('f4').min.item()
SR = osr.SpatialReference(PROJECTION)


def clip(kwargs, geometry):
    """ Clip kwargs in place. """
    # do not touch original kwargs
    kwargs = kwargs.copy()
    array = kwargs.pop('array')
    mask = np.ones_like(array, 'u1')

    # create an ogr datasource
    source = MEM_DRIVER.CreateDataSource('')
    layer = source.CreateLayer(str(''), SR)
    defn = layer.GetLayerDefn()
    feature = ogr.Feature(defn)
    feature.SetGeometry(geometry)
import numpy as np

from raster_tools import gdal
from raster_tools import ogr
from raster_tools import osr

from raster_tools import datasets
from raster_tools import datasources

DRIVER_OGR_MEMORY = ogr.GetDriverByName(str('Memory'))
DRIVER_GDAL_MEM = gdal.GetDriverByName(str('mem'))
DRIVER_GDAL_GTIFF = gdal.GetDriverByName(str('gtiff'))

WKT_RD = osr.GetUserInputAsWKT(str('epsg:28992'))
PROJ4_RD = osr.SpatialReference(WKT_RD).ExportToProj4().strip()


def command(gardens_path, aerial_image_path, target_path, min_green, max_green,
            check_rast, part, pk):
    # open input shapefile
    shape_gardens = ogr.Open(gardens_path)
    layer_gardens = shape_gardens[0]

    # check projection of input shapefile
    sr = layer_gardens.GetSpatialRef()
    check_sr = get_projection(sr)
    if check_sr is None:
        print('[!] ERROR : EPSG projection code missing from shape.')
        hint = '[*] INFO  : Use this command: gdalsrsinfo -o wkt EPSG:28992 > '
        print(hint, gardens_path.replace('.shp', '.prj'))
示例#5
0
 def sr(self):
     return osr.SpatialReference(self.projection)