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

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

Как мультиполигонный shp-файл поделить на отдельные полигоны в wkt-формате?
trir
Гуру
Сообщения: 5356
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir »

SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
QGIS, PostGIS
Последний раз редактировалось trir 02 июн 2015, 18:14, всего редактировалось 1 раз.
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

trir писал(а):SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
OGR-SQL?
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

nickleb писал(а):
trir писал(а):SQL'ем
⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
OGR-SQL?
нашёл такое:
gis.stackexchange.com/questions/88272/ogrinfo-sql-example
gamm
Гуру
Сообщения: 4170
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm »

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

[ Сообщение с мобильного устройства ]
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

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

[ Сообщение с мобильного устройства ]
да, gamm, спасибо... что в Python'е, что в R - оgr.. попробую...
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris »

А я бы выгрузил в CSV через ogr2ogr с указанием "геометрию сохранить в WKT". Ну, а там уже текстовый файл можно разобрать чем угодно.
Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

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

Сообщение Ariki »

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

ogr2ogr -explodecollections output.shp input.shp
man ogr2ogr
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение 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
Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

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

Сообщение Ariki »

Да, был невнимателен и упустил, что WKT нужен в результате.
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

Ariki и Boris, спасибо Вам!
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение 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
nickleb
Гуру
Сообщения: 969
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb »

см. также ссылку по теме:
https://github.com/jlaura/export2wkt
Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя