Обрезка shape по poly-файлу

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
rim
Интересующийся
Сообщения: 20
Зарегистрирован: 26 авг 2011, 16:51
Репутация: 0

Обрезка shape по poly-файлу

Сообщение rim » 23 янв 2014, 13:07

Добрый день.

Стоит задача, из шейпов береговых линий всего мира (скачаны с http://openstreetmapdata.com/data/coastlines , WSG84) - сделать новый шейп, обрезанный по файлу обрезки (http://gis-lab.info/data/osm/osm-rus-poly.7z , файл poly/russia_full.poly). Т.е. получить шейп с береговыми линиями России.
Как это сделать напрямую, используя poly-файл, не нашел. В итоге, скриптом polyconvert.pl перевел poly в GPX, утилитой http://gpx2shp.sourceforge.jp (используя опцию -e, edge) из GPX получил shape.

Споткнулся на обрезке в QGIS. Загрузил слой береговых линий и полученный слой для обрезки. Вектор -> Геообработка -> Отсечение. Исходный слой - береговой. Выполняю операцию и в выходной shape ничего не попадает.
И пишет пару сотен ошибок вида:

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

Ошибка создания объекта (ошибка OGR: Attempt to write non-linestring (MULTIPOINT) geometry to ARC type shapefile.)
Ошибка создания объекта (ошибка OGR: Attempt to write non-linestring (POINT) geometry to ARC type shapefile.)
Вопрос, что сделал неправильно или как такую задачу можно решить (обрезать shape по poly-файлу) иначе?
Поиск по форуму и Гугл не прояснил ситуацию.
Буду очень благодарен за помощь.

Вообще же, хочу получить карту России. Но в shape-файлах http://beryllium.gis-lab.info/project/osmshp/ нет береговой линии. И морей с заливами.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Обрезка shape по poly-файлу

Сообщение Дмитрий Барышников » 23 янв 2014, 22:58

Попробуйте ogr2ogr -skipfailures -clipsrc <путь до файла обрезки - строго один полигон> <выхоной шейп> lines.shp

rim
Интересующийся
Сообщения: 20
Зарегистрирован: 26 авг 2011, 16:51
Репутация: 0

Re: Обрезка shape по poly-файлу

Сообщение rim » 24 янв 2014, 16:23

А как замкнутый путь из линий преобразовать в полигон? Нашел решение только с использованием ArcGis. Других вариантов нет?

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Обрезка shape по poly-файлу

Сообщение Petruxin » 24 янв 2014, 17:10

В QGIS Вектор - Обработка геометрии- Преобразовать линии в полигоны пробовали?

rim
Интересующийся
Сообщения: 20
Зарегистрирован: 26 авг 2011, 16:51
Репутация: 0

Re: Обрезка shape по poly-файлу

Сообщение rim » 24 янв 2014, 17:31

Попробовал, выходной файл пустой. Странно даже. Ни ошибок, ни каких-нибудь кривых полигонов.

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

Re: Обрезка shape по poly-файлу

Сообщение Boris » 27 янв 2014, 18:58

Ответ на вопрос как получить замкнутый полигон из линий (линии, в данном конкретном случае с файлом russia_full.poly ):
  1. открыть файл в текстовом редакторе, убедиться, что там ровно 1 полигон/полилиния. Иначе придется делать несколько ходов.
  2. удалить все строки кроме строк с двумя координатами
  3. убедиться, что 1-я строка равна последней (в файле это так)
  4. посчитать кол-во строк с координатами (в этом файле их 32066)
  5. создать файл russia_full.mif, следующего содержания:

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

    Version   300
    Charset "WindowsCyrillic"
    Delimiter ","
    CoordSys Earth Projection 1, 104
    Columns 1
      ID1 Integer
    Data
     Region 1
     32066
    
  6. добавить координаты из предыдущего файла в конец файла MIF
  7. создать файла russia_full.mid, в который записать одну строку с любой цифрой (я выбрал 1). обязательно вставить перенос строки.
  8. выполнить команду

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

    ogrinfo -ro -geom=summary -al russia_full.MIF 
    что бы убедиться, что файл создан правильно (с точки зрения OGR ).
---
Дальше пробуйте как советовали выше. Если не получиться - пишите.
---
Не знаю, либо мой Mapinfo не принял полученный файл, либо он таков и есть, но Чукотка в файле russia_full.MIF - пропала. Есть подозрение, что это может быть одним из ответов на проблемы, случившиеся выше.
---
Кроме того стоит иметь в виду, что два источника имеют расхождения в границах - при наложении одного на другое видно, что границы пересекаются многократно. Только на части Каспийского побережья граница russia_full.MIF уходит в море, в остальных местах - как придется, а на Черном море вдоль 75% побережья, идет по берегу.

rim
Интересующийся
Сообщения: 20
Зарегистрирован: 26 авг 2011, 16:51
Репутация: 0

Re: Обрезка shape по poly-файлу

Сообщение rim » 31 янв 2014, 19:11

Да, вот это помогло, большое спасибо. С Чукоткой буду разбираться отдельно.
Только в 7-м пункте стоит поправить, что расширение второго файла должно быть MID.

С помощью команды

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

ogr2ogr -skipfailures -clipsrc russia_full_poly.MIF cutted_lines.shp lines.shp
все получилось.
Надо было раньше на форум обратиться, сэкономил бы кучу времени.

Ответить

Вернуться в «Я новичок!»

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

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