Код, использующий fiona, терпит неудачу при попытке растворить многоугольники из-за разной геометрии - PullRequest
0 голосов
/ 11 июля 2019

Используя Фиона, я пытаюсь растворить слой с сотнями, иногда тысячами геометрий, основанных на поле растворения. Таким образом, геометрии с одинаковым значением поля растворения будут иметь унарную функцию объединения, чтобы сохранить геометрию одинаковой, но выглядеть как одна запись в слое.

У входа есть геом с типом 'MultiPolygon'. Geom выходных данных устанавливается как geom входных данных, поэтому все еще «MultiPolygon». Я думаю, что проблема заключается в том, что когда объединение выполнено, оно превращает многогранную геометрию в единую многоугольную геометрию, следовательно, при записи ее в выходной файл выдает код ошибки:

fiona.errors.GeometryTypeValidationError: Тип геометрии записи не соответствует типу геометрии схемы коллекции: 'Polygon'! = U'MultiPolygon '

Я не уверен, как изменить геометрию вывода на Polygon, потому что конечный результат будет MultiPolygon из-за всех различных значений поля растворения в данных.

Я новичок в этом, поэтому я надеюсь, что объяснил проблему ясно. Дайте мне знать, если у вас есть какие-либо уточняющие вопросы.

Это использует Python 2.7.14, MSC v.1500 32 бит GDAL / OGR версия 202400

с fiona.open (inGDB, layer = 'FISH') в качестве ввода:

meta = input.meta
with fiona.open(outGDB, 'w', layer= 'fish_dissolved', **meta) as output:

    e = sorted(input, key=lambda k: k['properties'][dissolve_field])

    for key, group in itertools.groupby(e, key=lambda x: x['properties'][dissolve_field]):
        properties, geom = zip(*[(feature['properties'], shape(feature['geometry'])) for feature in group])

        output.write({'geometry': mapping(unary_union(geom)), 'properties': properties[0]})

input.close () output.close ()

fiona.errors.GeometryTypeValidationError: Тип геометрии записи не соответствует типу геометрии схемы коллекции: 'Polygon'! = U'MultiPolygon '

...