From 171a85bdffb64bf114b1e1b692791b7c0cc9848c Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 5 Apr 2016 19:45:44 -0400 Subject: [PATCH] [osm/polygons] Storing polygon JSON under a different key so it doesn't have to be read from disk after a successful cache matched point-in-polygon test just to retrieve the properties --- scripts/geodata/polygons/index.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/scripts/geodata/polygons/index.py b/scripts/geodata/polygons/index.py index 51d10ad6..3b11f742 100644 --- a/scripts/geodata/polygons/index.py +++ b/scripts/geodata/polygons/index.py @@ -99,7 +99,6 @@ class PolygonIndex(object): return { 'type': 'Feature', 'geometry': mapping(poly), - 'properties': properties } def add_polygon(self, poly, properties, cache=False, include_only_properties=None): @@ -109,12 +108,10 @@ class PolygonIndex(object): if not self.persistent_polygons or cache: self.polygons[self.i] = prep(poly) - if not self.persistent_polygons: - value = json.dumps(properties) - else: - value = json.dumps(self.polygon_geojson(poly, properties)) + if self.persistent_polygons: + self.polygons_db.Put(self.polygon_key(self.i), json.dumps(self.polygon_geojson(poly, properties))) - self.polygons_db.Put(str(self.i), value) + self.polygons_db.Put(self.properties_key(self.i), json.dumps(properties)) self.index_polygon_properties(properties) self.i += 1 @@ -288,13 +285,19 @@ class PolygonIndex(object): poly = self.polygons[i] contains = poly.contains(point) if contains: - properties = json.loads(self.polygons_db.Get(str(i))) + properties = json.loads(self.polygons_db.Get(self.properties_key(i))) if not return_all: return properties else: containing.append(properties) return containing + def polygon_key(self, i): + return 'poly:{}'.format(i) + + def properties_key(self, i): + return 'props:{}'.format(i) + def polygons_contain_cached(self, candidates, point, return_all=False): containing = None if return_all: @@ -304,7 +307,7 @@ class PolygonIndex(object): poly = self.polygons.get(i, None) data = {} if poly is None: - data = json.loads(self.polygons_db.Get(str(i))) + data = json.loads(self.polygons_db.Get(self.polygon_key(i))) poly = prep(self.polygon_from_geojson(data)) self.polygons[i] = poly self.cache_misses += 1 @@ -314,7 +317,7 @@ class PolygonIndex(object): contains = poly.contains(point) if contains: if not data: - data = json.loads(self.polygons_db.Get(str(i))) + data = json.loads(self.polygons_db.Get(self.properties_key(i))) properties = data['properties'] if not return_all: