У меня есть шейп с несколькими атрибутами, например YEAR
, COUNTY
и AREA
. У меня также есть файл CSV с дополнительными полями, которые я хочу в шейп-файле, например POPULATION
. И шейп-файл, и файл CSV имеют поле GISJOIN
. Я знаю, как сделать соединение в QGIS. Но как я могу сделать постоянное соединение и записать в шейп-файл, используя ogr2ogr
один или другие инструменты в GDAL / OGR?
shapefile
ogr
csv
attribute-joins
Линкольн Маллен
источник
источник
Ответы:
Ogr2ogr утилита поддерживает ограниченный синтаксис SQL . Вы можете присоединить ваш CSV к шейп файлу, используя что-то вроде следующего:
источник
Принятый ответ действительно полезен, но я обнаружил, что он был медленным с базой данных большого размера. Я считаю, что это также ограничивает ваши возможности при объединении данных.
Мой метод теперь состоит в том, чтобы вытянуть все в SQLite (используя комбинацию csvkit и ogr2ogr):
Затем объедините все и создайте из него шейп-файл:
источник
-append
туда, чтобы датьogr2ogr
разрешение открыть существующую базу данных SQLite и добавить к ней. Я отредактировал ответ, чтобы показать это.csvsql --db sqlite:///myjoindb.db --insert myjoincsv.csv geoid.map(str)
или что-то?geoid
он преобразуется в число, но число настолько велико, что оно переполняется и становится отрицательным. Проверьте документацию для csvsql , вы можете попробовать указать таблицу, в которой вы явно говорите, чтоgeoid
это строка, иначе--no-inference
может помочь.