Ejemplo n.º 1
0
def draw(file):
    # 1) opening maido geotiff as an array
    raster = gdal.OpenShared(file)
    data = raster.ReadAsArray()

    # 2) transformation of coordinates
    cols = raster.RasterXSize
    rows = raster.RasterYSize
    gt = raster.GetGeoTransform()

    x = (cols * gt[1]) + gt[0]
    y = (rows * gt[5]) + gt[3]

    X = np.arange(gt[0], x, gt[1] * 600)
    Y = np.arange(gt[3], y, gt[5] * 600)

    # 3) creation of a simple grid
    X, Y = np.meshgrid(X, Y)

    plt.title('2000')

    parameters = np.linspace(0, 110, 10)
    norm = matplotlib.colors.Normalize(vmin=np.min(parameters),
                                       vmax=np.max(parameters))

    #     choose a colormap
    c_m = matplotlib.cm.cool
    #     create a ScalarMappable and initialize a data structure
    s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
    s_m.set_array([])

    fig = plt.figure(figsize=(12, 8))
    plt.imshow(data, cmap=c_m)
    plt.colorbar(s_m)
Ejemplo n.º 2
0
def rststats(time,rasterfile):
    dataset = gdal.OpenShared(rasterfile)

    if dataset is None:
        print("Failed to open file: " + rasterfile)
        sys.exit(1)

    band = dataset.GetRasterBand(1)
    xsize = dataset.RasterXSize
    ysize = dataset.RasterYSize
    print "Output file %s size:" % rasterfile, xsize, ysize

    rastervalue = band.ReadAsArray(xoff=0, yoff=0, win_xsize=xsize, win_ysize=ysize)

    count1 = np.sum(rastervalue == 1)
    count2 = np.sum(rastervalue == 2)
    count3 = np.sum(rastervalue == 3)
    count4 = np.sum(rastervalue == 4)
    count5 = np.sum(rastervalue == 5)


    data = {}
    data["time"] = time
    data["class1"] = count1
    data["class2"] = count2
    data["class3"] = count3
    data["class4"] = count4
    data["class5"] = count5


    stats_str = json.dumps(data)
    return stats_str
Ejemplo n.º 3
0
def vrtfilt_3():

    ds = gdal.OpenShared('data/rgbsmall.tif')
    vrt_ds = gdal.GetDriverByName('VRT').CreateCopy('', ds)
    ds = None

    filterSourceXML = """    <KernelFilteredSource>
      <SourceFilename>data/rgbsmall.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SrcRect xOff="0" yOff="0" xSize="50" ySize="50"/>
      <DstRect xOff="0" yOff="0" xSize="50" ySize="50"/>
      <Kernel>
        <Size>3</Size>
        <Coefs>0.111111 0.111111 0.111111 0.111111 0.111111 0.111111 0.111111 0.111111 0.111111</Coefs>
      </Kernel>
    </KernelFilteredSource>"""

    try:
        vrt_ds.GetRasterBand(1).SetMetadataItem
    except:
        return 'skip'

    vrt_ds.GetRasterBand(1).SetMetadataItem('source_0', filterSourceXML,
                                            'vrt_sources')
    if vrt_ds.GetRasterBand(1).Checksum() != 21890:
        return 'fail'

    return 'success'
Ejemplo n.º 4
0
def test():
    tif = '/root/PycharmProjects/ANNRK/data/ok_china_40km.tif'
    raster = gdal.OpenShared(tif)
    arr = raster.ReadAsArray()
    max = np.max(arr)
    min = np.min(arr)
    misc.toimage(arr, high=max, low=min).save('/tmp/test.jpg')
Ejemplo n.º 5
0
def gdal_read_rs2_dim_format(data_dir_path, roi=None):
    rbs0 = {}
    rb_keys = defs.S2_SLC_IDX
    if roi is not None:
        x0 = roi[0]
        y0 = roi[1]
        w = roi[2]
        h = roi[3]
    ds_list = []
    for k, key in enumerate(rb_keys.keys()):
        file_path = os.path.join(data_dir_path, f"{key}.img")
        ds_list.append(gdal.OpenShared(file_path, gdal.GA_ReadOnly))
        rb = ds_list[k]
        rbs0[key] = rb

    rbs = []
    rbs.append(rbs0['i_HH'].ReadAsArray(x0, y0, w, h) +
               1j * rbs0['q_HH'].ReadAsArray(x0, y0, w, h))
    rbs.append(rbs0['i_HV'].ReadAsArray(x0, y0, w, h) +
               1j * rbs0['q_HV'].ReadAsArray(x0, y0, w, h))
    rbs.append(rbs0['i_VH'].ReadAsArray(x0, y0, w, h) +
               1j * rbs0['q_VH'].ReadAsArray(x0, y0, w, h))
    rbs.append(rbs0['i_VV'].ReadAsArray(x0, y0, w, h) +
               1j * rbs0['q_VV'].ReadAsArray(x0, y0, w, h))

    data = {}
    data['BANDS_IDX'] = defs.S2_IDX
    data['X0_ORIGINAL'] = x0
    data['Y0_ORIGINAL'] = y0
    data['W_ORIGINAL'] = w
    data['H_ORIGINAL'] = h
    data['RASTER_BANDS'] = np.dstack(rbs).transpose(2, 0, 1)
    ds_list = None
    return data
Ejemplo n.º 6
0
def tif2png(tif):
    # rst_file = '/root/PycharmProjects/ANNRK/AT_2016_year_2016.tif'
    raster = gdal.OpenShared(tif)
    data = raster.ReadAsArray()

    # cmap = plt.cm.jet
    png = tif.replace('tif', 'png')
    # plt.imsave(png, data, cmap=cmap)

    min = np.nanmin(data)
    max = np.nanmax(data)
    print('当前处理数据:', tif)
    print('最小值和最大值:', min, max)
    if min < max:
        try:
            cmap = matplotlib.colors.LinearSegmentedColormap.from_list(
                'cmap', [
                    '#FFFFFF', '#98F5FF', '#00FF00', '#FFFF00', '#FF0000',
                    '#8B0000'
                ], 256)
            plt.imshow(data, cmap=cmap)
            plt.colorbar(ticks=[min, max])
            plt.savefig(png)
            plt.close()
        except:
            print('绘图失败!')
    else:
        print('最小值大于等于最大值,数据不对,无法绘图')
        return
Ejemplo n.º 7
0
def process_tile(tile, items):
    data = {}
    template = None
    print 'Processing', tile
    for year, filename in items.items():
        ds = gdal.OpenShared(filename)
        if template is None:
            template = ds
        band = ds.GetRasterBand(1)
        data[year] = band.ReadAsArray()

    # calculate trend
    years = data.keys()
    dim = data[years[0]].shape
    height, width = dim
    slope = np.ndarray(dim, dtype=np.float32)
    correl = np.ndarray(dim, dtype=np.float32)
    stderr = np.ndarray(dim, dtype=np.float32)
    pval = np.ndarray(dim, dtype=np.float32)
    for i in range(height):
        #sys.stderr.write('\r%d   ' % (height-i))
        for j in range(width):
            values = [data[y][i][j] for y in years]
            rc, intercept, rvalue, pvalue, evalue = linregress(years, values)
            slope[i][j] = rc
            correl[i][j] = rvalue
            stderr[i][j] = evalue
            pval[i][j] = pvalue
    save(SRC, 'slope/NDVI.{tile}.slope'.format(tile=tile), slope, template)
    save(SRC, 'correl/NDVI.{tile}.correl'.format(tile=tile), correl, template)
    save(SRC, 'stderr/NDVI.{tile}.stderr'.format(tile=tile), stderr, template)
    save(SRC, 'pvalue/NDVI.{tile}.pvalue'.format(tile=tile), pval, template)

    return tile
Ejemplo n.º 8
0
def gdal_read_rs2_array(file_path, roi=None, preprocessing=UNCALIB):
    if os.path.isdir(file_path):
        logger.debug("trying to load a beam-dimap")
        data = gdal_read_rs2_dim_format(file_path, roi=roi)
        return data

    file_path0 = file_path
    if preprocessing != UNCALIB:
        file_path0 = f"{RSAT2_PROCESSING[preprocessing]}:{file_path}"

    print(file_path0)
    ds = gdal.OpenShared(file_path0, gdal.GA_ReadOnly)
    if ds is None:
        raise Exception(f"unable to read product {file_path}")
    driver_name = ds.GetDriver().ShortName

    x0 = 0
    y0 = 0
    w = ds.RasterXSize
    h = ds.RasterYSize
    chs = ds.RasterCount

    rbs = []
    idx = {}
    data = None

    if driver_name == "RS2":
        data = {}
        rbs0 = {}
        for k in range(chs):
            rb = ds.GetRasterBand(k + 1)
            metadata = rb.GetMetadata()
            id = metadata["POLARIMETRIC_INTERP"]
            rbs0[id] = rb
        for key, chn in zip(defs.S2_IDX.keys(), defs.S2_IDX.values()):
            rbs.append(read_as_array(rbs0[key], roi))
        idx = defs.S2_IDX.keys()

    elif driver_name == "GTiff":
        data = {}
        for key, k in zip(defs.S2_IDX.keys(), defs.S2_IDX.values()):
            i = 2 * k + 1
            q = 2 * k + 2
            rb_i = ds.GetRasterBand(i)
            rb_q = ds.GetRasterBand(q)
            rbs.append(
                read_as_array(rb_i, roi) + 1j * read_as_array(rb_q, roi))
        idx = defs.S2_IDX.keys()
    else:
        return data

    data['BANDS_IDX'] = idx
    data['X0_ORIGINAL'] = x0
    data['Y0_ORIGINAL'] = y0
    data['W_ORIGINAL'] = w
    data['H_ORIGINAL'] = h
    data['RASTER_BANDS'] = np.dstack(rbs).transpose(2, 0, 1)
    ds = None
    return data
Ejemplo n.º 9
0
def misc_3():

    ds = gdal.OpenShared('../gdrivers/data/small16.aux')
    ds.GetRasterBand(1).Checksum()
    cache_size = gdal.GetCacheUsed()

    ds2 = gdal.OpenShared('../gdrivers/data/small16.aux')
    ds2.GetRasterBand(1).Checksum()
    cache_size2 = gdal.GetCacheUsed()

    if cache_size != cache_size2:
        print("--> OpenShared didn't work as expected")

    ds = None
    ds2 = None

    return 'success'
Ejemplo n.º 10
0
def checkds(filepath,forcegeo):
  ds = gdal.OpenShared(filepath)
  if ds is not None:
    if forcegeo == 1 and ds.GetGeoTransform() == (0, 1, 0, 0, 0, 1):
      return False
    else:
      return True
  else:
    return False
Ejemplo n.º 11
0
def getdsdetails(filepath):
  ds = gdal.OpenShared(filepath) 
  print "*Calculating dataset stats for raster ",filepath
  bandcount = ds.RasterCount
  geotrans = ds.GetGeoTransform()
  driver = ds.GetDriver().LongName
  wkt = ds.GetProjection()
  rasterx = ds.RasterXSize
  rastery = ds.RasterYSize  
  dsstring = '|'.join([filepath, str(bandcount), str(geotrans),str(driver),str(rasterx),str(rastery),wkt])
  return dsstring, bandcount, ds
Ejemplo n.º 12
0
def read_raster(tif):
    raster = gdal.OpenShared(tif)
    if raster is None:
        print("Failed to open file:" + tif)
        sys.exit()
    cols = raster.RasterXSize
    rows = raster.RasterYSize
    print "the tif size is cols: %s, rows: %s" % (cols, rows)
    gt = raster.GetGeoTransform()
    extent = GetExtent(gt, cols, rows)
    print 'the extent of the coordinates of the image is %s' % extent
    return raster
Ejemplo n.º 13
0
def misc_2():

    tab_ds = [None for i in range(5000)]
    for i in range(len(tab_ds)):
        tab_ds[i] = gdal.OpenShared('data/byte.tif')
        if tab_ds[i] is None:
            return 'fail'

    for i in range(len(tab_ds)):
        tab_ds[i] = None

    return 'success'
Ejemplo n.º 14
0
    def create_cb(self, *args):
        bands = self.input_frame.get_output_bands()
        if len(bands) == 0:
            gvutils.error('No output bands specified!')
            return

        vrtbase = [gdal.CXT_Element, 'VRTDataset']
        vrtbase.append([
            gdal.CXT_Attribute, 'rasterXSize',
            [gdal.CXT_Text, str(bands[0][0].RasterXSize)]
        ])
        vrtbase.append([
            gdal.CXT_Attribute, 'rasterYSize',
            [gdal.CXT_Text, str(bands[0][0].RasterYSize)]
        ])

        # Metadata is currently taken from first output band.
        # This may be updatable later.
        mbase = vrtutils.serializeMetadata(bands[0][0])
        if mbase is not None:
            vrtbase.append(mbase)

        gbase = self.geo_frame.get_geocoding()
        for item in gbase:
            vrtbase.append(item)

        outband = 1
        for item in bands:
            dict = {}
            dict['band'] = outband
            dict['SourceBand'] = item[1]
            dict['ColorInterp'] = 'Undefined'
            bbase = vrtutils.serializeBand(item[0], opt_dict=dict)
            vrtbase.append(bbase)
            outband = outband + 1

        vrtlines = gdal.SerializeXMLTree(vrtbase)

        vrtds = gdal.OpenShared(vrtlines)

        if args[1] == 'Save':
            fname = GtkExtra.file_sel_box(title="Save File")
            if fname is None:
                return
            driver = gdal.GetDriverByName('VRT')
            driver.CreateCopy(fname, vrtds)
        elif args[1] == 'New':
            self.app.new_view()
            self.app.open_gdal_dataset(vrtds)
        else:
            self.app.open_gdal_dataset(vrtds)
Ejemplo n.º 15
0
 def get_cached_value(self, filename, lon, lat):
     """ Get a single value at (lon,lat) from cache """
     path = os.path.join(self.cache, filename)
     ds = gdal.OpenShared(path)
     fwd = ds.GetGeoTransform()
     inv = gdal.InvGeoTransform(fwd)
     # older versions of gdal have a different signature of InvGeoTransform()
     if inv and len(inv) == 2:
         _success, inv = inv
     x, y = gdal.ApplyGeoTransform(inv, lon, lat)
     x = int(max(0, min(ds.RasterXSize - 1, x)))
     y = int(max(0, min(ds.RasterYSize - 1, y)))
     value = ds.GetRasterBand(1).ReadAsArray(x, y, 1, 1)
     return value[0][0]
Ejemplo n.º 16
0
 def get_dataset(self, name):
     sets = self.hdf.GetMetadata('SUBDATASETS')
     i = 1
     while True:
         key = 'SUBDATASET_%d_DESC' % i
         if not key in sets:
             break
         desc = sets[key]
         if name in desc:
             key = 'SUBDATASET_%d_NAME' % i
             name = sets[key]
             return gdal.OpenShared(name)
         i += 1
     return None
Ejemplo n.º 17
0
def rst2arr(rasterfile):
    dataset = gdal.OpenShared(rasterfile)
    if dataset is None:
        print("Failed to open file: " + rasterfile)
        sys.exit(1)
    band = dataset.GetRasterBand(1)
    xsize = dataset.RasterXSize #xsize means number of columns
    ysize = dataset.RasterYSize # ysize means number of rows
    #proj = dataset.GetProjection()
    #geotrans = dataset.GetGeoTransform()
    #noDataValue = band.GetNoDataValue()
    print "Output file %s size:" % rasterfile, xsize, ysize
    rastervalue = band.ReadAsArray(xoff=0, yoff=0, win_xsize=xsize, win_ysize=ysize)
    return rastervalue
Ejemplo n.º 18
0
def arr2rst(ref_tif, arr, dst_file):
    dataset = gdal.OpenShared(ref_tif)
    proj = dataset.GetProjection()
    geotrans = dataset.GetGeoTransform()
    # noDataValue = band.GetNoDataValue()
    # output the array in geotiff format
    xsize, ysize = arr.shape
    dst_format = 'GTiff'
    dst_nbands = 1
    dst_datatype = gdal.GDT_Float32

    driver = gdal.GetDriverByName(dst_format)
    dst_ds = driver.Create(dst_file, ysize, xsize, dst_nbands, dst_datatype)
    dst_ds.SetGeoTransform(geotrans)
    dst_ds.SetProjection(proj)
    # dst_ds.GetRasterBand(1).SetNoDataValue(noDataValue)
    dst_ds.GetRasterBand(1).WriteArray(arr)
Ejemplo n.º 19
0
    def update_default_frame(self, fname):
        nchars = self.default_scrolled_text.get_length()
        self.default_scrolled_text.backward_delete(nchars)
        if fname is None:
            self.default_fname = None
            self.default_geotransform = None
            self.default_gcps = None
            self.default_prj = ''
            return

        sr = osr.SpatialReference()

        fh = gdal.OpenShared(fname)
        prj = ''
        geot = fh.GetGeoTransform()
        if ((tuple(geot) == (0, 1, 0, 0, 0, 1))
                or (tuple(geot) == (0.0, 1.0, 0.0, 0.0, 0.0, 1.0))):
            self.default_geotransform = None
            gcps = fh.GetGCPs()
            if len(gcps) > 0:
                self.default_gcps = gcps
                txt = 'Type of Geocoding: GCPs (' + str(len(gcps)) + ')\n\n'
                prj = fh.GetGCPProjection()
                if sr.ImportFromWkt(prj) == 0:
                    prjtxt = sr.ExportToPrettyWkt(simplify=1)
                else:
                    prjtxt = ''
                txt = txt + 'Projection: ' + prjtxt
            else:
                self.default_gcps = None
                txt = 'Type of Geocoding: None\n\nProjection: None'
        else:
            self.default_geotransform = geot
            self.default_gcps = None
            txt = 'Type of Geocoding: Geotransform\n\n'
            prj = fh.GetProjection()
            if sr.ImportFromWkt(prj) == 0:
                prjtxt = sr.ExportToPrettyWkt(simplify=1)
            else:
                prjtxt = ''
            txt = txt + 'Projection: ' + prjtxt

        self.default_scrolled_text.insert_defaults(txt)
        self.default_prj = prj
        self.default_fname = fname
Ejemplo n.º 20
0
def arr2rst(arr, dst_file):
    rst = "/mnt/mfs/zjh/rspm25/PM25_CIESIN/china/cnPM25_199801_200012.tif"
    dataset = gdal.OpenShared(rst)
    proj = dataset.GetProjection()
    geotrans = dataset.GetGeoTransform()
    #noDataValue = band.GetNoDataValue()
    # output the array in geotiff format
    xsize, ysize = arr.shape
    dst_format = 'GTiff'
    dst_nbands = 1
    dst_datatype = gdal.GDT_UInt32

    driver = gdal.GetDriverByName(dst_format)
    dst_ds = driver.Create(dst_file, ysize, xsize, dst_nbands, dst_datatype)
    dst_ds.SetGeoTransform(geotrans)
    dst_ds.SetProjection(proj)
    #dst_ds.GetRasterBand(1).SetNoDataValue(noDataValue)
    dst_ds.GetRasterBand(1).WriteArray(arr)
Ejemplo n.º 21
0
    def __gdal_dataset_default(self):
        """DiskReader implementation."""

        if not os.path.exists(self.file_name):
            return None
        if os.path.splitext(self.file_name)[1].lower() not in self.file_types:
            raise RuntimeError('Filename %s does not have extension type %s.' %
                               (self.file_name, self.file_types))

        dataset = gdal.OpenShared(self.file_name, gdalconst.GA_ReadOnly)
        if dataset is None:
            raise ValueError('Dataset %s did not load properly.' %
                             self.file_name)

        # Sanity checks.
        assert dataset.RasterCount > 0

        # Seems okay...
        return dataset
Ejemplo n.º 22
0
    def import_cb(self, *args):
	# Check if the parameters valid
	filename = self.open_entry.get_text()
	if filename is '':
	    gvutils.error('You should select a raw file to load!')
	    return
        
	if not os.path.isfile(filename):
	    gvutils.error('Unable to load '+ filename)
	    return

        if args[1] == 'Save':
            self.create_header(filename)
        else:
            lines=self.create_vrt_lines(filename)
            vrtds=gdal.OpenShared(lines)
            if args[1] == 'New':
                self.app.new_view()
            self.app.open_gdal_dataset(vrtds)
Ejemplo n.º 23
0
def vrtwarp_2():

    try:
        os.remove('tmp/warp.vrt')
    except:
        pass

    gcp_ds = gdal.OpenShared('data/rgb_gcp.vrt', gdal.GA_ReadOnly)

    gdaltest.vrtwarp_ds = gdal.AutoCreateWarpedVRT(gcp_ds)

    gcp_ds = None

    checksum = gdaltest.vrtwarp_ds.GetRasterBand(2).Checksum()
    expected = 21504
    if checksum != expected:
        gdaltest.post_reason( 'Got checksum of %d instead of expected %d.' \
                              % (checksum, expected) )
        return 'fail'

    return 'success'
Ejemplo n.º 24
0
def grid_feature(gridx, gridy, grid_proj, feat_file):
    '''
    根据格网位置读取对应的栅格数据的数值
    :param gridx: 横坐标数组
    :param gridy: 纵坐标数组
    :param grid_proj: 格网投影
    :param feat_file: 栅格数据
    :return: 格网数据
    '''
    feat_rst = gdal.OpenShared(feat_file)
    feat_proj = feat_rst.GetProjectionRef()
    grid_X = []
    for x in gridx:
        for y in gridy:
            x_c, y_c = point_geotransform(grid_proj, feat_proj, x, y)
            feat = read_value_fcoord(feat_file, x_c, y_c)
            # print feat
            if feat is None or feat == 0:
                continue
            grid_X.append([x, y, feat])
    return np.array(grid_X)
Ejemplo n.º 25
0
def _fromFile(fname):
    """
    Parameters
    ----------
    fname : str  # file name
    
    Returns
    -------
    GeoArray

    Purpose
    -------
    Create GeoArray from file

    """
    
    # fobj = gdal.OpenShared(fname, gdal.GA_Update)
    fobj = gdal.OpenShared(fname)
    if fobj:
        return _fromDataset(fobj)
    raise IOError("Could not open file: {:}".format(fname))
Ejemplo n.º 26
0
    def copy_gcps_cb(self, *args):
        """ Copy gcps from an existing gdal dataset. """
        fname = GtkExtra.file_sel_box(title="Select GDAL Dataset")
        if fname is None:
            return

        try:
            fh = gdal.OpenShared(fname)
        except:
            gvutils.error('Unable to open ' + fname + ' as a GDAL dataset!')
            return

        gcps = fh.GetGCPs()
        prj = fh.GetGCPProjection()
        self.clear_gcps()
        for gcp in gcps:
            ngcp = CopyGDALGCP(gcp)
            self.gcplist.append(ngcp)
        self.gcpgrid.refresh()

        self.gcpprjbox.set_input_projection(prj)
Ejemplo n.º 27
0
def stats():
    for k in range(8):
        statfile = os.path.join(dst_dir, 'stats' + '_c' + str(k) + '.csv')
        stat_arr = np.array([])
        for t in range(t_num):
            rstname = os.path.join(dst_dir,
                                   t_series[t] + '_c' + str(k) + '.tif')
            print("file %s will be statisticed" % rstname)
            dataset = gdal.OpenShared(rstname)

            if dataset is None:
                print("Failed to open file: " + rstname)
                sys.exit(1)

            band = dataset.GetRasterBand(1)
            xsize = dataset.RasterXSize
            ysize = dataset.RasterYSize
            rv = band.ReadAsArray(xoff=0,
                                  yoff=0,
                                  win_xsize=xsize,
                                  win_ysize=ysize)

            if np.sum(rv) == 0:
                break

            max = np.max(rv[(rv > 0)])
            min = np.min(rv[(rv > 0)])
            mean = np.mean(rv[(rv > 0)])
            median = np.median(rv[(rv > 0)])
            var = np.var(rv[(rv > 0)])

            arr = np.array([max, min, mean, median, var])
            stat_arr = np.append(stat_arr, arr)
        stat_arr = stat_arr.reshape(-1, 5)

        frame = DataFrame(stat_arr)
        frame.to_csv(statfile)

        print("file %s has been statisticed successfully" % rstname)
Ejemplo n.º 28
0
def rststats(rasterfile):
    dataset = gdal.OpenShared(rasterfile)
    if dataset is None:
        print("Failed to open file: " + rasterfile)
        sys.exit(1)
    band = dataset.GetRasterBand(1)
    xsize = dataset.RasterXSize
    ysize = dataset.RasterYSize
    print "Output file %s size:" % rasterfile, xsize, ysize
    rastervalue = band.ReadAsArray(xoff=0,
                                   yoff=0,
                                   win_xsize=xsize,
                                   win_ysize=ysize)
    data = np.array([])
    count1 = np.sum(rastervalue == 1)
    count2 = np.sum(rastervalue == 2)
    count3 = np.sum(rastervalue == 3)
    count4 = np.sum(rastervalue == 4)
    count5 = np.sum(rastervalue == 5)
    count6 = np.sum(rastervalue == 6)
    data = np.append(data, [count1, count2, count3, count4, count5, count6])
    return data
Ejemplo n.º 29
0
    def read_by_point(self, x, y, tif_file):
        '''
        获取坐标点的数据。
        tif_file    :数据产品
        bandid   :波段名称
        x, y:坐标,坐标对应投影信息默认为:EPSG:4326
        '''
        raster = gdal.OpenShared(tif_file)
        if raster is None:
            print("Failed to open file: " + tif_file)
            sys.exit()
        feat_proj = raster.GetProjectionRef()
        gt = raster.GetGeoTransform()

        # transform geographic coordinates of monitor points into projected coordinate system
        inSpatialRef = osr.SpatialReference()
        inSpatialRef.SetFromUserInput("EPSG:4326")
        outSpatialRef = osr.SpatialReference()
        outSpatialRef.SetFromUserInput(feat_proj)
        transform = osr.CoordinateTransformation(inSpatialRef, outSpatialRef)

        # point coordinate transformation
        geom = ogr.Geometry(ogr.wkbPoint)
        geom.AddPoint(x, y)
        geom.Transform(transform)
        x_c = geom.GetX()
        y_c = geom.GetY()

        # read feature value of the point from related data
        col = int((x_c - gt[0]) / gt[1])
        row = int((y_c - gt[3]) / gt[5])

        # print(col, row)
        if col < raster.RasterXSize and row < raster.RasterYSize:
            return raster.ReadAsArray(col, row, 1, 1)[0][0]
            # print(feat_value)
        else:
            return None
Ejemplo n.º 30
0
    def file_selection_ok(self, *args):
        self.source_name = self.o_s_d.get_filename()
        self.o_s_d.hide()

        rast = gdal.OpenShared(self.source_name, gdalconst.GA_ReadOnly)
        self.input_rast = rast

        self.pixsubarea = [0, 0, rast.RasterYSize, rast.RasterXSize]
        SetInitialCoord(self.frame_dict['pixcoord'], self.pixsubarea)

        self.geotransform = rast.GetGeoTransform()

        if EmptyGeotransform(self.geotransform):
            self.coord_system.set_history(0)
            self.update_gui()
            self.coord_system.hide()
        else:
            self.projsubarea = GetProjRect(self.pixsubarea, self.geotransform)
            SetInitialCoord(self.frame_dict['geocoord'], self.projsubarea)

            self.geogsubarea = GetGeogrRect(rast, self.projsubarea)
            SetInitialCoord(self.frame_dict['geodetic'], self.geogsubarea)

        self.band_list = []
        for i in range(rast.RasterCount):
            item = ["Band " + str(i), "Yes"]
            self.band_list.append(item)
        if len(self.band_list) > 1:
            self.band_grid.set_source(self.band_list, expose=0)
            grid_titles = ['Band number', 'Load']
            self.band_grid.define_columns(titles=grid_titles, editables=[0, 1])
            self.band_grid.resize_to_default()
            for i in range(len(self.band_list)):
                self.band_num_list.append(i + 1)
            self.band_grid.show_all()
        else:
            self.band_grid.hide()
        self.dialog.show()