コード例 #1
0
    def populate(self):
        """
        Compute value count using the objects value count parameters.
        """
        # Update status
        self.status = self.COMPUTING
        self.save()

        try:
            # Compute aggregate result
            agg = Aggregator(
                layer_dict=self.layer_names,
                formula=self.formula,
                zoom=self.zoom,
                geom=self.aggregationarea.geom,
                acres=self.units.lower() == 'acres',
                grouping=self.grouping,
            )
            aggregation_result = agg.value_count()
            self.stats_min, self.stats_max, self.stats_avg, self.stats_std = agg.statistics()

            # Track cumulative data to be able to generalize stats over
            # multiple aggregation areas.
            self.stats_cumsum_t0 = agg._stats_t0
            self.stats_cumsum_t1 = agg._stats_t1
            self.stats_cumsum_t2 = agg._stats_t2

            # Convert values to string for storage in hstore
            self.value = {k: str(v) for k, v in aggregation_result.items()}

            self.status = self.FINISHED
        except:
            self.status = self.FAILED

        self.save()
コード例 #2
0
    def populate(self):
        """
        Compute value count using the objects value count parameters.
        """
        # Update status
        self.status = self.COMPUTING
        self.save()

        try:
            # Compute aggregate result
            agg = Aggregator(
                layer_dict=self.layer_names,
                formula=self.formula,
                zoom=self.zoom,
                geom=self.aggregationarea.geom,
                acres=self.units.lower() == 'acres',
                grouping=self.grouping,
            )
            aggregation_result = agg.value_count()
            self.stats_min, self.stats_max, self.stats_avg, self.stats_std = agg.statistics()

            # Track cumulative data to be able to generalize stats over
            # multiple aggregation areas.
            self.stats_cumsum_t0 = agg._stats_t0
            self.stats_cumsum_t1 = agg._stats_t1
            self.stats_cumsum_t2 = agg._stats_t2

            # Convert values to string for storage in hstore
            self.value = {k: str(v) for k, v in aggregation_result.items()}

            self.status = self.FINISHED
        except:
            self.status = self.FAILED

        self.save()
コード例 #3
0
 def test_layer_stats(self):
     # Use a legend with simple int expression
     agg = Aggregator(
         layer_dict={'a': self.rasterlayer.id},
         formula='a',
     )
     # Get original band metadata
     meta = self.rasterlayer.rasterlayerbandmetadata_set.first()
     # The comparison here is loose, as one is computed on tiles and the other
     # other value are the original band values. So there are differences from
     # rescaling.
     for dat in zip(agg.statistics(), meta.statistics()):
         self.assertAlmostEqual(dat[0], dat[1], 1)
コード例 #4
0
    def test_full_mask_data(self):
        # Override all tiles to be fully masked.
        for tile in self.rasterlayer.rastertile_set.all():
            tile.rast.bands[0].data([0], shape=(1, 1))
            tile.rast.bands[0].nodata_value = 0
            tile.save()

        # Use a legend with simple int expression
        agg = Aggregator(
            layer_dict={'a': self.rasterlayer.id},
            formula='a',
        )
        self.assertEqual((None, None, None, None), agg.statistics())
コード例 #5
0
 def test_layer_stats(self):
     # Use a legend with simple int expression
     agg = Aggregator(
         layer_dict={'a': self.rasterlayer.id},
         formula='a',
     )
     # Get original band metadata
     meta = self.rasterlayer.rasterlayerbandmetadata_set.first()
     # The comparison here is loose, as one is computed on tiles and the other
     # other value are the original band values. So there are differences from
     # rescaling.
     for dat in zip(agg.statistics(), meta.statistics()):
         self.assertAlmostEqual(dat[0], dat[1], 1)
コード例 #6
0
    def test_full_mask_data(self):
        # Override all tiles to be fully masked.
        for tile in self.rasterlayer.rastertile_set.all():
            tile.rast.bands[0].data([0], shape=(1, 1))
            tile.rast.bands[0].nodata_value = 0
            tile.save()

        # Use a legend with simple int expression
        agg = Aggregator(
            layer_dict={'a': self.rasterlayer.id},
            formula='a',
        )
        self.assertEqual((None, None, None, None), agg.statistics())