Страница 1 из 1

SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 17:10
nickleb
Как мультиполигонный shp-файл поделить на отдельные полигоны в wkt-формате?

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 18:03
trir
SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
QGIS, PostGIS

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 18:11
nickleb
trir писал(а):SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
OGR-SQL?

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 18:51
nickleb
nickleb писал(а):
trir писал(а):SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
OGR-SQL?
нашёл такое:
gis.stackexchange.com/questions/88272/ogrinfo-sql-example

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 18:57
gamm
Мой совет обычен - загрузить в R через rgdal, получите список. Если дырок нет, то просто идете по списку и пишете тем же rgdal-ом. Если дырки и прочие осложнения есть, то придётся восстанавливать топологию.

[ Сообщение с мобильного устройства ]

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 02 июн 2015, 19:03
nickleb
gamm писал(а):Мой совет обычен - загрузить в R через rgdal, получите список. Если дырок нет, то просто идете по списку и пишете тем же rgdal-ом. Если дырки и прочие осложнения есть, то придётся восстанавливать топологию.

[ Сообщение с мобильного устройства ]
да, gamm, спасибо... что в Python'е, что в R - оgr.. попробую...

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 01:20
Boris
А я бы выгрузил в CSV через ogr2ogr с указанием "геометрию сохранить в WKT". Ну, а там уже текстовый файл можно разобрать чем угодно.

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 01:53
Ariki

Код: Выделить всё

ogr2ogr -explodecollections output.shp input.shp
man ogr2ogr

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 01:59
Boris
Ariki писал(а):

Код: Выделить всё

ogr2ogr -explodecollections output.shp input.shp
man ogr2ogr
как то так?

Код: Выделить всё

ogr2ogr -explodecollections -lco GEOMETRY=AS_WKT -lco SEPARATOR=TAB -lco CREATE_CSVT=YES -f CSV output.csv input.shp

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 02:12
Ariki
Да, был невнимателен и упустил, что WKT нужен в результате.

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 09:06
nickleb
Ariki и Boris, спасибо Вам!

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 13:30
nickleb
nickleb писал(а):Ariki и Boris, спасибо Вам!
С многочисленными ключами утилит ogr2ogr порой можно целый день разбираться. Нашёл ещё свой доморощенный наколенный Python-скриптик, немного его подредактировал. Корявенькиий, конечно, не универсальный, но работает и, м.б., кому еще пригодится. Комментарии написал. Строго очень не судите... Выкладываю...

Код: Выделить всё

from osgeo import ogr
import sys, os

#Директорий
dir_work = "G:"+os.sep+"Layers_2015"+os.sep+"_BEREG"+os.sep+"_SHORE"+os.sep

#Имя исходного shape-файла
shp_name = dir_work + "OBREZ_1_GSHHS_H_L1Poly.shp"

#Имя выходного wkt-файла
out_wkt_name = shp_name.replace(".shp",".wkt")

#Открываем исходный shape-файл
layer = ogr.Open(shp_name)

#Ссылка на открытый исходный shape-файл 
layer_ref = layer.GetLayer()

#Ссылка на первый feature
feature_ref = layer_ref.GetNextFeature() 

#Открываем для записи wkt-файл
out_wkt=open(out_wkt_name,"w")

#необязательный счётчик feature
nr_feature=1
#Цикл по features в исходном shape-файле 
while feature_ref is not None:
    #получаем ссылку на тип геометрии текущего feature'са
    geom = feature_ref.GetGeometryRef()
    #well-known-text типа геометрии текущего feature'са
    geom_name = geom.GetGeometryName()
    #условие по которому будем писать в выходной wkt-файл
    if geom_name=="MULTIPOLYGON" or geom_name=="POLYGON":
        #пишем строкою в выходной файл
        out_wkt.write(str(geom)+ '\n')
    #получение ссылки на следующий feature
    feature_ref = layer_ref.GetNextFeature()
    #увеличиваем на единицу необязательный счётчик feature
    nr_feature=nr_feature+1

Re: SHP-мультиполигонный поделить на отдельные wkt-полигоны

Добавлено: 04 июн 2015, 13:58
nickleb
см. также ссылку по теме:
https://github.com/jlaura/export2wkt