Hi Sean.

Thanks, that worked like a charm.

Sooo...something I am trying to wrap my head around here...it seems that in
my 'input_schema' whether I put 'LineString' or 'MultiLineString' the
result is always the same (which is: a 'MultiLineString').

For ex: I was expecting if I put 'LineString' in as the ( 'geometry':
'LineString' ) that the lines (**if they were geometrically connected and
of course had the same key**) would be dissolved into a single feature (as
oppose to a 'MultiLineString').

Also...same thing happened when I used linemerge() in place of

cascaded_union() ..

>>

def dissolve(inFile, outFile):
    # dictionary for union
    uniqueRefs = {}
    with fiona.open(inFile, 'r', encoding='utf-8') as input:
        input_driver = input.driver
        input_crs = input.crs
        # it seems whether this is a 'LineString' or a
'MultiLineString' it will always
        # return a 'MultiLineString'
        input_schema = {'geometry': 'LineString','properties':
{'ref'.encode("utf-8"): 'str:254'}}
        with fiona.open(outFile, 'w', driver=input_driver,
crs=input_crs, schema=input_schema, encoding='utf-8') as output:
            for item in input:

                # extract the key
                key = item['properties']['ref']
                geom = shape(item['geometry'])

                if not geom.type.startswith('Multi'):
                    geom = [geom]
                for g in geom:
                    if key in uniqueRefs:
                        uniqueRefs[key].append(g)
                    else:
                        uniqueRefs[key] = [g]

            for key in uniqueRefs:
                dissolve_feat = cascaded_union(uniqueRefs[key])
                output.write({'geometry':mapping(dissolve_feat),
'properties': {'ref': key}})
_______________________________________________
Community mailing list
Community@lists.gispython.org
http://lists.gispython.org/mailman/listinfo/community

Reply via email to