def test_get_bbox_dataset(self, tile_type_id=1): """Test the DatasetRecord class get_bbox() method on six landsat datasets.""" #pylint: disable=too-many-locals cube_tile_size = \ (self.ingester.datacube.tile_type_dict[tile_type_id]['x_size'], self.ingester.datacube.tile_type_dict[tile_type_id]['y_size']) cube_pixels = \ (self.ingester.datacube.tile_type_dict[tile_type_id]['x_pixels'], self.ingester.datacube.tile_type_dict[tile_type_id]['y_pixels']) tile_crs = \ self.ingester.datacube.tile_type_dict[tile_type_id]['crs'] for idataset in range(len(DATASETS_TO_INGEST)): # Get information required for calculating the bounding box. dset = LandsatDataset(DATASETS_TO_INGEST[idataset]) dataset_crs = dset.get_projection() geotrans = dset.get_geo_transform() pixels = dset.get_x_pixels() lines = dset.get_y_pixels() # Create a DatasetRecord instance so that we can test its # get_bbox() method. In doing this we need to create a # collection object and entries on the acquisition and dataset # tables of the database. self.collection.begin_transaction() acquisition = \ self.collection.create_acquisition_record(dset) dset_record = acquisition.create_dataset_record(dset) self.collection.commit_transaction() # Test the DatasetRecord get_bbox() method #Determine the bounding quadrilateral of the dataset extent transformation = \ dset_record.define_transformation(dataset_crs, tile_crs) bbox = dset_record.get_bbox(transformation, geotrans, pixels, lines) reference_dataset_bbox = DATASET_BBOX[idataset] #Check bounding box is as expected print 'Checking bbox for Dataset %d' %idataset residual_in_pixels = \ [((x2 - x1) * cube_pixels[0] / cube_tile_size[0], (y2 - y1) * cube_pixels[1] / cube_tile_size[1]) for ((x1, y1), (x2, y2)) in zip(reference_dataset_bbox, bbox)] assert all(abs(dx) < TOLERANCE and abs(dy) < TOLERANCE for (dx, dy) in residual_in_pixels), \ "bounding box calculation incorrect"
def test_get_coverage(self, tile_type_id=1): # pylint: disable=too-many-locals """Test the methods called by the dataset_record.get_coverage() method. The constants at the top of this file provide test data expected to be returned by the tested get_coverage methods: 1. TILE_XLL, TILE_YLL,... : dataset bounding box in tile projection coordinates TILE_CRS 2. DEFINITE_TILES: tiles in inner rectangle 3. POSSIBLE_TILES: tiles in outer rectangle 4. INTERSECTED_TILES: those tiles from the outer rectangle that intersect the dataset bounding box 5. CONTAINED_TILES: those tiles from outer rectangle wholly contained in the dataset bounding box 6. COVERAGE: the tiles to be returned from DatasetRecord.get_coverage() """ total_definite_tiles = set() total_possible_tiles = set() total_intersected_tiles = set() total_contained_tiles = set() total_touched_tiles = set() total_coverage = set() cube_origin = \ (self.ingester.datacube.tile_type_dict[tile_type_id]['x_origin'], self.ingester.datacube.tile_type_dict[tile_type_id]['y_origin']) cube_tile_size = \ (self.ingester.datacube.tile_type_dict[tile_type_id]['x_size'], self.ingester.datacube.tile_type_dict[tile_type_id]['y_size']) tile_crs = \ self.ingester.datacube.tile_type_dict[tile_type_id]['crs'] for idataset in range(len(DATASETS_TO_INGEST)): print 'Getting the coverage from Dataset %d' %idataset dset = LandsatDataset(DATASETS_TO_INGEST[idataset]) dataset_crs = dset.get_projection() geotrans = dset.get_geo_transform() pixels = dset.get_x_pixels() lines = dset.get_y_pixels() # Create a DatasetRecord instance so that we can test its # get_coverage() method. In doing this we need to create a # collection object and entries on the acquisition and dataset # tables of the database. self.collection.begin_transaction() acquisition = \ self.collection.create_acquisition_record(dset) dset_record = acquisition.create_dataset_record(dset) self.collection.commit_transaction() # Test the DatasetRecord get_bbox() method #Determine the bounding quadrilateral of the dataset extent transformation = \ dset_record.define_transformation(dataset_crs, tile_crs) #Determine the bounding quadrilateral of the dataset extent bbox = dset_record.get_bbox(transformation, geotrans, pixels, lines) #Get the definite and possible tiles from this dataset and #accumulate in running total definite_tiles, possible_tiles = \ dset_record.get_definite_and_possible_tiles(bbox, cube_origin, cube_tile_size) total_definite_tiles = \ total_definite_tiles.union(definite_tiles) total_possible_tiles = \ total_possible_tiles.union(possible_tiles) #Get intersected tiles and accumulate in running total intersected_tiles = \ dset_record.get_intersected_tiles(possible_tiles, bbox, cube_origin, cube_tile_size) total_intersected_tiles = \ total_intersected_tiles.union(intersected_tiles) #Take out intersected tiles from possibole tiles and get contained possible_tiles = possible_tiles.difference(intersected_tiles) contained_tiles = \ dset_record.get_contained_tiles(possible_tiles, bbox, cube_origin, cube_tile_size) total_contained_tiles = \ total_contained_tiles.union(contained_tiles) #Use parent method to get touched tiles touched_tiles = \ dset_record.get_touched_tiles(bbox, cube_origin, cube_tile_size) total_touched_tiles = total_touched_tiles.union(touched_tiles) #use parent method get_coverage to get coverage coverage = dset_record.get_coverage(tile_type_id) total_coverage = total_coverage.union(coverage) #Check definite and possible tiles are as expected assert total_definite_tiles == DEFINITE_TILES, \ "Set of definite tiles disagrees with test data" assert total_possible_tiles == POSSIBLE_TILES, \ "Set of possible tiles disagrees with test data" #Check intersected tiles are as expected assert total_intersected_tiles == INTERSECTED_TILES, \ "Set of intersected tiles disagrees with test data" #Check contained tiles are as expected assert total_contained_tiles == CONTAINED_TILES, \ "Set of tiles not in the definite set but wholly contained " \ "within the dataset bbox does not agree with test data" #Check results of get_touced_tiles against expectations assert total_touched_tiles == COVERAGE, \ "Set of tiles returned by get_touched_tiles does not agree " \ "with test data" assert total_coverage == COVERAGE, \ "Set of tiles returned by get_coverage does not agree " \ "with test data"