Содержание

ogr2ogr

ogr2ogr - утилита пакета GDAL для работы с векторными форматами.

Общие сведения

Программа ogr2ogr предназначена для конвертации векторных данных из одного формата в другой.
Получить справку о поддерживаемых форматах и доступных ключах можно узнать просто набрав в коммандной строке:

ogr2ogr

Форматы

Актуальный список поддерживаемых форматов всегда можно найти на официальном сайте.
Среди них можно выделить наиболее распространенные и популярные:

Кириллица

Чтобы ogr2ogr корректно работал с файлами в названии которых есть кириллица, необходимо, перед выполнением команд установить переменную среды:

SET GDAL_FILENAME_IS_UTF8=OFF

Если исходные данные в кодировке UTF-8, то необходимо явным образом указывать, что выходные данные также будут в UTF-8, с помощью опции -lco ENCODING=UTF-8, например:

ogr2ogr -lco ENCODING=UTF-8 output.shp input.vrt

Конвертация

Конвертация ESRI Shapefile в формат MapInfo TAB:

ogr2ogr -f "MapInfo File" worldmap.tab worldmap.shp

Конвертация только объектов в поле name которых содержится строка «s»:

ogr2ogr -f "MapInfo File" -where "name=us" worldmap.mif worldmap.shp

Копирование набора данных убрав все поля кроме name:

ogr2ogr -f GeoJSON -select name output.geojson worldmap.mif

Контейнеры слоёв

Существуют форматы позволяющие хранить несколько слоёв с разными геометриями. Например, GPKG, SXF, PostgreSQL и другие.

Для извлечения всех слоёв в формат ESRI Shape в качестве цели указывается папка, а не имя файла:

ogr2ogr output_dir input.sxf

Извлечение конкретного слоя из набора:

ogr2ogr output_dir input.gpkg layer_name

Форматы не ограниченные по типу геометрии

Некоторые форматы позволяют хранить в одном слое сразу несколько типов геометрии и для их конвертации в форматы с одним типом геометрии требуется особый подход. Например, для конвертации MIF/MID в формат ESRI Shape нужно указать тип геометрии:

ogr2ogr -skipfailures output_POINT.shp input.mif -nlt "POINT"

или, чтобы получить все типы геометрий, можно использовать цикл (Windows):

for %n in (POINT POLYGON) do ogr2ogr -skipfailures output_%n.shp input.mif -nlt "%n"

Перепроецирование

Для перевода данных из одной системы координат в другую могут использоваться следующие параметры:

  1. -a_srs, назначение системы координат набору данных, без создания нового набора (если у набора была задана проекция - она игнорируется; фактически это не перепроецирование)
  2. -s_srs, указание исходной системы координат (если у набора данных уже прописана система координат - она игнорируется)
  3. -t_srs, требуемая система координат в которую будет осуществляться пересчет.

Например, у файла worldmap.shp нет файла описания проекции (*.prj) - его можно сгенерировать командой:

ogr2ogr -a_srs "EPSG:4326" -f "ESRI Shapefile" worldmap2.shp worldmap.shp

Перепроецирование из EPSG:4326 в EPSG:900913

ogr2ogr -s_srs "EPSG:4326" -t_srs "EPSG:900913" -f "ESRI Shapefile" worldmap3.shp worldmap2.shp

Проекция может задаваться не только кодом epsg, но и непосредственно в формате WKT или именем файла (в котором хранится описание проекции):

ogr2ogr -s_srs ESRI::Input.prj -t_srs ESRI::output.prj  shapeout.shp shapein.shp

Указание проекции в формате WKT:

ogr2ogr -t_srs "+proj=latlong +ellps=krass +towgs84=23.92,-141.27,-80.9,0,0,0,0" shapeout.shp shapein.shp

Обрезка

Можно обрезать данные по нужному охвату, углы задаются в формате мин X, мин Y, макс X, макс Y.

ogr2ogr -clipsrc 41.4 46.4 41.6 46.6 output.shp input.shp

Вместо координат можно обрезать и по сложной форме заданной другим shape-файлом:

ogr2ogr -clipsrc clipbound.shp output.shp input.shp

пакетно (Win):

for %n in (*.shp) do ogr2ogr -clipsrc clipbound.shp output_folder/%n %n

пакетно (Ubuntu):

for f in *.shp; do ogr2ogr -lco ENCODING=UTF-8 -clipsrc clipbound.shp output_folder/${f} ${f}; done

Объединение

Суть объединения по ogr'овски в том, что сначала создается копия первого источника данных, а потом к этой копии добавляются данные из второго, и т.д.

ogr2ogr result.shp input1.shp
ogr2ogr -update -append result.shp input2.shp -nln result

В OGR можно использовать операцию JOIN (объединение по общему полю):

ogr2ogr -sql "select input.*, table.* from input LEFT JOIN 'table.csv'.table ON input.id = table.IDINT" output.shp input.shp

В примере выше используется input.shp в качестве shape-файла и table.csv - в качестве присоединяемой таблицы. Присоединяемая таблица должна иметь расширение CSV. Обе таблицы разумеется должны иметь общее поле по которому будет происходить объединение, в данном случае это: id - поле в input.shp и IDINT - поле в table.csv. Ключом может быть и целочисленное и текстовое поле.

Следует учесть, в новом shape-файле названия полей будут изменены на новые, вида input.field1, input.field2,…, table.field1, table.field2 и т.д., т.е. в новой таблице названия полей будут указывать и источник. Так как существует ограничение на длину названия поля, то это может привести к ухудшению читаемости названия поля. Для начала можно укоротить названия входного shape-файла и таблицы и самих названий полей.

Более правильным решением является переназначение названий полей:

ogr2ogr -sql "select input.field1 AS FIELD1, table.field2 AS FIELD2 from input LEFT JOIN 'table.csv'.table ON input.id = table.IDINT" output.shp input.shp

PostreSQL/PostGIS

Вставка (добавление) записей в таблицу PostgreSQL данных из файла data.shp. Таблица должна существовать и иметь такие же поля, как и shp-файл.

ogr2ogr -append -t_srs "+init=epsg:4326" -f PostgreSQL PG:"host=адрес user=имя_пользователя dbname=имя_базы" data.shp

Перезаписывает test таблицу PostgreSQL данными из файла test.tab Таблица не обязана существовать.

ogr2ogr -append -overwrite -s_srs "+init=epsg:4326" -f PostgreSQL PG:"host=адрес user=имя_пользователя dbname=имя_базы" test.tab

Перезаписывает данные из файла data в таблицу PostgreSQL. Таблица будет носить имя не data, а test1. Таблица test1 не обязана существовать.

ogr2ogr -append -overwrite -t_srs "+init=epsg:4326" -f "PostgreSQL" PG:"host=адрес user=имя_пользователя dbname=test" data.shp -nln test1

Из таблицы PostgreSQL «adm» базы ipc конвертирует в allei.tab формата MapInfo.

ogr2ogr -f "MapInfo File" allei.tab PG:"host=адрес user=пользователь dbname=ipc" "adm"

Из таблицы PostgreSQL «adm» базы ipc конвертирует в shape-файл с использованием выражения sql.

ogr2ogr -f "ESRi Shapefile" output.shp PG:"host=адрес user=пользователь dbname=ipc" -sql "SELECT * from adm"