diff --git a/sharedstreets/tests/test_tile.py b/sharedstreets/tests/test_tile.py index 47aa1c7..b810a32 100644 --- a/sharedstreets/tests/test_tile.py +++ b/sharedstreets/tests/test_tile.py @@ -231,16 +231,16 @@ def test_get_tile(self, uri_expand, iter_objects): everything.lonlats = [-122.27120, 37.80437, -122.27182, 37.80598] iter_objects.return_value = [everything, everything] - geometries, intersections, references, metadata = tile.get_tile(16, 10509, 25324) + T = tile.get_tile(16, 10509, 25324) self.assertEqual(len(uri_expand.mock_calls), 4) for mock_call in uri_expand.mock_calls: self.assertEqual(mock_call[1][0], tile.DATA_URL_TEMPLATE) - self.assertEqual(len(geometries), 1) - self.assertEqual(len(intersections), 1) - self.assertEqual(len(references), 1) - self.assertEqual(len(metadata), 1) + self.assertEqual(len(T.geometries), 1) + self.assertEqual(len(T.intersections), 1) + self.assertEqual(len(T.references), 1) + self.assertEqual(len(T.metadata), 1) @mock.patch('sharedstreets.tile.iter_objects') @mock.patch('uritemplate.expand') @@ -248,14 +248,14 @@ def test_get_tile_alt_url(self, uri_expand, iter_objects): iter_objects.return_value = [] - geometries, intersections, references, metadata = tile.get_tile(16, 10509, 25324, + T = tile.get_tile(16, 10509, 25324, data_url_template='https://example.com/{z}-{x}-{y}.{layer}.pbf') self.assertEqual(len(uri_expand.mock_calls), 4) for mock_call in uri_expand.mock_calls: self.assertEqual(mock_call[1][0], 'https://example.com/{z}-{x}-{y}.{layer}.pbf') - self.assertEqual(len(geometries), 0) - self.assertEqual(len(intersections), 0) - self.assertEqual(len(references), 0) - self.assertEqual(len(metadata), 0) + self.assertEqual(len(T.geometries), 0) + self.assertEqual(len(T.intersections), 0) + self.assertEqual(len(T.references), 0) + self.assertEqual(len(T.metadata), 0) diff --git a/sharedstreets/tile.py b/sharedstreets/tile.py index cc67c6b..a52e9fc 100644 --- a/sharedstreets/tile.py +++ b/sharedstreets/tile.py @@ -17,6 +17,15 @@ # Used for Mercator projection and tile space OSM = ModestMaps.OpenStreetMap.Provider() +class Tile: + ''' Container for lists of SharedStreets geometries, intersections, references, and metadata. + ''' + def __init__(self, geometries, intersections, references, metadata): + self.geometries = geometries + self.intersections = intersections + self.references = references + self.metadata = metadata + def truncate_id(id): ''' Truncate SharedStreets hash to save space. ''' @@ -67,7 +76,7 @@ def is_inside(southwest, northeast, geometry): return True def get_tile(zoom, x, y, data_url_template=None): - ''' Get geometries, intersections, and references inside a tile. + ''' Get a single Tile instance. ''' if data_url_template is None: data_url_template = DATA_URL_TEMPLATE @@ -112,7 +121,7 @@ def get_tile(zoom, x, y, data_url_template=None): logger.debug('{} metadata'.format(len(metadata))) - return geometries, intersections, references, metadata + return Tile(geometries, intersections, references, metadata) def geometry_feature(geometry, metadata): ''' @@ -191,20 +200,20 @@ def reference_feature(reference): ] } -def make_geojson(geometries, intersections, references, metadata): +def make_geojson(tile): ''' ''' geojson = dict(type='FeatureCollection', features=[], references=[]) - for geometry in geometries.values(): - geojson['features'].append(geometry_feature(geometry, metadata[geometry.id])) + for geometry in tile.geometries.values(): + geojson['features'].append(geometry_feature(geometry, tile.metadata[geometry.id])) #break - for intersection in intersections.values(): + for intersection in tile.intersections.values(): geojson['features'].append(intersection_feature(intersection)) #break - for reference in references.values(): + for reference in tile.references.values(): geojson['references'].append(reference_feature(reference)) #break @@ -217,6 +226,5 @@ def make_geojson(geometries, intersections, references, metadata): def main(): args = parser.parse_args() - geometries, intersections, references, metadata = get_tile(args.zoom, args.x, args.y) - geojson = make_geojson(geometries, intersections, references, metadata) + geojson = make_geojson(get_tile(args.zoom, args.x, args.y)) print(json.dumps(geojson, indent=2)) diff --git a/sharedstreets/webapp.py b/sharedstreets/webapp.py index 462174a..5ee1a61 100644 --- a/sharedstreets/webapp.py +++ b/sharedstreets/webapp.py @@ -10,7 +10,7 @@ def get_index(): @app.route('/tile///.geojson') def get_tile(zoom, x, y): - return flask.jsonify(tile.make_geojson(*tile.get_tile(zoom, x, y))) + return flask.jsonify(tile.make_geojson(tile.get_tile(zoom, x, y))) parser = argparse.ArgumentParser(description='Run a local SharedStreets tile webserver')