Exemplo n.º 1
0
    def get(self, request, *args, **kwargs):
        self.set_session_value('startpage', 'measurement_point',
                               'No Time Series Selected')
        self.set_session_value('startpage', 'uuid', 'EMPTY')
        self.request.session.modified = True

        page = self.request.GET.get('active', 'startpage')
        self.request.session[page]['selected_coords'] = self.coordinates
        self.request.session['map_']['bounds'] = self.bounds
        if len(self.timeseries) == 1:
            x = self.timeseries[0]
            self.set_session_value(
                'startpage', 'measurement_point', "Groundwater well: " +
                x['location']['name'] + ' - ' + x['name'])
            self.set_session_value(
                'startpage', 'datepicker', {
                    'start':
                    jsdt.js_to_datetime(int(
                        x['first_value_timestamp'])).strftime('%d-%m-%Y'),
                    'end':
                    jsdt.js_to_datetime(int(
                        x['last_value_timestamp'])).strftime('%d-%m-%Y')
                })
            self.set_session_value('startpage', 'start_js',
                                   x['first_value_timestamp'])
            self.set_session_value('startpage', 'end_js',
                                   x['last_value_timestamp'])
            self.set_session_value('startpage', 'uuid', x['uuid'])
            self.request.session['disabled']['trend_detection'] = 'enabled'
            self.set_session_value('trend_detection', 'active', True)
        self.request.session.modified = True
        return super().get(request, *args, **kwargs)
Exemplo n.º 2
0
 def step_trend(self):
     try:
         split = int(self.request.session['trend_detection']['graph']['x'])
         if split == 0:
             return
         breakpoint = jsdt.js_to_datetime(split)
         return [calculator.step(
             data=self.pandas_timeseries,
             bp=int(self.pandas_timeseries.index.searchsorted(breakpoint)),
             alpha=float(self.request.session[
                             'trend_detection']['spinner_0']['value']),
             detrend_anyway=True
         )]
     except KeyError:
         return
Exemplo n.º 3
0
 def get(self, request, *args, **kwargs):
     page = self.request.GET.get('active', 'startpage')
     self.request.session[page]['selected_coords'] = self.coordinates
     self.request.session['map_']['bounds'] = self.bounds
     if len(self.timeseries) == 1:
         x = self.timeseries[0]
         self.set_session_value('startpage', 'measurement_point',
                                "Groundwater well: " + x['location']['name']
                                + ' - ' + x['name'])
         self.set_session_value('startpage', 'datepicker', {
             'start': jsdt.js_to_datetime(
                 int(x['first_value_timestamp'])).strftime('%d-%m-%Y'),
             'end': jsdt.js_to_datetime(
                 int(x['last_value_timestamp'])).strftime('%d-%m-%Y')
         })
         self.set_session_value('startpage', 'start_js', x[
             'first_value_timestamp'])
         self.set_session_value('startpage', 'end_js', x[
             'last_value_timestamp'])
         self.set_session_value('startpage', 'uuid', x['uuid'])
         self.request.session['disabled']['trend_detection'] = 'enabled'
         self.set_session_value('trend_detection', 'active', True)
     self.request.session.modified = True
     return super().get(request, *args, **kwargs)
Exemplo n.º 4
0
 def step_trend(self):
     try:
         split = int(self.request.session['trend_detection']['graph']['x'])
         if split == 0:
             return
         breakpoint = jsdt.js_to_datetime(split)
         return [
             calculator.step(
                 data=self.pandas_timeseries,
                 bp=int(
                     self.pandas_timeseries.index.searchsorted(breakpoint)),
                 alpha=float(self.request.session['trend_detection']
                             ['spinner_0']['value']),
                 detrend_anyway=True)
         ]
     except KeyError:
         return
Exemplo n.º 5
0
 def to_date(self, date_extreme):
     return jsdt.js_to_datetime(int(self.request.GET[date_extreme])
                                ).strftime('%d-%m-%Y')
Exemplo n.º 6
0
    def bbox(self,
             south_west,
             north_east,
             statistic=None,
             start='0001-01-01T00:00:00Z',
             end=None,
             organisation=None):
        """
        Find all timeseries within a certain bounding box.
        Returns records within bounding box using Bounding Box format (min Lon,
        min Lat, max Lon, max Lat). Also returns features with overlapping
        geometry.
        :param south_west: lattitude and longtitude of the south-western point
        :param north_east: lattitude and longtitude of the north-eastern point
        :param start_: start timestamp in ISO 8601 format
        :param end: end timestamp in ISO 8601 format
        :return: a dictionary of the api-response.
        """
        if not end:
            end = jsdatetime.now_iso()
        if isinstance(start, int):
            start -= 10000
        if isinstance(end, int):
            end += 10000

        min_lat, min_lon = south_west
        max_lat, max_lon = north_east

        polygon_coordinates = [
            [min_lon, min_lat],
            [min_lon, max_lat],
            [max_lon, max_lat],
            [max_lon, min_lat],
            [min_lon, min_lat],
        ]
        points = [' '.join([str(x), str(y)]) for x, y in polygon_coordinates]
        geom_within = {'a': 'POLYGON ((' + ', '.join(points) + '))'}
        geom_within = urllib.parse.urlencode(geom_within).split('=')[1]
        org_query = self.organisation_query(organisation)
        self.statistic = statistic
        if statistic == 'mean':
            statistic = ['count', 'sum']
        elif not statistic:
            statistic = ['min', 'max', 'count', 'sum']
            self.statistic = None
        elif statistic == 'range (max - min)':
            statistic = ['min', 'max']
        elif statistic == 'difference (last - first)':
            statistic = 'count'
        elif statistic == 'difference (mean last - first year)':
            year = dt.timedelta(days=366)
            first_end = jsdatetime.datetime_to_js(
                jsdatetime.js_to_datetime(start) + year)
            last_start = jsdatetime.datetime_to_js(
                jsdatetime.js_to_datetime(end) - year)
            self.get(start=start,
                     end=first_end,
                     min_points=1,
                     fields=['count', 'sum'],
                     location__geom_within=geom_within,
                     **org_query)
            first_year = {}
            for r in self.results:
                try:
                    first_year[r['location']['uuid']] = {
                        'first_value_timestamp': r['first_value_timestamp'],
                        'mean': r['events'][0]['sum'] / r['events'][0]['count']
                    }
                except IndexError:
                    first_year[r['location']['uuid']] = {
                        'first_value_timestamp': np.nan,
                        'mean': np.nan
                    }
            self.results = []
            self.get(start=last_start,
                     end=end,
                     min_points=1,
                     fields=['count', 'sum'],
                     location__geom_within=geom_within,
                     **org_query)
            for r in self.results:
                try:
                    r['events'][0]['difference (mean last - first year)'] = \
                        r['events'][0]['sum'] / r['events'][0]['count'] - \
                        first_year[r['location']['uuid']]['mean']
                    r['first_value_timestamp'] = \
                        first_year[
                            r['location']['uuid']]['first_value_timestamp']
                except IndexError:
                    r['events'] = [{
                        'difference (mean last - first year)':
                        np.nan
                    }]
                    r['first_value_timestamp'] = np.nan
                    r['last_value_timestamp'] = np.nan
            return

        self.get(start=start,
                 end=end,
                 min_points=1,
                 fields=statistic,
                 location__geom_within=geom_within,
                 **org_query)
Exemplo n.º 7
0
 def to_date(self, date_extreme):
     return jsdt.js_to_datetime(int(
         self.request.GET[date_extreme])).strftime('%d-%m-%Y')