SHP-мультиполигонный поделить на отдельные wkt-полигоны
Добавлено: 02 июн 2015, 17:10
Как мультиполигонный shp-файл поделить на отдельные полигоны в wkt-формате?
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
OGR-SQL?trir писал(а):SQL'ем⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
нашёл такое:nickleb писал(а):OGR-SQL?trir писал(а):SQL'ем⎯ GeometryN(N: integer): Geometry - возвращает N-й элемент коллекции.
да, gamm, спасибо... что в Python'е, что в R - оgr.. попробую...gamm писал(а):Мой совет обычен - загрузить в R через rgdal, получите список. Если дырок нет, то просто идете по списку и пишете тем же rgdal-ом. Если дырки и прочие осложнения есть, то придётся восстанавливать топологию.
[ Сообщение с мобильного устройства ]
Код: Выделить всё
ogr2ogr -explodecollections output.shp input.shp
как то так?Ariki писал(а):man ogr2ogrКод: Выделить всё
ogr2ogr -explodecollections output.shp input.shp
Код: Выделить всё
ogr2ogr -explodecollections -lco GEOMETRY=AS_WKT -lco SEPARATOR=TAB -lco CREATE_CSVT=YES -f CSV output.csv input.shp
С многочисленными ключами утилит ogr2ogr порой можно целый день разбираться. Нашёл ещё свой доморощенный наколенный Python-скриптик, немного его подредактировал. Корявенькиий, конечно, не универсальный, но работает и, м.б., кому еще пригодится. Комментарии написал. Строго очень не судите... Выкладываю...nickleb писал(а):Ariki и Boris, спасибо Вам!
Код: Выделить всё
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