(
        self,
        ds,
        ulx,
        uly,
        lrx,
        lry,
        querysize=0,
        )
return ((rx, ry, rxsize, rysize), (wx, wy, wxsize, wysize))
For given dataset and query in cartographic coordinates
        returns parameters for ReadRaster() in raster coordinates and
        x/y shifts (for border tiles). If the querysize is not given, the
        extent is returned in the native resolution of dataset ds.
For given dataset and query in cartographic coordinates
        returns parameters for ReadRaster() in raster coordinates and
        x/y shifts (for border tiles). If the querysize is not given, the
        extent is returned in the native resolution of dataset ds.
For given dataset and query in cartographic coordinates returns parameters for ReadRaster () in raster coordinates and x / y shifts ( for border tiles ) . If the querysize is not given the extent is returned in the native resolution of dataset ds .
def geo_query(
        self,
        ds,
        ulx,
        uly,
        lrx,
        lry,
        querysize=0,
        ):
        """For given dataset and query in cartographic coordinates
        returns parameters for ReadRaster() in raster coordinates and
        x/y shifts (for border tiles). If the querysize is not given, the
        extent is returned in the native resolution of dataset ds."""

        geotran = ds.GetGeoTransform()
        rx = int((ulx - geotran[0]) / geotran[1] + 0.001)
        ry = int((uly - geotran[3]) / geotran[5] + 0.001)
        rxsize = int((lrx - ulx) / geotran[1] + 0.5)
        rysize = int((lry - uly) / geotran[5] + 0.5)

        if not querysize:
            (wxsize, wysize) = (rxsize, rysize)
        else:
            (wxsize, wysize) = (querysize, querysize)

        # Coordinates should not go out of the bounds of the raster

        wx = 0
        if rx < 0:
            rxshift = abs(rx)
            wx = int(wxsize * (float(rxshift) / rxsize))
            wxsize = wxsize - wx
            rxsize = rxsize - int(rxsize * (float(rxshift) / rxsize))
            rx = 0
        if rx + rxsize > ds.RasterXSize:
            wxsize = int(wxsize * (float(ds.RasterXSize - rx) / rxsize))
            rxsize = ds.RasterXSize - rx

        wy = 0
        if ry < 0:
            ryshift = abs(ry)
            wy = int(wysize * (float(ryshift) / rysize))
            wysize = wysize - wy
            rysize = rysize - int(rysize * (float(ryshift) / rysize))
            ry = 0
        if ry + rysize > ds.RasterYSize:
            wysize = int(wysize * (float(ds.RasterYSize - ry) / rysize))
            rysize = ds.RasterYSize - ry

        return ((rx, ry, rxsize, rysize), (wx, wy, wxsize, wysize))
def geo_query ( self , ds , ulx , uly , lrx , lry , querysize = 0 , ) : geotran = ds . GetGeoTransform ( ) rx = int ( ( ulx - geotran [ 0 ] ) / geotran [ 1 ] + 0.001 ) ry = int ( ( uly - geotran [ 3 ] ) / geotran [ 5 ] + 0.001 ) rxsize = int ( ( lrx - ulx ) / geotran [ 1 ] + 0.5 ) rysize = int ( ( lry - uly ) / geotran [ 5 ] + 0.5 ) if not querysize : ( wxsize , wysize ) = ( rxsize , rysize ) else : ( wxsize , wysize ) = ( querysize , querysize ) # Coordinates should not go out of the bounds of the raster wx = 0 if rx < 0 : rxshift = abs ( rx ) wx = int ( wxsize * ( float ( rxshift ) / rxsize ) ) wxsize = wxsize - wx rxsize = rxsize - int ( rxsize * ( float ( rxshift ) / rxsize ) ) rx = 0 if rx + rxsize > ds . RasterXSize : wxsize = int ( wxsize * ( float ( ds . RasterXSize - rx ) / rxsize ) ) rxsize = ds . RasterXSize - rx wy = 0 if ry < 0 : ryshift = abs ( ry ) wy = int ( wysize * ( float ( ryshift ) / rysize ) ) wysize = wysize - wy rysize = rysize - int ( rysize * ( float ( ryshift ) / rysize ) ) ry = 0 if ry + rysize > ds . RasterYSize : wysize = int ( wysize * ( float ( ds . RasterYSize - ry ) / rysize ) ) rysize = ds . RasterYSize - ry return ( ( rx , ry , rxsize , rysize ) , ( wx , wy , wxsize , wysize ) )