Exemplo n.º 1
0
def gdal_to_dat(dest, bandid='Data'):
    """
    GDAL to Data format

    Parameters
    ----------
    dest - GDAL format
        GDAL format
    bandid - str
        band identity
    """
    dat = Data()
    gtr = dest.GetGeoTransform()

    rtmp = dest.GetRasterBand(1)
    dat.data = rtmp.ReadAsArray()
    nval = rtmp.GetNoDataValue()

    dat.data = np.ma.masked_equal(dat.data, nval)
    dat.data.set_fill_value(nval)
    dat.data = np.ma.fix_invalid(dat.data)

    dat.nrofbands = dest.RasterCount
    dat.tlx = gtr[0]
    dat.tly = gtr[3]
    dat.dataid = bandid
    dat.nullvalue = nval
    dat.rows = dest.RasterYSize
    dat.cols = dest.RasterXSize
    dat.xdim = abs(gtr[1])
    dat.ydim = abs(gtr[5])
    dat.wkt = dest.GetProjection()
    dat.gtr = gtr

    return dat
Exemplo n.º 2
0
def gdal_to_dat(dest, bandid='Data'):
    """
    GDAL to Data format

    Parameters
    ----------
    dest - GDAL format
        GDAL format
    bandid - str
        band identity
    """
    dat = Data()
    gtr = dest.GetGeoTransform()

    rtmp = dest.GetRasterBand(1)
    dat.data = rtmp.ReadAsArray()
    nval = rtmp.GetNoDataValue()

    dat.data = np.ma.masked_equal(dat.data, nval)
    dat.data.set_fill_value(nval)
    dat.data = np.ma.fix_invalid(dat.data)

    dat.nrofbands = dest.RasterCount
    dat.tlx = gtr[0]
    dat.tly = gtr[3]
    dat.dataid = bandid
    dat.nullvalue = nval
    dat.rows = dest.RasterYSize
    dat.cols = dest.RasterXSize
    dat.xdim = abs(gtr[1])
    dat.ydim = abs(gtr[5])
    dat.wkt = dest.GetProjection()
    dat.gtr = gtr

    return dat
Exemplo n.º 3
0
def rtp(data, I_deg, D_deg):
    """ Reduction to the Pole """

    datamedian = np.ma.median(data.data)
    ndat = data.data - datamedian
    ndat.data[ndat.mask] = 0

    fftmod = np.fft.fft2(ndat)

    ny, nx = fftmod.shape
    nyqx = 1 / (2 * data.xdim)
    nyqy = 1 / (2 * data.ydim)

    kx = np.linspace(-nyqx, nyqx, nx)
    ky = np.linspace(-nyqy, nyqy, ny)

    KX, KY = np.meshgrid(kx, ky)

    I = np.deg2rad(I_deg)
    D = np.deg2rad(D_deg)
    alpha = np.arctan2(KY, KX)

    filt = 1 / (np.sin(I) + 1j * np.cos(I) * np.cos(D - alpha))**2

    zrtp = np.fft.ifft2(fftmod * filt)
    zrtp = zrtp.real + datamedian

    # Create dataset
    dat = Data()
    dat.data = np.ma.masked_invalid(zrtp)
    dat.data.mask = np.ma.getmaskarray(data.data)
    dat.rows, dat.cols = zrtp.shape
    dat.nullvalue = data.data.fill_value
    dat.dataid = data.dataid
    dat.tlx = data.tlx
    dat.tly = data.tly
    dat.xdim = data.xdim
    dat.ydim = data.ydim

    return dat
Exemplo n.º 4
0
def rtp(data, I_deg, D_deg):
    """ Reduction to the Pole """

    datamedian = np.ma.median(data.data)
    ndat = data.data - datamedian
    ndat.data[ndat.mask] = 0

    fftmod = np.fft.fft2(ndat)

    ny, nx = fftmod.shape
    nyqx = 1/(2*data.xdim)
    nyqy = 1/(2*data.ydim)

    kx = np.linspace(-nyqx, nyqx, nx)
    ky = np.linspace(-nyqy, nyqy, ny)

    KX, KY = np.meshgrid(kx, ky)

    I = np.deg2rad(I_deg)
    D = np.deg2rad(D_deg)
    alpha = np.arctan2(KY, KX)

    filt = 1/(np.sin(I)+1j*np.cos(I)*np.cos(D-alpha))**2

    zrtp = np.fft.ifft2(fftmod*filt)
    zrtp = zrtp.real + datamedian

# Create dataset
    dat = Data()
    dat.data = np.ma.masked_invalid(zrtp)
    dat.data.mask = np.ma.getmaskarray(data.data)
    dat.rows, dat.cols = zrtp.shape
    dat.nullvalue = data.data.fill_value
    dat.dataid = data.dataid
    dat.tlx = data.tlx
    dat.tly = data.tly
    dat.xdim = data.xdim
    dat.ydim = data.ydim

    return dat
Exemplo n.º 5
0
    def acceptall(self):
        """Accept."""
        dxy = self.dsb_dxy.value()
        nullvalue = self.dsb_null.value()
        data = self.indata['Point'][0]

        newdat = []
        for data in self.pbar.iter(self.indata['Point']):
            if data.dataid != self.dataid.currentText():
                continue

            filt = (data.zdata != nullvalue)
            x = data.xdata[filt]
            y = data.ydata[filt]
            z = data.zdata[filt]

            for i in [x, y, z]:
                filt = np.logical_not(np.isnan(i))
                x = x[filt]
                y = y[filt]
                z = z[filt]

            tmp = quickgrid(x, y, z, dxy, showtext=self.parent.showprocesslog)
            mask = np.ma.getmaskarray(tmp)
            gdat = tmp.data

            # Create dataset
            dat = Data()
            dat.data = np.ma.masked_invalid(gdat[::-1])
            dat.data.mask = mask[::-1]
            dat.nullvalue = nullvalue
            dat.dataid = data.dataid
            dat.xdim = dxy
            dat.ydim = dxy
            dat.extent = [x.min(), x.max(), y.min(), y.max()]
            newdat.append(dat)

        self.outdata['Raster'] = newdat
        self.outdata['Point'] = self.indata['Point']
Exemplo n.º 6
0
def gdal_to_dat(dest, bandid='Data'):
    """
    GDAL to Data format.

    Parameters
    ----------
    dest - GDAL format
        GDAL format
    bandid - str
        band identity
    """
    dat = Data()
    gtr = dest.GetGeoTransform()

    nbands = dest.RasterCount

    if nbands == 1:
        rtmp = dest.GetRasterBand(1)
        dat.data = rtmp.ReadAsArray()
    else:
        dat.data = []
        for i in range(nbands):
            rtmp = dest.GetRasterBand(i + 1)
            dat.data.append(rtmp.ReadAsArray())
        dat.data = np.array(dat.data)
        dat.data = np.moveaxis(dat.data, 0, -1)

    nval = rtmp.GetNoDataValue()

    dat.data = np.ma.masked_equal(dat.data, nval)
    dat.data.set_fill_value(nval)
    dat.data = np.ma.fix_invalid(dat.data)

    dat.extent_from_gtr(gtr)
    dat.dataid = bandid
    dat.nullvalue = nval
    dat.wkt = dest.GetProjection()

    return dat
Exemplo n.º 7
0
    def acceptall(self):
        """ accept """
        dxy = self.dsb_dxy.value()
        data = self.indata['Point'][0]

        newdat = []
        for data in self.pbar.iter(self.indata['Point']):
            if data.dataid != self.dataid.currentText():
                continue
            x = data.xdata
            y = data.ydata
            z = data.zdata

            for i in [x, y, z]:
                filt = np.logical_not(np.isnan(i))
                x = x[filt]
                y = y[filt]
                z = z[filt]

            tmp = quickgrid(x, y, z, dxy, showtext=self.parent.showprocesslog)
            mask = np.ma.getmaskarray(tmp)
            gdat = tmp.data

    # Create dataset
            dat = Data()
            dat.data = np.ma.masked_invalid(gdat[::-1])
            dat.data.mask = mask[::-1]
            dat.rows, dat.cols = gdat.shape
            dat.nullvalue = dat.data.fill_value
            dat.dataid = data.dataid
            dat.tlx = x.min()
            dat.tly = y.max()
            dat.xdim = dxy
            dat.ydim = dxy
            newdat.append(dat)

        self.outdata['Raster'] = newdat
        self.outdata['Point'] = self.indata['Point']
Exemplo n.º 8
0
    def tiltdepth(self, data):
        """ Calculate tilt depth """
        self.pbar.setValue(0)
        self.pbar.setMaximum(4)

        # RTP
        inc = self.dsb_inc.value()
        dec = self.dsb_dec.value()

        zout = dataprep.rtp(data, inc, dec)

        # Tilt
        self.pbar.setValue(1)

        nr, nc = zout.data.shape
        dy, dx = np.gradient(zout.data)
        dxtot = np.sqrt(dx**2 + dy**2)
        dz = cooper.vertical(zout.data)
        t1 = np.arctan(dz / dxtot)

        self.pbar.setValue(2)
        # A negative number implies we are straddling 0

        # Contour tilt
        x = zout.extent[0] + np.arange(nc) * zout.xdim + zout.xdim / 2
        y = zout.extent[-1] - np.arange(nr) * zout.ydim - zout.ydim / 2

        X, Y = np.meshgrid(x, y)
        Z = np.rad2deg(t1)
        self.X = X
        self.Y = Y
        self.Z = Z

        cnt0 = self.axes.contour(X, Y, Z, [0])
        cnt45 = self.axes.contour(X, Y, Z, [45], alpha=0)
        cntm45 = self.axes.contour(X, Y, Z, [-45], alpha=0)

        self.pbar.setValue(3)

        gx0, gy0, cgrad0, cntid0 = vgrad(cnt0)
        gx45, gy45, _, _ = vgrad(cnt45)
        gxm45, gym45, _, _ = vgrad(cntm45)

        g0 = np.transpose([gx0, gy0])

        self.pbar.setValue(4)

        dmin1 = []
        dmin2 = []

        for i, j in self.pbar.iter(g0):
            dmin1.append(distpc(gx45, gy45, i, j, 0))
            dmin2.append(distpc(gxm45, gym45, i, j, 0))

        dx1 = gx45[dmin1] - gx0
        dy1 = gy45[dmin1] - gy0

        dx2 = gxm45[dmin2] - gx0
        dy2 = gym45[dmin2] - gy0

        grad = np.arctan2(dy1, dx1) * 180 / pi
        grad[grad > 90] -= 180
        grad[grad < -90] += 180
        gtmp1 = np.abs(90 - np.abs(grad - cgrad0))

        grad = np.arctan2(dy2, dx2) * 180 / pi
        grad[grad > 90] -= 180
        grad[grad < -90] += 180
        gtmp2 = np.abs(90 - np.abs(grad - cgrad0))

        gtmp = np.logical_and(gtmp1 <= 10, gtmp2 <= 10)

        gx0 = gx0[gtmp]
        gy0 = gy0[gtmp]
        cntid0 = cntid0[gtmp]
        dx1 = dx1[gtmp]
        dy1 = dy1[gtmp]
        dx2 = dx2[gtmp]
        dy2 = dy2[gtmp]

        dist1 = np.sqrt(dx1**2 + dy1**2)
        dist2 = np.sqrt(dx2**2 + dy2**2)

        dist = np.min([dist1, dist2], 0)

        self.x0 = gx0
        self.x1 = dx1 + gx0
        self.x2 = dx2 + gx0
        self.y0 = gy0
        self.y1 = dy1 + gy0
        self.y2 = dy2 + gy0

        self.depths = np.transpose([gx0, gy0, cntid0.astype(int), dist])

        tmp = dataprep.quickgrid(gx0,
                                 gy0,
                                 dist,
                                 data.xdim,
                                 showtext=self.showtext)

        mask = np.ma.getmaskarray(tmp)
        gdat = tmp.data

        dat = Data()
        dat.data = np.ma.masked_invalid(gdat[::-1])
        dat.data.mask = mask[::-1]
        dat.nullvalue = dat.data.fill_value
        dat.dataid = data.dataid
        dat.xdim = data.xdim
        dat.ydim = data.xdim
        dat.extent = [gx0.min(), gx0.max(), gy0.min(), gy0.max()]

        self.outdata['Raster'] = [dat]
Exemplo n.º 9
0
def grid():
    """ First 2 columns must be x and y """

    filename = r'C:\Work\Programming\pygmi\data\sue\filt_magdata.csv'
    ofile = r'C:\Work\Programming\pygmi\data\magdata.tif'
    srows = 0
    dlim = None
    xcol = 0
    ycol = 1
    zcol = 2
    dxy = 15

    # This bit reads in the first line to see if it is a header
    pntfile = open(filename)
    ltmp = pntfile.readline()
    pntfile.close()
    ltmp = ltmp.lower()
    isheader = any(c.isalpha() for c in ltmp)

    # Check for comma delimiting
    if ',' in ltmp:
        dlim = ','

    # Set skip rows
    if isheader:
        srows = 1

    # Now read in data

    datatmp = np.genfromtxt(filename, unpack=True, delimiter=dlim,
                            skip_header=srows, usemask=False)

    # Now we interpolate
    xdata = datatmp[xcol]
    ydata = datatmp[ycol]
    zdata = datatmp[zcol]

    points = datatmp[:2].T

    newxdata = np.arange(xdata.min(), xdata.max(), dxy)
    newydata = np.arange(ydata.min(), ydata.max(), dxy)

    newpoints = np.meshgrid(newxdata, newydata)
    newpoints = (newpoints[0].flatten(), newpoints[1].flatten())

    grid = si.griddata(points, zdata, newpoints, method='cubic')

    grid.shape = (newydata.shape[0], newxdata.shape[0])

    grid = grid[::-1]

    # export data
    odat = Data()
    odat.dataid = ''
    odat.tlx = newxdata.min()
    odat.tly = newydata.max()
    odat.xdim = dxy
    odat.ydim = dxy
    odat.nrofbands = 1
    odat.nullvalue = 1e+20
    odat.rows, odat.cols = grid.shape
    odat.data = np.ma.masked_invalid(grid)

    tmp = pio.ExportData(None)
    tmp.ifile = ofile
#    tmp.export_ascii_xyz([odat])
#    tmp.export_gdal([odat], 'ENVI')
    tmp.export_gdal([odat], 'GTiff')

    # Plotting section

#    dataex = (newxdata.min(), newxdata.max(), newydata.min(), newydata.max())
#    plt.imshow(grid, cmap = plt.cm.jet, extent=dataex, origin='upper')

    plt.tricontourf(xdata, ydata, zdata, 40, cmap=plt.cm.jet)

#    plt.plot(xdata, ydata, '.')
    plt.colorbar()
    plt.show()

    pdb.set_trace()