Esempio n. 1
0
def dem_degree2meter(demfile):
    """
    compute the spatial resolution in meters for a DEM with WGS84 degree coordinates.
    
    Parameters
    ----------
    demfile: str
        the DEM file

    Returns
    -------
    tuple
        (posting_east, posting_north)
    
    See Also
    --------
    spatialist.auxil.haversine
    """
    with Raster(demfile) as ras:
        res_lon, res_lat = ras.res
        lat = (ras.geo['ymin'] + ras.geo['ymax']) / 2
        lon = (ras.geo['xmin'] + ras.geo['xmax']) / 2
    post_north = haversine(lat, lon, lat + res_lat, lon)
    post_east = haversine(lat, lon, lat, lon + res_lon)
    return post_east, post_north
Esempio n. 2
0
def ovs(parfile, targetres):
    """
    compute DEM oversampling factors for a target resolution in meters

    Parameters
    ----------
    parfile: str
        a GAMMA DEM parameter file
    targetres: int or float
        the target resolution in meters
    
    Returns
    -------
    tuple of float
        the oversampling factors for latitude and longitude
    """
    # read DEM parameter file
    dempar = ISPPar(parfile)

    # extract coordinates and pixel posting of the DEM
    if hasattr(dempar, 'post_north'):
        post_north, post_east = [
            abs(float(x)) for x in [dempar.post_north, dempar.post_east]
        ]
    else:
        res_lat, res_lon = [
            abs(float(x)) for x in [dempar.post_lat, dempar.post_lon]
        ]

        # compute center coordinate
        lat = float(dempar.corner_lat) - (res_lat * (dempar.nlines // 2))
        lon = float(dempar.corner_lon) + (res_lon * (dempar.width // 2))

        # convert DEM resolution to meters
        post_north = haversine(lat, lon, lat + res_lat, lon)
        post_east = haversine(lat, lon, lat, lon + res_lon)

    # compute resampling factors for the DEM
    ovs_lat = post_north / targetres
    ovs_lon = post_east / targetres
    return ovs_lat, ovs_lon
Esempio n. 3
0
def test_haversine():
    assert haversine(50, 10, 51, 10) == 111194.92664455889