2012-11-04 11:39:51 -08:00

65 lines
1.7 KiB
Python
Executable File

import os, sys
from optparse import OptionParser
from sys import argv
from shapely.ops import polygonize
from shapely.geometry import asShape, LineString
import json
optparser = OptionParser(usage="""%prog [options]
POLYGONIZE
Have GeoJSON lines? Let's make polygons!""")
optparser.add_option('-l', '--in_file', '--line_file', dest='infilename',
help='Give me your huddled masses of geodata!')
optparser.add_option('-p', '--out_files', '--polygon_file', dest='outfile',
help='Style name for resulting MSS, MML, and HTML files.')
if __name__ == "__main__":
(options, args) = optparser.parse_args()
#print 'len(args): ', len(args), ' - ', args
if len(args) is 2:
in_file = str(args[0])
out_file = str(args[1])
else:
in_file = options.infilename
out_file = options.outfile
#in_file = argv[1]
#out_file = argv[2]
input = json.load(open(in_file))
lines = []
#print input
for feat in input['features']:
shape = asShape(feat['geometry'])
geoms = hasattr(shape, 'geoms') and shape.geoms or [shape]
for part in geoms:
coords = list(part.coords)
for (start, end) in zip(coords[:-1], coords[1:]):
lines.append(LineString([start, end]))
#print lines
areas = polygonize(lines)
output = dict(type='FeatureCollection', features=[])
for (index, area) in enumerate(areas):
feature = dict(type='Feature', properties=dict(index=index))
feature['geometry'] = area.__geo_interface__
output['features'].append(feature)
#print output
json.dump(output, open(out_file, 'w'))