def get_queryset(self):
params = self.request.query_params
excludeStatuses = ['COMPLETED', 'COMPLETED', 'COMPLETE', 'DENIED', 'CANCELED']
minDist = params.get('distance', 100)
minDays = params.get('days', 14)
# queryDate = parser.parse(self.request.query_params['date']).date()
# startDate = queryDate - datetime.timedelta(days=minDays)
# endDate = queryDate + datetime.timedelta(days=minDays)
# queryDateRange = DateRange(startDate, endDate)
defaultStart = datetime.date.today() - datetime.timedelta(days=2)
defaultEnd = defaultStart + datetime.timedelta(days=365)
startDate = params.get('startDate', defaultStart.isoformat())
endDate = params.get('endDate', defaultEnd.isoformat())
queryDateRange = DateRange(lower=startDate, upper=endDate)
excludeDateRange = DateRange(lower='1800-01-01', upper='2014-12-31')
geoaddy = AddressGeocode.objects.using('geocoder').raw("SELECT g.rating, ST_X(g.geomout) AS lon, ST_Y(g.geomout) AS lat, pprint_addy(addy) AS address FROM geocode(%s) as g LIMIT 1", [self.request.query_params['address']])[0]
queryPoint = GEOSGeometry('POINT({} {})'.format(geoaddy.lon, geoaddy.lat))
filteredFeatures = Feature.objects\
.filter(canonical_daterange__overlap=queryDateRange)\
.filter(geom__distance_lte=(queryPoint, D(m=minDist)))\
.exclude(canonical_daterange__overlap=excludeDateRange)\
.exclude(canonical_status__in=excludeStatuses)
print('featurecount', filteredFeatures.count())
return filteredFeatures
评论列表
文章目录