コード例 #1
0
ファイル: region.py プロジェクト: rashadkm/grass_cmake
    def from_rast(self, raster_name):
        """Set the region from the computational region
            of a raster map layer.

            :param raster_name: the name of raster
            :type raster_name: str

            :param mapset: the mapset of raster
            :type mapset: str

            call C function `Rast_get_cellhd`

            Example ::

            >>> reg = Region()
            >>> reg.from_rast(test_raster_name)
            >>> reg.get_bbox()
            Bbox(50.0, 0.0, 60.0, 0.0)
            >>> reg.read()
            >>> reg.get_bbox()
            Bbox(40.0, 0.0, 40.0, 0.0)

            ..
           """
        if not raster_name:
            raise ValueError("Raster name or mapset are invalid")


        mapset = get_mapset_raster(raster_name)

        if mapset:
            libraster.Rast_get_cellhd(raster_name, mapset,
                                      self.byref())
コード例 #2
0
    def from_rast(self, raster_name):
        """Set the region from the computational region
        of a raster map layer.

        :param raster_name: the name of raster
        :type raster_name: str

        :param mapset: the mapset of raster
        :type mapset: str

        call C function `Rast_get_cellhd`

        Example ::

        >>> reg = Region()
        >>> reg.from_rast(test_raster_name)
        >>> reg.get_bbox()
        Bbox(50.0, 0.0, 60.0, 0.0)
        >>> reg.read()
        >>> reg.get_bbox()
        Bbox(40.0, 0.0, 40.0, 0.0)

        ..
        """
        if not raster_name:
            raise ValueError("Raster name or mapset are invalid")

        mapset = get_mapset_raster(raster_name)

        if mapset:
            libraster.Rast_get_cellhd(raster_name, mapset, self.byref())
コード例 #3
0
ファイル: grid.py プロジェクト: lindakladivova/grass
 def define_mapset_inputs(self):
     """Add the mapset information to the input maps"""
     for inmap in self.module.inputs:
         inm = self.module.inputs[inmap]
         if inm.type in ("raster", "vector") and inm.value:
             if "@" not in inm.value:
                 mset = get_mapset_raster(inm.value)
                 inm.value = inm.value + "@%s" % mset
コード例 #4
0
    def layers(self, mapnames):
        """Setter method for the layers attribute in the RasterStack

        Parameters
        ----------
        mapnames : str, list
            Name or list of names of GRASS GIS rasters to add to the
            RasterStack object.
        """

        # some checks
        if isinstance(mapnames, str):
            mapnames = [mapnames]

        # reset existing attributes
        for name in list(self.layers.keys()):
            delattr(self, name)

        self.loc = _LocIndexer(self)
        self.iloc = _ILocIndexer(self, self.loc)
        self.count = len(mapnames)
        self.mtypes = {}

        # split raster name from mapset name
        raster_names = [i.split("@")[0] for i in mapnames]
        mapset_names = [get_mapset_raster(i) for i in mapnames]

        if None in mapset_names:
            missing_idx = mapset_names.index(None)
            missing_rasters = raster_names[missing_idx]
            gs.fatal(
                "GRASS GIS raster(s) {x} is not found in any mapsets".format(
                    x=missing_rasters))

        # add rasters and metadata to stack
        for name, mapset in zip(raster_names, mapset_names):

            with RasterRow(name=name, mapset=mapset) as src:

                if src.exist() is True:

                    ras_name = src.name.split("@")[0]  # name sans mapset
                    full_name = src.name_mapset()  # name with mapset
                    valid_name = ras_name.replace(".", "_")

                    # grass gis raster could have same name if in diff mapset
                    if valid_name in list(self.layers.keys()):
                        raise ValueError(
                            "Cannot append map {name} to the "
                            "RasterStack because a map with the same name "
                            "already exists".format(name=ras_name))

                    self.mtypes.update({full_name: src.mtype})
                    self.loc[valid_name] = src
                    setattr(self, valid_name, src)

                else:
                    gs.fatal("GRASS raster map " + r + " does not exist")
コード例 #5
0
ファイル: grid.py プロジェクト: rkanavath/grass-ci
 def define_mapset_inputs(self):
     """Add the mapset information to the input maps
     """
     for inmap in self.module.inputs:
         inm = self.module.inputs[inmap]
         if inm.type in ('raster', 'vector') and inm.value:
             if '@' not in inm.value:
                 mset = get_mapset_raster(inm.value)
                 inm.value = inm.value + '@%s' % mset
コード例 #6
0
ファイル: abstract.py プロジェクト: pesekon2/grass
    def exist(self):
        """Return True if the map already exist, and
        set the mapset if were not set.

        call the C function `G_find_raster`.

        >>> ele = RasterAbstractBase(test_raster_name)
        >>> ele.exist()
        True
        """
        if self.name:
            if self.mapset == "":
                mapset = utils.get_mapset_raster(self.name, self.mapset)
                self.mapset = mapset if mapset else ""
                return True if mapset else False
            return bool(utils.get_mapset_raster(self.name, self.mapset))
        else:
            return False
コード例 #7
0
ファイル: abstract.py プロジェクト: rashadkm/grass_cmake
    def exist(self):
        """Return True if the map already exist, and
        set the mapset if were not set.

        call the C function `G_find_raster`.

        >>> ele = RasterAbstractBase(test_raster_name)
        >>> ele.exist()
        True
        """
        if self.name:
            if self.mapset == '':
                mapset = utils.get_mapset_raster(self.name, self.mapset)
                self.mapset = mapset if mapset else ''
                return True if mapset else False
            return bool(utils.get_mapset_raster(self.name, self.mapset))
        else:
            return False
コード例 #8
0
ファイル: grid.py プロジェクト: GRASS-GIS/grass-ci
 def define_mapset_inputs(self):
     """Add the mapset information to the input maps
     """
     for inmap in self.module.inputs:
         inm = self.module.inputs[inmap]
         if inm.type in ('raster', 'vector') and inm.value:
             if '@' not in inm.value:
                 mset = get_mapset_raster(inm.value)
                 inm.value = inm.value + '@%s' % mset
コード例 #9
0
def main(opt, flg):
    #
    # Set check variables
    #
    overwrite = True
    rasters = opt['rasters'].split(',') if opt['rasters'] else []
    rprefix = opt['rprefix'].split(',') if opt['rprefix'] else []

    def split(x): return x.split('@') if '@' in x else (x, '')

    vname, vmset = split(opt['vector'])
    shpcsv = opt['shpcsv'] if opt['shpcsv'] else vname + '.csv'
    rstcsv = (opt['rstcsv'].split(',') if opt['rstcsv']
              else [split(rst)[0] + '.csv' for rst in rasters])
    zones = opt['zones'] if opt['zones'] else vname + '_zones'
    nprocs = int(opt.get('nprocs', 1))
    if rasters:
        if rprefix and len(rasters) != len(rprefix):
            raise
        if len(rasters) != len(rstcsv):
            raise
        prefixes = rprefix if rprefix else rasters

    skipshp = opt['skipshape'].split(',') if opt['skipshape'] else []
    skiprst = opt['skipunivar'].split(',') if opt['skipunivar'] else []
    layer = int(opt['layer'])
    newlayer = int(opt['newlayer'])
    newlayername = (opt['newlayername'] if opt['newlayername']
                    else vname + '_stats')
    newtabname = opt['newtabname'] if opt['newtabname'] else vname + '_stats'
    rstpercentile = float(opt['rstpercentile'])
    separator = opt.get('separator', ';')

    #
    # compute
    #
    if not os.path.exists(shpcsv):
        get_shp_csv(opt['vector'], shpcsv, overwrite, separator)
    if not get_mapset_raster(zones):
        get_zones(opt['vector'], zones, layer)
    if not rstcsv or not os.path.exists(rstcsv[0]):
        get_rst_csv(rasters, zones, rstcsv, rstpercentile, overwrite,
                    nprocs, separator)

    newlink = Link(newlayer, newlayername, newtabname)
    newtab = newlink.table()
    with Vector(vname, vmset, mode='r', layer=layer) as vct:
        mode = 'r' if newlink in vct.dblinks else 'rw'

    with VectorTopo(vname, vmset, mode=mode, layer=layer) as vct:
        update_cols(newtab, shpcsv, rstcsv, prefixes, skipshp, skiprst, separator=separator)

        if mode == 'rw':
            # add the new link
            vct.dblinks.add(newlink)
            vct.build()
コード例 #10
0
    def append(self, other, in_place=True):
        """Setter method to add new RasterRows to a RasterStack object

        Note that this modifies the Raster object in-place

        Parameters
        ----------
        other : str, or list
            Name of GRASS GIS rasters, or a list of names.

        in_place : bool (opt). Default is True
            Whether to change the Raster object in-place or leave original and
            return a new Raster object.

        Returns
        -------
        RasterStack
            Returned only if `in_place` is True
        """

        if isinstance(other, str):
            other = [other]

        # check that 'other' exists
        raster_names = [i.split("@")[0] for i in other]
        mapset_names = [get_mapset_raster(i) for i in other]
        other_fullnames = list()

        for name, mapset in zip(raster_names, mapset_names):
            with RasterRow(name=name, mapset=mapset) as src:
                if src.exist() is True:
                    fullname = src.fullname()
                    other_fullnames.append(fullname)
                else:
                    raise ValueError(
                        "grass raster {} does not exist".format(other))

        # get names of raster in existing stack
        existing_fullnames = [i.fullname() for i in self.loc.values()]

        if in_place is True:
            self.layers = existing_fullnames + other_fullnames

        else:
            new_raster = RasterStack(rasters=existing_fullnames +
                                     other_fullnames)
            return new_raster
コード例 #11
0
def _get_raster_image_as_np(lock, conn, data):
    """Convert a raster map into an image and return
    a numpy array with RGB or Gray values.

    :param lock: A multiprocessing.Lock instance
    :param conn: A multiprocessing.Pipe instance used to send True or False
    :param data: The list of data entries [function_id, raster_name, extent, color]
    """
    array = None
    try:
        name = data[1]
        mapset = data[2]
        extent = data[3]
        color = data[4]

        mapset = utils.get_mapset_raster(name, mapset)

        if not mapset:
            raise ValueError("Unable to find raster map <%s>" % (name))

        rast = RasterRow(name, mapset)

        if rast.exist():

            reg = Region()
            reg.from_rast(name)

            if extent is not None:
                if "north" in extent:
                    reg.north = extent["north"]
                if "south" in extent:
                    reg.south = extent["south"]
                if "east" in extent:
                    reg.east = extent["east"]
                if "west" in extent:
                    reg.west = extent["west"]
                if "rows" in extent:
                    reg.rows = extent["rows"]
                if "cols" in extent:
                    reg.cols = extent["cols"]
                reg.adjust()

            array = raster2numpy_img(name, reg, color)
    except:
        raise
    finally:
        conn.send(array)
コード例 #12
0
ファイル: __init__.py プロジェクト: rashadkm/grass_cmake
def _get_raster_image_as_np(lock, conn, data):
    """Convert a raster map into an image and return
       a numpy array with RGB or Gray values.

       :param lock: A multiprocessing.Lock instance
       :param conn: A multiprocessing.Pipe instance used to send True or False
       :param data: The list of data entries [function_id, raster_name, extent, color]
    """
    array = None
    try:
        name = data[1]
        mapset = data[2]
        extent = data[3]
        color = data[4]

        mapset = utils.get_mapset_raster(name, mapset)

        if not mapset:
            raise ValueError("Unable to find raster map <%s>"%(name))

        rast = RasterRow(name, mapset)

        if rast.exist():

            reg = Region()
            reg.from_rast(name)

            if extent is not None:
                if "north" in extent:
                    reg.north = extent["north"]
                if "south" in extent:
                    reg.south = extent["south"]
                if "east" in extent:
                    reg.east =  extent["east"]
                if "west" in extent:
                    reg.west =  extent["west"]
                if "rows" in extent:
                    reg.rows =  extent["rows"]
                if "cols" in extent:
                    reg.cols =  extent["cols"]
                reg.adjust()

            array = raster2numpy_img(name, reg, color)
    except:
        raise
    finally:
        conn.send(array)
コード例 #13
0
def get_fullname(name):
    """
    Return a fullname for a raster if only a string with the mapname
    is provided.

    Parameters
    ----------
    name : str
        Name of a GRASS map

    Returns
    -------
    name : str
        Name of a GRASS map with the mapset appended as name@mapset is the
        mapset is not explicitly provided.
    """
    if "@" not in name:
        name = "@".join([name, get_mapset_raster(name)])

    return name
コード例 #14
0
            RPCDefs.GET_VECTOR_FEATURES_AS_WKB,
            name,
            mapset,
            extent,
            feature_type,
            field,
        ])
        return self.safe_receive("get_vector_features_as_wkb_list")


if __name__ == "__main__":
    import doctest
    from grass.pygrass.modules import Module

    Module("g.region", n=40, s=0, e=40, w=0, res=10)
    Module(
        "r.mapcalc",
        expression="%s = row() + (10 * col())" % (test_raster_name),
        overwrite=True,
    )
    utils.create_test_vector_map(test_vector_name)

    doctest.testmod()
    """Remove the generated maps, if exist"""
    mset = utils.get_mapset_raster(test_raster_name, mapset="")
    if mset:
        Module("g.remove", flags="f", type="raster", name=test_raster_name)
    mset = utils.get_mapset_vector(test_vector_name, mapset="")
    if mset:
        Module("g.remove", flags="f", type="vector", name=test_vector_name)
コード例 #15
0
ファイル: __init__.py プロジェクト: rashadkm/grass_cmake
    cats="""11:A
            12:B
            13:C
            14:D
            21:E
            22:F
            23:G
            24:H
            31:I
            32:J
            33:K
            34:L
            41:M
            42:n
            43:O
            44:P"""
    Module("r.category", rules="-", map=test_raster_name,
           stdin_=cats, separator=":")

    doctest.testmod()

    """Remove the generated vector map, if exist"""
    mset = utils.get_mapset_raster(test_raster_name, mapset='')
    if mset:
        Module("g.remove", flags='f', type='raster', name=test_raster_name)
    mset = utils.get_mapset_raster(test_raster_name + "_segment",
                                   mapset='')
    if mset:
        Module("g.remove", flags='f', type='raster',
               name=test_raster_name + "_segment")
コード例 #16
0
            14:D
            21:E
            22:F
            23:G
            24:H
            31:I
            32:J
            33:K
            34:L
            41:M
            42:n
            43:O
            44:P"""
    Module("r.category",
           rules="-",
           map=test_raster_name,
           stdin_=cats,
           separator=":")

    doctest.testmod()
    """Remove the generated vector map, if exist"""
    mset = utils.get_mapset_raster(test_raster_name, mapset='')
    if mset:
        Module("g.remove", flags='f', type='raster', name=test_raster_name)
    mset = utils.get_mapset_raster(test_raster_name + "_segment", mapset='')
    if mset:
        Module("g.remove",
               flags='f',
               type='raster',
               name=test_raster_name + "_segment")
コード例 #17
0
    def layers(self, mapnames):
        """Setter method for the layers attribute in the RasterStack

        Parameters
        ----------
        mapnames : str, list
            Name or list of names of GRASS GIS rasters to add to the
            RasterStack object.
        """

        # some checks
        if isinstance(mapnames, str):
            mapnames = [mapnames]

        # reset existing attributes
        for src in list(self.loc.values()):
            try:
                delattr(self, src.name)
            except AttributeError:
                pass

        self.loc = _LocIndexer(self)
        self.iloc = _ILocIndexer(self, self.loc)
        self.count = len(mapnames)
        self.mtypes = {}

        # split raster name from mapset name
        raster_names = [i.split("@")[0] for i in mapnames]
        mapset_names = [get_mapset_raster(i) for i in mapnames]

        if None in mapset_names:
            missing_idx = mapset_names.index(None)
            missing_rasters = raster_names[missing_idx]
            gs.fatal(
                "GRASS GIS raster(s) {} is not found in any mapsets".format(
                    missing_rasters))

        # add rasters and metadata to stack
        for name, mapset in zip(raster_names, mapset_names):

            with RasterRow(name=name, mapset=mapset) as src:

                if src.exist() is True:

                    # get mapname and mapset
                    ras_name = src.name
                    fullname = src.fullname()

                    # check if the same layer (and key) already exists
                    if fullname in list(self.layers.keys()):
                        raise ValueError("Cannot include raster {} because "
                                         "it already exists in the "
                                         "RasterStack".format(fullname))

                    # update the indexer, metadata and attributes
                    self.loc[fullname] = src
                    self.mtypes.update({fullname: src.mtype})

                    if "." not in ras_name:
                        setattr(self, ras_name, src)

                else:
                    gs.fatal("GRASS raster map {} does not exist".format(name))
コード例 #18
0
ファイル: ashrae.py プロジェクト: gracedoherty/grass-addons
def exists(raster_name):
    """Return True if the map already exist
    """
    raster, mapset = (raster_name.split('@') if '@' in raster_name else
                      (raster_name, ''))
    return bool(get_mapset_raster(raster_name, mapset))
コード例 #19
0
def exists(raster_name):
    """Return True if the map already exist"""
    raster, mapset = raster_name.split("@") if "@" in raster_name else (raster_name, "")
    return bool(get_mapset_raster(raster_name, mapset))
コード例 #20
0
def main(opt, flg):
    #
    # Set check variables
    #
    overwrite = True
    rasters = opt["rasters"].split(",") if opt["rasters"] else []
    rprefix = opt["rprefix"].split(",") if opt["rprefix"] else []

    def split(x):
        return x.split("@") if "@" in x else (x, "")

    vname, vmset = split(opt["vector"])
    shpcsv = opt["shpcsv"] if opt["shpcsv"] else vname + ".csv"
    rstcsv = (opt["rstcsv"].split(",") if opt["rstcsv"] else
              [split(rst)[0] + ".csv" for rst in rasters])
    zones = opt["zones"] if opt["zones"] else vname + "_zones"
    nprocs = int(opt.get("nprocs", 1))
    if rasters:
        if rprefix and len(rasters) != len(rprefix):
            raise
        if len(rasters) != len(rstcsv):
            raise
        prefixes = rprefix if rprefix else rasters
    else:
        prefixes = None

    skipshp = opt["skipshape"].split(",") if opt["skipshape"] else []
    skiprst = opt["skipunivar"].split(",") if opt["skipunivar"] else []
    layer = int(opt["layer"])
    newlayer = int(opt["newlayer"])
    newlayername = opt["newlayername"] if opt[
        "newlayername"] else vname + "_stats"
    newtabname = opt["newtabname"] if opt["newtabname"] else vname + "_stats"
    rstpercentile = float(opt["rstpercentile"])
    separator = opt.get("separator", ";")

    #
    # compute
    #
    if not os.path.exists(shpcsv):
        get_shp_csv(opt["vector"], shpcsv, overwrite, separator)
    if not get_mapset_raster(zones):
        get_zones(opt["vector"], zones, layer)
    if not rstcsv or not os.path.exists(rstcsv[0]):
        get_rst_csv(rasters, zones, rstcsv, rstpercentile, overwrite, nprocs,
                    separator)

    newlink = Link(newlayer, newlayername, newtabname)
    newtab = newlink.table()
    with Vector(vname, vmset, mode="r", layer=layer) as vct:
        mode = "r" if newlink in vct.dblinks else "rw"

    with VectorTopo(vname, vmset, mode=mode, layer=layer) as vct:
        update_cols(newtab,
                    shpcsv,
                    rstcsv,
                    prefixes,
                    skipshp,
                    skiprst,
                    separator=separator)

        if mode == "rw":
            # add the new link
            vct.dblinks.add(newlink)
            vct.build()
コード例 #21
0
ファイル: __init__.py プロジェクト: rashadkm/grass_cmake
            16 None 41

            >>> provider.stop()

            ..
        """
        self.check_server()
        self.client_conn.send([RPCDefs.GET_VECTOR_FEATURES_AS_WKB,
                               name, mapset, extent, feature_type, field])
        return self.safe_receive("get_vector_features_as_wkb_list")


if __name__ == "__main__":
    import doctest
    from grass.pygrass import utils
    from grass.pygrass.modules import Module
    Module("g.region", n=40, s=0, e=40, w=0, res=10)
    Module("r.mapcalc", expression="%s = row() + (10 * col())"%(test_raster_name),
                             overwrite=True)
    utils.create_test_vector_map(test_vector_name)

    doctest.testmod()

    """Remove the generated maps, if exist"""
    mset = utils.get_mapset_raster(test_raster_name, mapset='')
    if mset:
        Module("g.remove", flags='f', type='raster', name=test_raster_name)
    mset = utils.get_mapset_vector(test_vector_name, mapset='')
    if mset:
        Module("g.remove", flags='f', type='vector', name=test_vector_name)