Пример #1
0
def get_timeseries(dataset_id, variable_name):
    '''Return the timeseries at specified point.'''

    longitude = float(request.args.get('longitude'))
    latitude = float(request.args.get('latitude'))
    start = request.args.get('start')
    end = request.args.get('end')

    raster_dataset = RasterDataset('data/' + dataset_id + '_' + variable_name +
                                   '.tif')

    begin = None if start is None else int(start)
    end = None if end is None else int(end) + 1
    series = list(
        raster_dataset.series_at_point(longitude, latitude, begin, end))

    response_body = {
        'datasetId': dataset_id,
        'variableName': variable_name,
        'boundaryGeometry': {
            'type': 'Point',
            'coordinates': [longitude, latitude]
        },
        'start': '0' if begin is None else str(begin),
        'end': '4' if end is None else str(end - 1),
        'values': series
    }

    return jsonify(response_body)
Пример #2
0
def path_to_dataset(test_dataset_filename) -> str:
    '''Create a new dataset file and return its path.'''
    path_to_dataset = test_dataset_filename(__file__)
    RasterDataset.create(path_to_dataset, 'GTiff', gdal.GDT_Float32,
                         shape=(6, 4, 5), origin=(-123, 45),
                         pixel_size=(1.0, 2.0),
                         coordinate_system='WGS84')
    return path_to_dataset
def test_value_at_pixel_returns_value_of_each_pixel_in_dataset(
        raster_dataset: RasterDataset):
    assert raster_dataset.value_at_pixel(band_index=0, row=0, column=0) == 1
    assert raster_dataset.value_at_pixel(band_index=0, row=0, column=1) == 2
    assert raster_dataset.value_at_pixel(band_index=0, row=1, column=0) == 3
    assert raster_dataset.value_at_pixel(band_index=0, row=1, column=1) == 4
    assert raster_dataset.value_at_pixel(band_index=1, row=0, column=0) == 11
    assert raster_dataset.value_at_pixel(band_index=1, row=0, column=1) == 12
    assert raster_dataset.value_at_pixel(band_index=1, row=1, column=0) == 13
    assert raster_dataset.value_at_pixel(band_index=1, row=1, column=1) == 14
Пример #4
0
def valid_dataset_filename(test_dataset_filename) -> str:
    '''Return a new gdal.Dataset instance'''
    valid_dataset_filename = test_dataset_filename(__file__)
    RasterDataset.create(valid_dataset_filename,
                         'GTiff',
                         gdal.GDT_Float32,
                         shape=(4, 3, 2),
                         origin=(-123, 45),
                         pixel_size=(1.0, 2.0),
                         coordinate_system='WGS84')
    return valid_dataset_filename
Пример #5
0
def raster_dataset(test_dataset_filename,
                   array_assigned_to_band_index_0,
                   array_assigned_to_band_index_1) -> gdal.Dataset:
    '''Create a new dataset, and set its values using write_band() and
    write_pixel() functions.'''

    # create the new dataset
    dataset_file = test_dataset_filename(__file__)
    raster_dataset = RasterDataset.create(dataset_file,
                                          'GTiff', gdal.GDT_Float32,
                                          shape=(2, 2, 2),
                                          origin=(-123, 45),
                                          pixel_size=(1.0, 1.0),
                                          coordinate_system='WGS84')

    # set the values in band 1 with a call to write_band
    raster_dataset.write_band(0, array_assigned_to_band_index_0, float('Nan'))

    # set the values in band 2 with calls to write_pixel
    raster_dataset.write_pixel(1, 0, 0, array_assigned_to_band_index_1[0, 0])
    raster_dataset.write_pixel(1, 0, 1, array_assigned_to_band_index_1[0, 1])
    raster_dataset.write_pixel(1, 1, 0, array_assigned_to_band_index_1[1, 0])
    raster_dataset.write_pixel(1, 1, 1, array_assigned_to_band_index_1[1, 1])

    raster_dataset.flush()

    return raster_dataset
Пример #6
0
def raster_dataset(test_dataset_filename) -> RasterDataset:
    '''Return a new RasterDataset.'''
    return RasterDataset.create(test_dataset_filename(__file__),
                                'GTiff',
                                gdal.GDT_Float32,
                                shape=(6, 4, 5),
                                origin=(-123, 45),
                                pixel_size=(1.0, 2.0),
                                coordinate_system='WGS84')
Пример #7
0
def test_when_constructor_argument_is_path_to_dataset_properties_are_correct(
        valid_dataset_filename: str):
    raster_dataset = RasterDataset(valid_dataset_filename)
    assert raster_dataset.filename == valid_dataset_filename
    assert raster_dataset.shape == (4, 3, 2)
    assert raster_dataset.bands == 4
    assert raster_dataset.rows == 3
    assert raster_dataset.cols == 2
    assert raster_dataset.affine == Affine(1.0, 0.0, -123.0, 0.0, -2.0, 45.0)
    assert raster_dataset.pixel_size == (1.0, 2.0)
    assert raster_dataset.pixel_size_x == 1.0
    assert raster_dataset.pixel_size_y == 2.0
    assert raster_dataset.origin == (-123, 45)
    assert raster_dataset.origin_long == -123
    assert raster_dataset.origin_lat == 45
    assert raster_dataset.northwest_corner == (-123, 45)
    assert raster_dataset.southwest_corner == (-123, 39)
    assert raster_dataset.northeast_corner == (-121, 45)
    assert raster_dataset.southeast_corner == (-121, 39)
    assert raster_dataset.center == (-122, 42)
Пример #8
0
def test_when_constructor_argument_is_a_gdal_dataset_properties_are_correct(
        valid_gdal_dataset: gdal.Dataset):
    raster_dataset = RasterDataset(valid_gdal_dataset)
    assert raster_dataset._gdal_dataset == valid_gdal_dataset  # pylint: disable=protected-access
    assert raster_dataset.filename is None
    assert raster_dataset.shape == (4, 3, 2)
    assert raster_dataset.bands == 4
    assert raster_dataset.rows == 3
    assert raster_dataset.cols == 2
    assert raster_dataset.affine == Affine(1.0, 0.0, -123.0, 0.0, -2.0, 45.0)
    assert raster_dataset.pixel_size == (1.0, 2.0)
    assert raster_dataset.pixel_size_x == 1.0
    assert raster_dataset.pixel_size_y == 2.0
    assert raster_dataset.origin == (-123, 45)
    assert raster_dataset.origin_long == -123
    assert raster_dataset.origin_lat == 45
    assert raster_dataset.northwest_corner == (-123, 45)
    assert raster_dataset.southwest_corner == (-123, 39)
    assert raster_dataset.northeast_corner == (-121, 45)
    assert raster_dataset.southeast_corner == (-121, 39)
    assert raster_dataset.center == (-122, 42)
def raster_dataset(test_dataset_filename, array_assigned_to_band_index_0,
                   array_assigned_to_band_index_1) -> RasterDataset:
    '''Create a new dataset, and set its values using write_band()
    functions.'''

    datafile_path = test_dataset_filename(__file__)

    raster_dataset = RasterDataset.create(datafile_path,
                                          'GTiff',
                                          gdal.GDT_Float32,
                                          shape=(2, 2, 2),
                                          origin=(-123, 45),
                                          pixel_size=(1.0, 1.0),
                                          coordinate_system='WGS84')

    # set the values in bands 0 and 1 with calls to write_band
    raster_dataset.write_band(0, array_assigned_to_band_index_0, float('nan'))
    raster_dataset.write_band(1, array_assigned_to_band_index_1, float('nan'))

    raster_dataset.flush()

    return raster_dataset
Пример #10
0
def test_pixel_at_point_just_southeast_of_southeast_corner_of_southeast_pixel_is_outside_coverage(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-117.999, 36.999) is None
Пример #11
0
def test_pixel_at_point_just_northwest_of_southeast_corner_of_southeast_pixel_is_boottom_right_pixel(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-118.001, 37.001) == (3, 4)
Пример #12
0
def test_pixel_at_point_just_northwest_of_northwest_corner_of_northwest_pixel_is_outside_coverage(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-123.001, 45.001) is None
Пример #13
0
def test_pixel_at_point_just_southeast_of_southwest_corner_of_northwest_pixel_is_0_0(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-121.999, 42.999) == (1, 1)
Пример #14
0
def test_series_returns_band_count_elments(raster_dataset: RasterDataset):
    assert len(raster_dataset.series_at_pixel(0, 0)) == 10
Пример #15
0
def test_range_5_to_6_of_series_at_point_in_pixel_0_0_is_single_element_array(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(-123, 45, 5, 6).tolist() == [51.0]
def test_value_at_point_returns_value_at_0_0_for_origin(
        raster_dataset: RasterDataset):
    assert raster_dataset.value_at_point(-123, 45, band_index=0) == 1
    assert raster_dataset.value_at_point(-123, 45, band_index=1) == 11
Пример #17
0
def test_range_to_5_of_series_at_point_in_pixel_0_0_is_correct(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(
        -123, 45, end=5).tolist() == [1.0, 11.0, 21.0, 31.0, 41.0]
Пример #18
0
def test_series_at_point_in_pixel_1_0_is_correct(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(-123, 44).tolist() == [
        3.0, 13.0, 23.0, 33.0, 43.0, 53.0, 63.0, 73.0, 83.0, 93.0
    ]
Пример #19
0
def test_series_at_point_in_pixel_0_1_is_correct(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(-122, 45).tolist() == [
        2.0, 12.0, 22.0, 32.0, 42.0, 52.0, 62.0, 72.0, 82.0, 92.0
    ]
Пример #20
0
def test_series_at_point_pixel_0_0_is_correct(raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(-123, 45).tolist() == [
        1.0, 11.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 91.0
    ]
Пример #21
0
def test_series_at_pixel_1_1_is_correct(raster_dataset: RasterDataset):
    assert raster_dataset.series_at_pixel(1, 1).tolist() == [
        4.0, 14.0, 24.0, 34.0, 44.0, 54.0, 64.0, 74.0, 84.0, 94.0
    ]
Пример #22
0
def test_series_returns_array_with_correct_values(
        raster_dataset: RasterDataset):
    series_array = raster_dataset.series_at_pixel(0, 0)
    assert series_array[0] == 1
    assert series_array[1] == 11
Пример #23
0
def test_when_constructor_argument_is_path_to_invalid_dataset_file_an_exception_is_raised(
        invalid_dataset_filename: str,
        expected_invalid_dataset_file_error_message: str):
    with pytest.raises(ValueError,
                       match=expected_invalid_dataset_file_error_message):
        RasterDataset(invalid_dataset_filename)
Пример #24
0
def test_range_5_to_5_of_series_at_point_in_pixel_0_0_is_empty_array(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(-123, 45, 5, 5).tolist() == []
Пример #25
0
def test_pixel_at_point_at_center_of_northwest_pixel_is_0_0(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-122.5, 44) == (0, 0)
Пример #26
0
def test_pixel_at_point_just_northwest_of_southeast_corner_of_northwest_pixel_is_0_0(
        raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-122.001, 43.001) == (0, 0)
Пример #27
0
def test_range_5_to_none_of_series_at_point_in_pixel_0_0_is_correct(
        raster_dataset: RasterDataset):
    assert raster_dataset.series_at_point(
        -123, 45, 5).tolist() == [51.0, 61.0, 71.0, 81.0, 91.0]
Пример #28
0
def test_series_returns_numpy_ndarray(raster_dataset: RasterDataset):
    assert isinstance(raster_dataset.series_at_pixel(0, 0), numpy.ndarray)
def test_value_at_point_returns_value_at_1_1_near_southeast_corner(
        raster_dataset: RasterDataset):
    assert raster_dataset.value_at_point(-121.001, 43.001, band_index=0) == 4
    assert raster_dataset.value_at_point(-121.001, 43.001, band_index=1) == 14
Пример #30
0
def test_pixel_at_origin_is_0_0(raster_dataset: RasterDataset):
    assert raster_dataset.pixel_at_point(-123, 45) == (0, 0)