[polygons] Saving line-delimited GeoJSON to reduce memory consumption when loading

This commit is contained in:
Al
2015-10-13 19:14:35 -04:00
parent 646ad64af8
commit 9ee2a7a474

View File

@@ -97,16 +97,13 @@ class RTreePolygonIndex(object):
def save_polygons(self, out_filename): def save_polygons(self, out_filename):
out = open(out_filename, 'w') out = open(out_filename, 'w')
features = []
for props, poly in self.polygons: for props, poly in self.polygons:
features.append({ feature = {
'type': 'Feature', 'type': 'Feature',
'geometry': mapping(poly.context), 'geometry': mapping(poly.context),
'properties': props 'properties': props
}) }
json.dump({'type': 'FeatureCollection', out.write(json.dumps(feature) + u'\n')
'features': features},
out)
def save(self, polys_filename=DEFAULT_POLYS_FILENAME): def save(self, polys_filename=DEFAULT_POLYS_FILENAME):
self.save_polygons(os.path.join(self.save_dir, polys_filename)) self.save_polygons(os.path.join(self.save_dir, polys_filename))
@@ -115,9 +112,10 @@ class RTreePolygonIndex(object):
@classmethod @classmethod
def load_polygons(cls, filename): def load_polygons(cls, filename):
feature_collection = json.load(open(filename)) f = open(filename)
polygons = [] polygons = []
for feature in feature_collection['features']: for line in f:
feature = json.load(line.rstrip())
poly_type = feature['geometry']['type'] poly_type = feature['geometry']['type']
if poly_type == 'Polygon': if poly_type == 'Polygon':