88import csv
99import geojson
1010import logging
11+ from datetime import datetime
1112from shapely .geometry import Polygon , Point
1213from io import StringIO
1314from .errors import (
@@ -42,8 +43,8 @@ class API(object):
4243 _debug = False
4344 _proxies = None
4445
45- _QUERY_TEMPLATE = "[out:{out}];{query}out {verbosity};"
46- _GEOJSON_QUERY_TEMPLATE = "[out:json];{query}out {verbosity};"
46+ _QUERY_TEMPLATE = "[out:{out}]{date} ;{query}out {verbosity};"
47+ _GEOJSON_QUERY_TEMPLATE = "[out:json]{date} ;{query}out {verbosity};"
4748
4849 def __init__ (self , * args , ** kwargs ):
4950 self .endpoint = kwargs .get ("endpoint" , self ._endpoint )
@@ -70,7 +71,7 @@ def __init__(self, *args, **kwargs):
7071 requests_log .setLevel (logging .DEBUG )
7172 requests_log .propagate = True
7273
73- def get (self , query , responseformat = "geojson" , verbosity = "body" , build = True ):
74+ def get (self , query , responseformat = "geojson" , verbosity = "body" , build = True , date = '' ):
7475 """Pass in an Overpass query in Overpass QL.
7576
7677 :param query: the Overpass QL query to send to the endpoint
@@ -81,11 +82,17 @@ def get(self, query, responseformat="geojson", verbosity="body", build=True):
8182 "body geom qt"
8283 :param build: boolean to indicate whether to build the overpass query from a template (True)
8384 or allow the programmer to specify full query manually (False)
85+ :param date: a date with an optional time. Example: 2020-04-27 or 2020-04-27T00:00:00Z
8486 """
87+ if date :
88+ try :
89+ date = datetime .strptime (date , '%Y-%m-%dT%H:%M:%SZ' )
90+ except ValueError :
91+ date = datetime .strptime (date , '%Y-%m-%d' )
8592 # Construct full Overpass query
8693 if build :
8794 full_query = self ._construct_ql_query (
88- query , responseformat = responseformat , verbosity = verbosity
95+ query , responseformat = responseformat , verbosity = verbosity , date = date
8996 )
9097 else :
9198 full_query = query
@@ -137,18 +144,22 @@ def search(self, feature_type, regex=False):
137144 Get = get
138145 Search = search
139146
140- def _construct_ql_query (self , userquery , responseformat , verbosity ):
147+ def _construct_ql_query (self , userquery , responseformat , verbosity , date ):
141148 raw_query = str (userquery ).rstrip ()
142149 if not raw_query .endswith (";" ):
143150 raw_query += ";"
144151
152+ if date :
153+ date = f'[date:"{ date .strftime ("%Y-%m-%dT%H:%M:%SZ" )} "]'
154+
145155 if responseformat == "geojson" :
146156 template = self ._GEOJSON_QUERY_TEMPLATE
147- complete_query = template .format (query = raw_query , verbosity = verbosity )
157+ complete_query = template .format (
158+ query = raw_query , verbosity = verbosity , date = date )
148159 else :
149160 template = self ._QUERY_TEMPLATE
150161 complete_query = template .format (
151- query = raw_query , out = responseformat , verbosity = verbosity
162+ query = raw_query , out = responseformat , verbosity = verbosity , date = date
152163 )
153164
154165 if self .debug :
0 commit comments