def dateRange(start_date='1900-01-01',stop_date='2100-01-01',constraint='overlaps'): if constraint == 'overlaps': start = fes.PropertyIsLessThanOrEqualTo(propertyname='apiso:TempExtent_begin', literal=stop_date) stop = fes.PropertyIsGreaterThanOrEqualTo(propertyname='apiso:TempExtent_end', literal=start_date) elif constraint == 'within': start = fes.PropertyIsGreaterThanOrEqualTo(propertyname='apiso:TempExtent_begin', literal=start_date) stop = fes.PropertyIsLessThanOrEqualTo(propertyname='apiso:TempExtent_end', literal=stop_date) return start,stop
def fes_date_filter(start_date='1900-01-01', stop_date='2100-01-01', constraint='overlaps'): """Hopefully something like this will be implemented in fes soon.""" if constraint == 'overlaps': propertyname = 'apiso:TempExtent_begin' start = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop_date) propertyname = 'apiso:TempExtent_end' stop = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start_date) elif constraint == 'within': propertyname = 'apiso:TempExtent_begin' start = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start_date) propertyname = 'apiso:TempExtent_end' stop = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop_date) return start, stop
def fes_date_filter(start, stop, constraint='overlaps'): """ Take datetime-like objects and returns a fes filter for date range (begin and end inclusive). NOTE: Truncates the minutes!!! Examples -------- >>> import pytz >>> from datetime import datetime, timedelta >>> stop = datetime(2010, 1, 1, 12, 30, 59).replace(tzinfo=pytz.utc) >>> start = stop - timedelta(days=7) >>> begin, end = fes_date_filter(start, stop, constraint='overlaps') >>> begin.literal, end.literal ('2010-01-01 12:00', '2009-12-25 12:00') >>> begin.propertyoperator, end.propertyoperator ('ogc:PropertyIsLessThanOrEqualTo', 'ogc:PropertyIsGreaterThanOrEqualTo') >>> begin, end = fes_date_filter(start, stop, constraint='within') >>> begin.literal, end.literal ('2009-12-25 12:00', '2010-01-01 12:00') >>> begin.propertyoperator, end.propertyoperator ('ogc:PropertyIsGreaterThanOrEqualTo', 'ogc:PropertyIsLessThanOrEqualTo') """ start = start.strftime('%Y-%m-%d %H:00') stop = stop.strftime('%Y-%m-%d %H:00') if constraint == 'overlaps': propertyname = 'apiso:TempExtent_begin' begin = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) propertyname = 'apiso:TempExtent_end' end = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start) elif constraint == 'within': propertyname = 'apiso:TempExtent_begin' begin = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start) propertyname = 'apiso:TempExtent_end' end = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) else: raise NameError('Unrecognized constraint {}'.format(constraint)) return begin, end
def fes_date_filter(start, stop, constraint="overlaps"): start = start.strftime("%Y-%m-%d %H:00") stop = stop.strftime("%Y-%m-%d %H:00") if constraint == "overlaps": propertyname = "apiso:TempExtent_begin" begin = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) propertyname = "apiso:TempExtent_end" end = fes.PropertyIsGreaterThanOrEqualTo( propertyname=propertyname, literal=start ) elif constraint == "within": propertyname = "apiso:TempExtent_begin" begin = fes.PropertyIsGreaterThanOrEqualTo( propertyname=propertyname, literal=start ) propertyname = "apiso:TempExtent_end" end = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) else: raise NameError("Unrecognized constraint {}".format(constraint)) return begin, end
def fes_date_filter(start, stop, constraint='overlaps'): """Take datetime-like objects and returns a fes filter for date range. NOTE: Truncates the minutes!""" start = start.strftime('%Y-%m-%d %H:00') stop = stop.strftime('%Y-%m-%d %H:00') if constraint == 'overlaps': propertyname = 'apiso:TempExtent_begin' begin = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) propertyname = 'apiso:TempExtent_end' end = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start) elif constraint == 'within': propertyname = 'apiso:TempExtent_begin' begin = fes.PropertyIsGreaterThanOrEqualTo(propertyname=propertyname, literal=start) propertyname = 'apiso:TempExtent_end' end = fes.PropertyIsLessThanOrEqualTo(propertyname=propertyname, literal=stop) else: raise NameError('Unrecognized constraint {}'.format(constraint)) return begin, end
def get_date_filter(self, start_datetime=None, stop_datetime=None, constraint='overlaps'): ''' Helper function to return a list containing a pair of FES filters for a date range @param start_datetime: datetime object for start of time period to search @param stop_datetime: datetime object for end of time period to search @param constraint: string value of either 'overlaps' or 'within' to indicate type of temporal search @return: list containing a pair of FES filters for a date range ''' if start_datetime: start_date_string = start_datetime.date().isoformat() else: start_date_string = '1900-01-01' # Distant past if stop_datetime: stop_date_string = stop_datetime.date().isoformat() else: stop_date_string = '2100-01-01' # Distant future if constraint == 'overlaps': start_filter = fes.PropertyIsLessThanOrEqualTo( propertyname='ows100:TempExtent_begin', literal=stop_date_string) stop_filter = fes.PropertyIsGreaterThanOrEqualTo( propertyname='ows100:TempExtent_end', literal=start_date_string) elif constraint == 'within': start_filter = fes.PropertyIsGreaterThanOrEqualTo( propertyname='ows100:TempExtent_begin', literal=start_date_string) stop_filter = fes.PropertyIsLessThanOrEqualTo( propertyname='ows100:TempExtent_end', literal=stop_date_string) return [start_filter, stop_filter]