def test_reverse_should_not_return_housenumber_if_filtered(factory): factory(lat=48.234544, lon=5.235444, housenumbers={'24': {'lat': 48.234545, 'lon': 5.235445}}) results = reverse(lat=48.234545, lon=5.235445, type="street") assert results[0].type == 'street' results = reverse(lat=48.234545, lon=5.235445) assert results[0].type == 'housenumber'
def test_reverse_can_be_limited(factory): factory(lat=48.234545, lon=5.235445) factory(lat=48.234546, lon=5.235446) results = reverse(lat=48.234545, lon=5.235445) assert len(results) == 1 results = reverse(lat=48.234545, lon=5.235445, limit=2) assert len(results) == 2
def test_reverse_should_not_return_housenumber_if_filtered(factory): factory(lat=48.234544, lon=5.235444, housenumbers={'24': { 'lat': 48.234545, 'lon': 5.235445 }}) results = reverse(lat=48.234545, lon=5.235445, type="street") assert results[0].type == 'street' results = reverse(lat=48.234545, lon=5.235445) assert results[0].type == 'housenumber'
def on_get(self, req, resp, **kwargs): lon, lat = self.parse_lon_lat(req) if lon is None or lat is None: raise falcon.HTTPBadRequest('Invalid args', 'Invalid args') limit = req.get_param_as_int('limit') or 1 filters = self.match_filters(req) results = reverse(lat=lat, lon=lon, limit=limit, **filters) self.to_geojson(req, resp, results, filters=filters, limit=limit)
def test_reverse_return_housenumber(factory): factory(housenumbers={ '24': { 'lat': 48.234545, 'lon': 5.235445, 'key': 'value' } }) results = reverse(lat=48.234545, lon=5.235445) assert results[0].housenumber == '24' assert results[0].type == 'housenumber' assert results[0].key == 'value' assert not results[0].raw
def get(self): try: lat = float(self.request.args.get('lat')) lon = float(self.request.args.get('lon', self.request.args.get('lng'))) except (ValueError, TypeError): raise BadRequest() try: limit = int(self.request.args.get('limit')) except (ValueError, TypeError): limit = 1 filters = self.match_filters() results = reverse(lat=lat, lon=lon, limit=limit, **filters) return self.to_geojson(results, filters=filters, limit=limit)
def on_get(self, req, resp, **kwargs): lon, lat = self.parse_lon_lat(req) placeID = req.get_param('place_id') if (lon is None or lat is None) and not placeID: raise falcon.HTTPBadRequest('Invalid args', 'Invalid args') placeIDArray = [] if placeID: placeIDArray = placeID.split('_') if len(placeIDArray) > 1: lat, lon = geohash.decode(placeIDArray[-1][:12]) limit = req.get_param_as_int('limit') or 5 filters = self.match_filters(req) if len(placeIDArray) > 1 and placeIDArray[-1] and len( placeIDArray[-1]) > 12: filters['type'] = placeIDArray[-1][12:].upper() try: filters['id'] = str(hashids.decode(placeIDArray[0])[0]) except: filters['id'] = '_'.join(placeIDArray[:-1]) if filters['type'] == 'H': filters['type'] = 'housenumber' results = reverse(lat=lat, lon=lon, limit=limit, **filters) tieredResults = [[], [], [], [], [], []] for result in results: if result.type[0] == 'R' and not tieredResults[4]: tieredResults[5].append(result) elif result.distance < 10: if result.type in ['B', 'S', 'SS']: tieredResults[0].append(result) else: tieredResults[1].append(result) elif result.type != 'ST': if result.type in ['B', 'S', 'SS']: tieredResults[2].append(result) else: tieredResults[3].append(result) else: tieredResults[4].append(result) finalResults = [] for tr in tieredResults: finalResults += tr self.render(req, resp, finalResults[:1], filters=filters, limit=limit)
def process_row(self, req, row, filters, columns): lat = row.get('latitude', row.get('lat', None)) lon = row.get('longitude', row.get('lon', row.get('lng', row.get('long', None)))) try: lat = float(lat) lon = float(lon) except (ValueError, TypeError): return filters = self.match_row_filters(row, filters) results = reverse(lat=lat, lon=lon, limit=1, **filters) if results: result = results[0] row.update({ 'result_latitude': result.lat, 'result_longitude': result.lon, 'result_label': str(result), 'result_distance': int(result.distance), 'result_type': result.type, 'result_id': result.id, 'result_housenumber': result.housenumber, }) self.add_extra_fields(row, result)
def process_row(self, req, row, filters, columns, index): lat = row.get('latitude', row.get('lat', None)) lon = row.get('longitude', row.get('lon', row.get('lng', row.get('long', None)))) try: lat = float(lat) lon = float(lon) except (ValueError, TypeError): return filters = self.match_row_filters(row, filters) results = reverse(lat=lat, lon=lon, limit=1, **filters) if results: result = results[0] row.update({ 'result_latitude': result.lat, 'result_longitude': result.lon, 'result_label': str(result), 'result_distance': int(result.distance), 'result_type': result.type, 'result_id': result.id, 'result_housenumber': result.housenumber, }) self.add_extra_fields(row, result)
def test_reverse_return_closer_point(factory): factory(lat=78.23, lon=-15.23) good = factory(lat=48.234545, lon=5.235445) assert reverse(lat=48.234545, lon=5.235445)[0].id == good['id']
def test_reverse_can_be_filtered(factory): factory(lat=48.234545, lon=5.235445, type="street") factory(lat=48.234546, lon=5.235446, type="city") results = reverse(lat=48.234545, lon=5.235445, type="city") assert len(results) == 1 assert results[0].type == "city"
def test_reverse_return_housenumber(factory): factory(housenumbers={'24': {'lat': 48.234545, 'lon': 5.235445}}) results = reverse(lat=48.234545, lon=5.235445) assert results[0].housenumber == '24' assert results[0].type == 'housenumber'