Ejemplo n.º 1
0
 def __new__(cls,
             name,
             mapset="",
             mtype='CELL',
             mode='r+',
             overwrite=False):
     reg = Region()
     shape = (reg.rows, reg.cols)
     mapset = libgis.G_find_raster(name, mapset)
     gtype = None
     if mapset:
         # map exist, set the map type
         gtype = libraster.Rast_map_type(name, mapset)
         mtype = RTYPE_STR[gtype]
     filename = grasscore.tempfile()
     obj = np.memmap.__new__(cls,
                             filename=filename,
                             dtype=RTYPE[mtype]['numpy'],
                             mode=mode,
                             shape=shape)
     obj.mtype = mtype.upper()
     obj.gtype = gtype if gtype else RTYPE[mtype]['grass type']
     obj._rows = reg.rows
     obj._cols = reg.cols
     obj.filename = filename
     obj._name = name
     obj.mapset = mapset
     obj.reg = reg
     obj.overwrite = overwrite
     return obj
Ejemplo n.º 2
0
    def open_band_files(self):

        for n in xrange(6):

            self.data_type.append(
                raster.Rast_map_type(self.name[n], self.mapset))

            if self.data_type[n] == 0:
                ptype = POINTER(c_int)
            elif self.data_type[n] == 1:
                ptype = POINTER(c_float)
            elif self.data_type[n] == 2:
                ptype = POINTER(c_double)

            self.infd.append(raster.Rast_open_old(self.name[n], self.mapset))
            self.Bandbuf.append(raster.Rast_allocate_buf(self.data_type[n]))
            self.Bandbuf[n] = cast(c_void_p(self.Bandbuf[n]), ptype)
Ejemplo n.º 3
0
 def mtype(self):
     return RTYPE_STR[libraster.Rast_map_type(self.name, self.mapset)]
Ejemplo n.º 4
0
def _read_raster_info(name, mapset):
    """Read the raster map info from the file system and store the content
       into a dictionary

       This method uses the ctypes interface to the gis and raster libraries
       to read the map metadata information

       :param name: The name of the map
       :param mapset: The mapset of the map
       :returns: The key value pairs of the map specific metadata, or None in
                 case of an error
    """

    kvp = {}

    if not libgis.G_find_raster(name, mapset):
        return None

    # Read the region information
    region = libgis.Cell_head()
    libraster.Rast_get_cellhd(name, mapset, byref(region))

    kvp["north"] = region.north
    kvp["south"] = region.south
    kvp["east"] = region.east
    kvp["west"] = region.west
    kvp["nsres"] = region.ns_res
    kvp["ewres"] = region.ew_res
    kvp["rows"] = region.cols
    kvp["cols"] = region.rows

    maptype = libraster.Rast_map_type(name, mapset)

    if maptype == libraster.DCELL_TYPE:
        kvp["datatype"] = "DCELL"
    elif maptype == libraster.FCELL_TYPE:
        kvp["datatype"] = "FCELL"
    elif maptype == libraster.CELL_TYPE:
        kvp["datatype"] = "CELL"

    # Read range
    if libraster.Rast_map_is_fp(name, mapset):
        range = libraster.FPRange()
        libraster.Rast_init_fp_range(byref(range))
        ret = libraster.Rast_read_fp_range(name, mapset, byref(range))
        if ret < 0:
            logging.error(_("Unable to read range file"))
            return None
        if ret == 2:
            kvp["min"] = None
            kvp["max"] = None
        else:
            min = libgis.DCELL()
            max = libgis.DCELL()
            libraster.Rast_get_fp_range_min_max(byref(range), byref(min),
                                                byref(max))
            kvp["min"] = min.value
            kvp["max"] = max.value
    else:
        range = libraster.Range()
        libraster.Rast_init_range(byref(range))
        ret = libraster.Rast_read_range(name, mapset, byref(range))
        if ret < 0:
            logging.error(_("Unable to read range file"))
            return None
        if ret == 2:
            kvp["min"] = None
            kvp["max"] = None
        else:
            min = libgis.CELL()
            max = libgis.CELL()
            libraster.Rast_get_range_min_max(byref(range), byref(min),
                                             byref(max))
            kvp["min"] = min.value
            kvp["max"] = max.value

    return kvp