У меня есть 7 ГБ файл GeoJson, который я хотел бы загрузить в базу данных PostGIS. Я пытался использовать ogr2ogr, но это не удается, потому что файл слишком велик для загрузки ogr2ogr в память и последующей обработки.
Существуют ли другие варианты загрузки этого файла геоджона в PostGIS?
Я получаю ошибку ogr2ogr:
ОШИБКА 2: CPLMalloc (): Недостаточно памяти, выделяющей -611145182 байта. Это приложение запросило Runtime прекратить его необычным способом. Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации.
Ответы:
Отправленный вами пример показывает, что возможно вручную разбить файл с помощью редактора, такого как notepad ++
1) Для каждого чанка создайте заголовок:
2) После заголовка разместите множество функций:
3) Закончить кусок с:
РЕДАКТИРОВАТЬ - Вот код Python, который разделит файл на части определенного размера (по количеству функций):
источник
К сожалению, JSON, как и XML, плохо подходит для потоковой обработки, поэтому почти во всех реализациях требуется, чтобы весь набор данных был загружен в память. Хотя это нормально для небольших наборов, в вашем случае нет другого выбора, кроме разбиения набора данных на более мелкие, управляемые куски.
В качестве улучшенного решения Pablo предлагается решение, которое не требует от вас фактического открытия и загрузки файла в редактор и разделения вручную, но пытается максимально автоматизировать весь процесс.
Скопируйте файл json на хост Unix (linux, osx) или установите инструменты cygwin в Windows. Затем откройте оболочку и используйте vim для удаления первой и последней строки из файла:
введите dd, чтобы удалить первую строку, затем SHIFT-G, чтобы переместить конец файла, снова введите dd, чтобы удалить последнюю строку. Теперь введите : wq, чтобы сохранить изменения. Это займет максимум пару минут.
Теперь мы будем использовать всю мощь Unix, чтобы разбить файл на более управляемые куски. В типе оболочки:
Иди, возьми пиво. Это разделит файл на множество небольших файлов, каждый из которых содержит 10000 строк. Вы можете увеличить количество строк, если вы будете достаточно маленькими, чтобы ogr2gr мог управлять ими.
Теперь мы будем придерживаться головы и хвоста для каждого из файлов:
Хватай змею. Первые две команды просто создают файл заголовка и нижнего колонтитула с правильным содержимым (просто для удобства), в то время как последняя добавит заголовок и нижний колонтитул к каждому фрагменту, который мы разделили выше, и удалит блок без заголовка / нижнего колонтитула (для экономии места). ).
В этот момент вы можете надеяться обработать множество мест-кусков - *. JsonТеперь файлов place .json с помощью ogr2ogr:
источник
sed -i "1d" places.json
удалить первые 4 строки:sed -i "1,4d" places.json
удалить последние 4 строки:head -n -4 places.json > places2.json
Можно загрузить ваши данные с помощью FME Desktop. Это очень просто.
источник
Должно быть просто написать ленивого читателя и писателя на Python, который конвертировал бы ваш файл geojson в гораздо меньший формат шейп-файла или непосредственно в SQL, не делая все это в памяти. После преобразования собственные инструменты PostGIS могут импортировать большие наборы данных. Поддержка geojson в OGR относительно нова, и нет никаких флагов для обработки больших файлов.
Если вы можете как-то поделиться управляемым фрагментом вашего файла, я могу вам помочь.
источник
Это улучшилось в GDAL 2.3.0 https://trac.osgeo.org/gdal/wiki/Release/2.3.0-Новости - теперь это намного более эффективно при чтении больших файлов GeoJSON.
источник