Колба загрузки шейп-файлов в postgis - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь загрузить шейп-файл в 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)
...