示例#1
0
def test_vreckon():
    """ tests scalars, vectors"""

    # scalar
    assert vreckon(*ll0, sr[0], az[0]) == approx((lat2[0], lon2[0], az2[0]))
    # az vector
    a, b, c = vreckon(*ll0, sr[0], az)
    assert a == approx(lat2)
    assert b == approx(lon2)
    assert c == approx(az2)
    # rng, az vectors
    a, b, c = vreckon(*ll0, sr, az)
    assert a == approx(lat3)
    assert b == approx(lon3)
    assert c == approx(az3)
示例#2
0
def test_identity(lat, lon, slantrange, az):
    lat1, lon1 = vincenty.vreckon(lat, lon, slantrange, az)

    dist, az1 = vincenty.vdist(lat, lon, lat1, lon1)

    assert dist == approx(slantrange)
    assert az1 == approx(az)
示例#3
0
def test_vreckon():
    """ tests scalars, vectors"""
    pytest.importorskip('pytest', minversion='3.5')

    # scalar
    assert vreckon(*ll0, sr[0], az[0]) == approx((lat2[0], lon2[0], az2[0]))
    # az vector
    a, b, c = vreckon(*ll0, sr[0], az)
    assert a == approx(lat2)
    assert b == approx(lon2)
    assert c == approx(az2)
    # rng, az vectors
    a, b, c = vreckon(*ll0, sr, az)
    assert a == approx(lat3)
    assert b == approx(lon3)
    assert c == approx(az3)
示例#4
0
def test_unit(lat, lon, srange, az, lato, lono):
    lat1, lon1 = vincenty.vreckon(lat, lon, srange, az)

    assert lat1 == approx(lato)
    assert isinstance(lat1, float)

    assert lon1 == approx(lono, rel=0.001)
    assert isinstance(lon1, float)
def download(site: str):

    # %% SITE
    site = site.lower()

    DataAccessLayer.changeEDEXHost('edex-cloud.unidata.ucar.edu')
    request = DataAccessLayer.newDataRequest()
    request.setDatatype('radar')
    request.setLocationNames(site)

    # %% TIME
    times = DataAccessLayer.getAvailableTimes(request)
    times = [parse(str(t)) for t in times]

    timerange = TimeRange(times[0], times[-1])

    # %% REQUEST
    client = ThriftClient.ThriftClient('edex-cloud.unidata.ucar.edu')
    request = GetRadarDataRecordRequest()
    request.setTimeRange(timerange)
    request.setRadarId(site)

    code = 'N0Q'

    request.setProductCode(nexrad[code]['id'])
    request.setPrimaryElevationAngle(nexrad[code]['elev'])
    response = client.sendRequest(request)

    records = response.getData()
    print(f'found {len(records)} records at {site}')

    if not response.getData():
        raise OSError(f'data not available {timerange}')

    for rec in records:
        idra = rec.getHdf5Data()
        rdat, azdat, depVals, threshVals = RadarCommon.get_hdf5_data(idra)
        # dim = rdat.getDimension()
        lat, lon = float(rec.getLatitude()), float(rec.getLongitude())
        radials, rangeGates = rdat.getSizes()

        # Convert raw byte to pixel value
        array = np.array(rdat.getByteData())
        array[array < 0] = array[array < 0] + 256

        if azdat:
            azVals = azdat.getFloatData()
            az = np.array(RadarCommon.encode_radial(azVals))
            # dattyp = RadarCommon.get_data_type(azdat)
            az = np.append(az, az[-1])

        # header = RadarCommon.get_header(rec, format, rangeGates, radials, azdat, 'description')
        rng = np.linspace(0, rangeGates, rangeGates + 1) * nexrad[code]['res']

        lats = np.empty((rng.size, az.size))
        lons = np.empty_like(lats)
        for i, a in enumerate(az):
            lats, lons, _ = vreckon(lat, lon, rng, a)
示例#6
0
def bench_vreckon(N: int) -> float:

    sr = np.random.random(N)
    az = np.random.random(N)

    tic = time()
    a, b, c = vreckon(*ll0, sr, az)

    return time() - tic
示例#7
0
def bench_vreckon(N: int) -> float:

    sr = np.random.random(N)
    az = np.random.random(N)

    tic = time.monotonic()
    a, b = vreckon(ll0[0], ll0[1], sr, az)

    return time.monotonic() - tic
示例#8
0
def test_vdist():
    lat1, lon1, a21 = vreckon(*ll0, sr[0], az[0])

    assert vdist(*ll0, lat1, lon1) == approx((sr[0], az[0], a21))
    # lat, lon vectors
    asr, aaz, aa21 = vdist(*ll0, lat2, lon2)

    assert np.all(sr[0] == approx(asr))  # for older pytest
    assert aaz == approx(az)
示例#9
0
def bench_vreckon(N: int) -> float:

    sr = np.random.random(N)
    az = np.random.random(N)

    tic = time()
    a, b, c = vreckon(*ll0, sr, az)

    return time() - tic
示例#10
0
def main():
    p = ArgumentParser(description='Python port of vreckon.m')
    p.add_argument('lat', help='latitude WGS-84 [degrees]', type=float)
    p.add_argument('lon', help='longitude WGS-84 [degrees]', type=float)
    p.add_argument('range', help='range from start point [meters]', type=float)
    p.add_argument('azimuth', help='azimuth to start [deg.]', type=float)
    P = p.parse_args()

    lat2, lon2, a21 = vreckon(P.lat, P.lon, P.range, P.azimuth)
    print('new (lat, lon)  ({}, {}) '.format(lat2, lon2))
    print('az back to start:', a21)
示例#11
0
def test_vdist():
    pytest.importorskip('pytest', minversion='3.5')

    lat1, lon1, a21 = vreckon(*ll0, sr[0], az[0])

    assert vdist(*ll0, lat1, lon1) == approx((sr[0], az[0], a21))
    # lat, lon vectors
    asr, aaz, aa21 = vdist(*ll0, lat2, lon2)

    assert np.all(sr[0] == approx(asr))  # for older pytest
    assert aaz == approx(az)
示例#12
0
def test_compare_vicenty():
    taz, tsr = 38, 3000
    pyproj = pytest.importorskip('pyproj')

    lat2, lon2, a21 = vreckon(10, 20, tsr, taz)

    p4lon, p4lat, p4a21 = pyproj.Geod(ellps='WGS84').fwd(lon2, lat2, taz, tsr)
    assert (p4lon, p4lat, p4a21 % 360.) == approx((lon2, lat2, a21), rel=0.0025)

    p4az, p4a21, p4sr = pyproj.Geod(ellps='WGS84').inv(20, 10, lon2, lat2)
    assert (p4az, p4a21 % 360., p4sr) == approx((taz, a21, tsr))
示例#13
0
文件: vreckon.py 项目: nhz2/pymap3d
def main():
    p = ArgumentParser(description="Given starting latitude, longitude: find final lat,lon for distance and azimuth")
    p.add_argument("lat", help="latitude WGS-84 [degrees]", type=float)
    p.add_argument("lon", help="longitude WGS-84 [degrees]", type=float)
    p.add_argument("range", help="range from start point [meters]", type=float)
    p.add_argument("azimuth", help="clockwise from north: azimuth to start [degrees]", type=float)
    P = p.parse_args()

    lat2, lon2, a21 = vreckon(P.lat, P.lon, P.range, P.azimuth)

    print("{:.4f} {:.4f}".format(lat2, lon2))
    print("{:.1f}".format(a21))
示例#14
0
def main():
    p = ArgumentParser(description='Given starting latitude, longitude: find final lat,lon for distance and azimuth')
    p.add_argument('lat', help='latitude WGS-84 [degrees]', type=float)
    p.add_argument('lon', help='longitude WGS-84 [degrees]', type=float)
    p.add_argument('range', help='range from start point [meters]', type=float)
    p.add_argument('azimuth', help='clockwise from north: azimuth to start [degrees]', type=float)
    P = p.parse_args()

    lat2, lon2, a21 = vreckon(P.lat, P.lon, P.range, P.azimuth)

    print('{:.4f} {:.4f}'.format(lat2, lon2))
    print('{:.1f}'.format(a21))
示例#15
0
def test_compare_vicenty():
    taz, tsr = 38, 3000
    pyproj = pytest.importorskip("pyproj")

    lat2, lon2 = vreckon(10, 20, tsr, taz)

    p4lon, p4lat, p4a21 = pyproj.Geod(ellps="WGS84").fwd(lon2, lat2, taz, tsr)
    assert p4lon == approx(lon2, rel=0.0025)
    assert p4lat == approx(lat2, rel=0.0025)

    p4az, p4a21, p4sr = pyproj.Geod(ellps="WGS84").inv(20, 10, lon2, lat2)
    assert (p4az, p4sr) == approx((taz, tsr))
示例#16
0
def sampledata(Np,mps,Ts, lon0, lat0,tstart, azim):

    # mps: speed meters/sec
    # Np: number of points
    # Ts:
    freq = f'{Ts}S'
    tr = pd.date_range(tstart,periods=Np,freq=freq).to_pydatetime()
    t = [t.isoformat(timespec='seconds') for t in tr]

    rng = mps * np.arange(0,Np*Ts,Ts)

    lonLatAlt = np.zeros((Np,3))
    lonLatAlt[:,1], lonLatAlt[:,0] = vreckon(lat0, lon0, rng, azim=azim)[:2]

    return t, lonLatAlt
示例#17
0
def main():
    p = ArgumentParser(
        description=
        'Given starting latitude, longitude: find final lat,lon for distance and azimuth'
    )
    p.add_argument('lat', help='latitude WGS-84 [degrees]', type=float)
    p.add_argument('lon', help='longitude WGS-84 [degrees]', type=float)
    p.add_argument('range', help='range from start point [meters]', type=float)
    p.add_argument('azimuth',
                   help='clockwise from north: azimuth to start [degrees]',
                   type=float)
    P = p.parse_args()

    lat2, lon2, a21 = vreckon(P.lat, P.lon, P.range, P.azimuth)

    print('{:.4f} {:.4f}'.format(lat2, lon2))
    print('{:.1f}'.format(a21))
示例#18
0
def drawmap(dat, callsign, call2, b):
    callsign = callsign.upper()
    call2 = [c.upper() for c in call2]

    maid0 = dat.loc[dat['txcall'] == callsign, 'txgrid'].iat[0].strip()
    ll0 = mlocs.toLoc(maid0)
    #%%
    ax = figure().gca()
    m = Basemap(projection='merc',
                llcrnrlat=ll0[0] - 5,
                urcrnrlat=ll0[0] + 5,
                llcrnrlon=ll0[1] - 10,
                urcrnrlon=ll0[1] + 10,
                lat_ts=20,
                resolution='l')
    m.drawcoastlines()
    m.drawcountries()
    #m.drawmeridians(arange(0,360,30))
    #m.drawparallels(arange(-90,90,30))
    #%% plot self
    x, y = m(ll0[1], ll0[0])
    m.plot(x, y, 'o', color='limegreen', markersize=8, markerfacecolor='none')
    #%% plot others
    #station = DataFrame(index=call2,columns =['muf_fact','latlon','midlatlon'])
    for c in call2:
        rxgrid = dat.loc[dat['rxcall'] == c, 'rxgrid'].iat[0].strip()
        latlon = mlocs.toLoc(rxgrid)
        # plot this station location (by Maidenhead)
        x, y = m(latlon[1], latlon[0])
        m.plot(x, y, 'o', color='red', markersize=8, markerfacecolor='none')
        #%% estimate Ne
        distm, az = vdist(ll0[0], ll0[1], latlon[0], latlon[1])[:2]
        aoi = atan(distm / 2 / F2h)

        muf_fact = 1 / cos(aoi)
        # lat,lon where ray refracted (midpoint between stations)
        midlatlon = vreckon(ll0[0], ll0[1], distm / 2, az)
        # plot midpoint Ne
        x, y = m(midlatlon[1], midlatlon[0])
        m.plot(x, y, 'o', color='blue', markersize=6)

    ax.set_title(f'WSPR {b} MHz')
示例#19
0
    def test_vincenty(self):
        if numpy is None:
            logging.warning('Vincenty not tested')
            return

        az = 38
        sr = 3e3
        lat2, lon2, a21 = vreckon(10, 20, sr, az)
        assert_allclose((lat2, lon2, a21),
                        (10.02137267, 20.016847, 218.0029286))
        if pyproj:
            p4lon, p4lat, p4a21 = pyproj.Geod(ellps='WGS84').fwd(
                lon2, lat2, az, sr)
            assert_allclose((p4lon, p4lat, p4a21 % 360.), (lon2, lat2, a21),
                            rtol=0.0025)

        assert_allclose(vdist(10, 20, lat2, lon2), (sr, az, a21))
        if pyproj:
            p4az, p4a21, p4sr = pyproj.Geod(ellps='WGS84').inv(
                20, 10, lon2, lat2)
            assert_allclose((p4az, p4a21 % 360., p4sr), (az, a21, sr))
示例#20
0
def test_both_vector():
    pytest.importorskip("numpy")
    a, b = vincenty.vreckon(10, 20, sr1, az1)
    assert a == approx(lat3)
    assert b == approx(lon3)
示例#21
0
def test_az_vector():
    pytest.importorskip("numpy")
    a, b = vincenty.vreckon(*ll0, sr1[0], az1)
    assert a == approx(lat2)
    assert b == approx(lon2)
示例#22
0
文件: test.py 项目: cchuravy/pymap3d
def test_vreckon():
    lat2, lon2, a21 = vreckon(10, 20, 3000, 38)
    assert_almost_equal(lat2, 10.021372672660874)
    assert_almost_equal(lon2, 20.016847098929979)
    assert_almost_equal(a21, 218.0029285624942)
示例#23
0
文件: vreckon.py 项目: silky/pymap3d
#!/usr/bin/env python
from pymap3d.vincenty import vreckon

if __name__ == '__main__':  # pragma: no cover
    from argparse import ArgumentParser

    p = ArgumentParser(description='Python port of vreckon.m')
    p.add_argument('lat', help='latitude WGS-84 [degrees]', type=float)
    p.add_argument('lon', help='longitude WGS-84 [degrees]', type=float)
    p.add_argument('range', help='range from start point [meters]', type=float)
    p.add_argument('azimuth', help='azimuth to start [deg.]', type=float)
    p = p.parse_args()

    lat2, lon2, a21 = vreckon(p.lat, p.lon, p.range, p.azimuth)
    print('new lat / lon {} / {} '.format(lat2,lon2))
    print('az back to start:', a21)