Колба загрузки шейп-файлов в postgis

Я пытаюсь загрузить шейп-файл в PostGIS. Я использую Flask и получил файлы от пользователя (.shp, .shx, .dbf и.prj) и сохранил их во временные файлы перед использованием библиотеки Python PYSHP для доступа к коллекции фигур.

r = shapefile.Reader(tempfile_name + '.shp')
shapes = r.shapes()

Я хочу объединить полигоны в коллекции фигур и добавить их в базу данных вместе с некоторыми другими данными в виде одной записи. В основном слияние полигонов в мультиполигон. Соответствующий столбец таблицы PostGIS определяется как:

footprint = db.Column(Geometry(geometry_type='MULTIPOLYGON', srid=27700))

Я не знаю, как приступить к объединению полигонов и преобразованию их в формат, который можно записать в базу данных PostGIS с помощью SQLAlchemy и GeoAlchemy2. Советы о том, как поступить, будут с благодарностью приняты.

Я смотрел на геопанды и стройный, но, кажется, могу найти соответствующую информацию

я использую

  • Колба 1.0.2
  • Postgresql 9,6
  • SQLAlchmey 1.2.7
  • Геоалхимия2 0.4.2

Обновление 1.

Нашел решение, которое, кажется, работает, но кажется довольно грязным.

Я перебираю shape () shapefile.Reader и сохраняю каждый полигон в массив, прежде чем использовать cascaded_union из shapely библиотеки. Затем используйте библиотеку pygeoif для преобразования информации, которая будет сохранена в базе данных postgis.

poly = []
for shp in r.shapes():
  if shp.shapeType == 5:
    poly.append(shape(shp.__geo_interface__))
footprint_poly = cascaded_union(poly)

gshape = pygeoif.MultiPolygon(pygeoif.geometry.as_shape(footprint_poly))
project.footprint = 'SRID=27700;{0}'.format(gshape.wkt)

0 ответов

Другие вопросы по тегам