From 9ee2a7a474bb0476f50cc5e0eab524a4f35e1d44 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 13 Oct 2015 19:14:35 -0400 Subject: [PATCH] [polygons] Saving line-delimited GeoJSON to reduce memory consumption when loading --- scripts/geodata/polygons/index.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/scripts/geodata/polygons/index.py b/scripts/geodata/polygons/index.py index 3156e4ca..84a3d8a7 100644 --- a/scripts/geodata/polygons/index.py +++ b/scripts/geodata/polygons/index.py @@ -97,16 +97,13 @@ class RTreePolygonIndex(object): def save_polygons(self, out_filename): out = open(out_filename, 'w') - features = [] for props, poly in self.polygons: - features.append({ + feature = { 'type': 'Feature', 'geometry': mapping(poly.context), 'properties': props - }) - json.dump({'type': 'FeatureCollection', - 'features': features}, - out) + } + out.write(json.dumps(feature) + u'\n') def save(self, polys_filename=DEFAULT_POLYS_FILENAME): self.save_polygons(os.path.join(self.save_dir, polys_filename)) @@ -115,9 +112,10 @@ class RTreePolygonIndex(object): @classmethod def load_polygons(cls, filename): - feature_collection = json.load(open(filename)) + f = open(filename) polygons = [] - for feature in feature_collection['features']: + for line in f: + feature = json.load(line.rstrip()) poly_type = feature['geometry']['type'] if poly_type == 'Polygon':