Я объединяю некоторые шейп-файлы, и у меня были некоторые проблемы с этим внутри QGIS, поэтому я использую ogr2ogr напрямую. Я делаю это (в партии):
ogr2ogr -overwrite %destination% %n1%
ogr2ogr -update -append %destination% %n2% -nln all_new
ogr2ogr -update -append %destination% %n3% -nln all_new
ogr2ogr -update -append %destination% %n4% -nln all_new
Он работает нормально, но теперь мне нужно иметь в результирующем шейп-файле поле с именами исходных шейп-файлов, которые я слил. Звучит не очень сложно, но мне не удается это сделать.
Кто-нибудь может помочь? Спасибо!
Я бы использовал опцию -sql и импортировал шейп-файл следующим образом:
источник
Есть несколько способов объединения шейп-файлов.
и добавление атрибута в шейп-файл @dango directon - это хорошо. Вы можете использовать layer.CreateField (field_name) для создания нового столбца, который заполняется из
я надеюсь, что это поможет вам ...
источник
vascobnunes, вот как я решил эту проблему, используя скрипт Python для последовательного объединения нескольких инструкций ogr2ogr. Вы можете легко преобразовать его в пакетный скрипт, в основном я просто объединяю инструкции ogr2ogr (
cmd
), а затем выполняю их, вызываяos.system(cmd)
, передав команду ogr2ogr, которую я соединял вместе.Секретным оружием является ( как продемонстрировал capooti ) применение OGR_SQL для наложения имени файла в качестве постоянного значения набора исходных данных, который вы добавляете в свой результат слияния.
В моем примере
-sql
флаг обрабатывает это, в коде это выглядит так:Но это сбивает с толку, потому что мне нужно применять одинарные кавычки и двойные кавычки в результате объединения. Для этого мне нужно избегать одинарных кавычек (то есть \ '), чтобы использовать их «по-настоящему». Так что для удобства чтения, это помогает увидеть его без переменных и escape-последовательностей. Если вы делаете вид, что имя файла было «roads1» для конкретной итерации, результирующая конкатенация будет выглядеть следующим образом в предложении ogr2ogr:
Этот скрипт .py представляет собой объединение трех трюков, которые я украл из matt wilkie (пустой клон шейп- файла ), j03lar50n (добавление столбца в шейп-файл с использованием ogrinfo и ogr_sql) и capooti (использование ogr_sql для наложения фиксированного значения столбца на всех записях в шейп-файле). Итак, вот полный сценарий:
источник
Добавить столбец с исходным именем файла из папки шейп-файлов. Требуется GDAL 1.10dev, моя попытка удалить расширение .shp не работает, но в целом работает. - Я полагаю, это можно добавить к строкам, которые объединяются с OGR.
источник
Привет, может быть, эта ссылка поможет. Он показывает, как добавить поле в шейп-файл, используя привязки Python GDAL.
источник
Внутри QGIS вы можете добавить плагин Merge Shapefile. Есть опция «Добавить столбец с именем файла»
источник
Немного измененная версия ответа JaaKL. Обратите внимание, что -append foo.shp и -nln foo должны совпадать. Также обратите внимание на использование диалекта SQLite (GDAL, очевидно, не принимает ключевое слово «Update», поэтому необходимо использовать диалект SQLite) и отсутствие ключевого слова «TABLE» после слова «UPDATE» (не требуется). или приняты SQLite).
источник
Немного опоздал к обсуждению, но теперь есть и огрмерге
источник