Как склеить файлы .geojson в один файл?

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 21 дек 2016, 20:04

Как склеить файлы с расширением .geojson в один файл ?
Конечная цель – конвертировать их в shp

Один способ (открывать файл geojson в QGIS, и оттуда пересохранять как shp) мне известен. Но нужно склеить в один файл много файлов .geojson И нужно научится делать это командной операцией.

Советуют использовать утилиту GDAL ogr2ogr. Видимо, это командной строкой в OSGeo4W Shell. Вроде бы она сразу может и склеить, и конвертировать в шейп.

Каким образом найти, как использовать ogr2ogr для этой задачи (т.е. как написать код).
Или, если есть, другой способ.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Denis Rykov » 21 дек 2016, 20:10

Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 21 дек 2016, 21:35

Denis Rykov писал(а):Объединение
Этот пример пока слишком общий для меня, чтобы разобраться. Но спасибо за ссылку на статью.

Но я "дошла" как решить эту задачу здесь (с чем она и была связана):
viewtopic.php?f=2&t=18845#p149251

Итого, там уже генерируется скрипт для OSGeo4W Shell. Нужно только открыть (выбрав "edit") генерируемый утилитой файл out__MergeAll2shp. Скорировать там все и вставить в консоль OSGeo4W Shell (предварительно внутри перейдя в папку где располагаются файлы geojson).

Использовала код:

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

ogr2ogr -F "ESRI Shapefile" -update -append merge.shp C:\GIS_Doutorado_QS\Study\Testgsod\out__0.geojson -nln merge -lco ENCODING=UTF-8
ogr2ogr -F "ESRI Shapefile" -update -append merge.shp C:\GIS_Doutorado_QS\Study\Testgsod\out__1.geojson -nln merge -lco ENCODING=UTF-8
ogr2ogr -F "ESRI Shapefile" -update -append merge.shp C:\GIS_Doutorado_QS\Study\Testgsod\out__2.geojson -nln merge -lco ENCODING=UTF-8
Все почти получилось. Только из 126 файлов в двух выдана такая ошибка (скриншот).
Это сейчас не беда. Я их вручную (если они не испорчены при скачивании) сконвертирую. Однако странно. Почему по двум файлам система выдала ошибку, а все остальные она благополучно объединила и конвертнула в шейп? Проверяла - открывается в ArcGIS, но с потерянным числом объектов (за счет этой ошибки)
Вложения
er1.jpg
er1.jpg (100.26 КБ) 10034 просмотра

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 21 дек 2016, 21:55

Хотя нет, пожалуй, лучше разобраться с этой ошибкой. Ошибка в 104 и 113 файле. При этом до 104 система никаких сообщений не выдавала. То есть можно предположить, что до этого она все делала правильно. А после сообщения об ошибке в 104 стала выдавать для каждого последующего файла warning (скриншот).
Как понимаю принцип работы утилиты ogr2ogr, при объединении она присоединяет к предыдущему шагу. То есть, если шаг испорчен.. то, как думаю, она дальше 104 уже корректно могла не работать.

Не понятно. Все файлы одинаковые. Код одинаковый. Почему-то на двух она спотыкается (((
Вложения
er2.jpg
er2.jpg (86.44 КБ) 10030 просмотров

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 21 дек 2016, 22:10

Нет, запуталась окончательно. :(
При удалении этих двух ошибочных - система находит новые ошибочные. То есть, видимо, они были сразу, только на панели консоли видны лишь последние записи.


Итого, общий вывод. Что из 126 файлов какая-то часть не открывается, выдавая ошибку (первый скриншот). Но какая-то часто открывается. Это так, потому что шейп файл с полными полями генерируется. Только объектов в нем из 25 000 - всего 23 000. Две тысячи пропали.


Может быть, кто-то код посмотрит? Может быть в нем ошибка. Все же про него было сказано, что он "примерный". А самой такой сделать - базы не хватает.

или другой способ.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Как склеить файлы .geojson в один файл?

Сообщение Александр Мурый » 21 дек 2016, 22:25

Не очень понятно, при чём тут "код". Там же белым английским по чёрному сказано, что файлы не читаются. Почему они не читаются, без самих файлов точно не разобраться.
Редактор материалов, модератор форума

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 21 дек 2016, 22:49

Александр Мурый писал(а):Не очень понятно, при чём тут "код". Там же белым английским по чёрному сказано, что файлы не читаются. Почему они не читаются, без самих файлов точно не разобраться.
Вот, все файлы в zip папке (2.7 mb)
Почему код? Потому что вручную попробовала открыть один "испорченный" файл (№104) - все отлично открывается в QGIS, конвертируется в шейп.
Так в чем дело? Почему одни получаются, а другие нет, когда все одинаковое..

вечно меня заносит на странные ошибки.. :(

Может быть дело в объеме? Пока только эта мысль. Может быть 126 для этой утилиты слишком много..

В папке:
out__0.geojson...
out__125.geojson
файлы, которые пробую склеить в один шейп файл

mycode.txt - код по образу того, что дает сгенерированный out__MergeAll2shp. Последний тоже есть в папке. Но там в коде другой адрес папок к каждому файлу (с большим адресом совсем ничего не получалось. Когда я файлы переместила поближе, стало получатся, но вот с такими ошибками)

merge.shp (папка Merge_notfull) - неполный сгенерированный шейп при использовании кода из файла mycode.txt
Из 25000 объектов там только 23 000

104test.shp - проба вручную сконвертировать файл out__104.geojson. (удачная)
Вложения
Testgsod.zip
(2.76 МБ) 282 скачивания

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

Re: Как склеить файлы .geojson в один файл?

Сообщение Ariki » 21 дек 2016, 23:56

Файл JSON некорректен (содержит неэкранированный обратный слэш).
Имеем:

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

"STATION":"OLIPHANT\ONT"
Должно быть:

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

"STATION":"OLIPHANT\\ONT"

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как склеить файлы .geojson в один файл?

Сообщение ericsson » 22 дек 2016, 04:01

Наталья, во-первых, когда вы что-то делаете в консоли пакетно, множество вещей (ошибок) "улетают" за край экрана. Чтобы видеть вывод ошибок, стоит писать весь вывод в файл, добавляя

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

>> log.txt
в конце каждой команды.

Во-вторых, то, что какой-то файл открывается, не всегда означает, что он открылся без ошибок - одни программы, видя ошибку, останавливают импорт с сообщением, другие пытаются ошибку обойти, третьи ее просто игнорируют. И могут делать это молча.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 22 дек 2016, 07:38

Ariki писал(а):Файл JSON некорректен (содержит неэкранированный обратный слэш).
Имеем:

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

"STATION":"OLIPHANT\ONT"
Должно быть:

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

"STATION":"OLIPHANT\\ONT"
Похоже это ошибка утилиты скачивания с ArcGIS серверов. Или же что-то внутри этих кусков в самих данных, что сделало эти файлы битыми.
Может быть, автор сможет разобраться - почему так. Из 126 файлов - 8 получились битыми.
Хотя вряд ли, конечно, дойдут руки этим заняться...

Выше говорила, что вручную в QGIS они открываются. Видимо, я случайно не тот файл тогда выбрала. Нет, эти 8 не открываются и в QGIS. "Invalid Data Source"
Это номера: 15, 32, 77, 79, 86, 87, 104, 113.

Отдельно они в badfiles.zip

P.S. Повторила еще раз загрузку (может, что-то с Интернетом было в прошлый раз). Нет, ровно те же номера файлов снова битые.


Можно ли с ними что-то сделать, чтобы исправить? Этот слэш удалить? Или они совсем битые?
И тогда нужно искать вообще другой способ скачивания с ресурса, раз часть файлов скачивается таким образом..


Если их исправить и хоть вручную конвертировать - то все хорошо. Когда из кода убрала эти 8 штук - все хорошо сработало. Всего получилось 20 тысяч. 5 тыс - пропало. Немного странное соотношение (по идее, не больше 1.5 тысяч должно быть в 8 файлах).. но вот так. Там еще что-то с повторами (были повторы, которые пришлось убрать Dissolve tool), видимо, какие-то особенности нарезки данных, может быть от этого.


То есть, с утилитой GDAL ogr2ogr вопросов нет. Есть вопрос о битых geojson файлах. И о вероятной ошибке утилиты, через которую они скачивались с ArcGIS сервера. Впрочем, раньше такого за ней не замечатала. Возможно, дело в исходных данных.



Вот они:
https://gis.ncdc.noaa.gov/arcgis/rest/s ... apServer/0

В общем цель всего этого - сделать полный шейп метеостанций GSOD. Они нужны для корректной работы с ресурсом.
Вложения
badfiles.zip
(78.65 КБ) 316 скачиваний

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как склеить файлы .geojson в один файл?

Сообщение ericsson » 22 дек 2016, 10:23

Вы то, что процитировали, читать пробовали? Это к вопросу о том, что нужно исправить в этих файлах.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 22 дек 2016, 14:38

ericsson писал(а):Вы то, что процитировали, читать пробовали? Это к вопросу о том, что нужно исправить в этих файлах.
Понятно.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 22 дек 2016, 15:01

ericsson писал(а):Вы то, что процитировали, читать пробовали? Это к вопросу о том, что нужно исправить в этих файлах.

Ну ладно. Сейчас те файлы я исправила (заменив ошибочный слэш "\" на "\\"). После чего они стали открываться в QGIS. И все прогнала через скрипт, с кодом, как выше размещала.
При открытии объединенного шейпа в ArcGIS образовались повторы. Видимо, какой-то дефект скачивания? Было 24931 объект. Через Delete Identical tool по номеру станции (AWS) убрала идентичные точки. Осталось 21483 объекта.


А на сайте Global Surface Summary of the Day указано: 25132 станции
http://www.arcgis.com/home/webmap/viewe ... &source=sd

Итого, 3649 станций все-таки не попало. :roll:
Большей точности пока не могу добиться. Как и понять почему же получилось так. Потом напишу это в теме про этот ресурс - может еще кому-то пригодиться файлик. Или сможет скачать полную версию станций.
Также получившийся шейп здесь в приложении.
Вложения
GSOD_stations_dec2016.zip
(1.41 МБ) 317 скачиваний

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как склеить файлы .geojson в один файл?

Сообщение Natalia Novoselova » 22 дек 2016, 15:10

Ariki писал(а):Файл JSON некорректен (содержит неэкранированный обратный слэш).
Имеем:

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

"STATION":"OLIPHANT\ONT"
Должно быть:

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

"STATION":"OLIPHANT\\ONT"
Хотела спросить, а как вы догадались, что именно в этом ошибка? Какая-то стандартная, или просто просмотрели файл и поняли, что это ошибка?

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

Re: Как склеить файлы .geojson в один файл?

Сообщение Ariki » 22 дек 2016, 15:56

Я с помощью Python прочитал кусок файла в позиции, указанной в сообщении об ошибке (offset 8084) на вашем скриншоте, вывел этот кусок на экран и увидел обратный слэш. Но потом вспомнил, что можно проще — с помощью онлайн-сервиса валидации JSON. Просто перетаскиваете файл в окно и получаете список ошибок. Существует даже специальный сервис для проверки и просмотра GeoJSON.

Ответить

Вернуться в «Общие вопросы»

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

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