Запись векторного слоя в файл CSV с геометрией с использованием PyQGIS?


12

Я использую Python, пытаясь записать файл векторного слоя в CSV-файл с этим кодом:

QgsVectorFileWriter.writeAsVectorFormat(mylayer, r'c:\temp\xyz.csv', "utf-8", None, "CSV")

Он может экспортировать в xyz.csv, но в csv отображаются только атрибуты, а не столбец геометрии.

Как я могу экспортировать как атрибутные, так и пространственные данные в CSV-файл?


1
Вот тот же вопрос и решение [ссылка] [1]. [1]: gis.stackexchange.com/questions/43129/…
mete7

Прошу прощения за непонятный вопрос. моя работа использовать Python с PyQGIS записать векторный слой в CSV-файл. Я хочу, чтобы CSV-файл имел геометрию, но это не так. все еще нужен ответ
Анубиз

Зависит от того, какой тип векторного слоя вы хотите экспортировать. Для точечного слоя вы можете просто добавить значения lat, long в качестве столбцов таблицы атрибутов. Для всех остальных вам нужен WKT
Curlew

Спасибо, Керлью, я работаю с точечным и многоугольным слоем. для точечного слоя вы имеете в виду добавить столбец lon, lon в таблицу атрибутов? как насчет многоугольника?
Анубиз

3
Это действительно дубликат? Этот вопрос здесь нацелен, прежде всего, на python, который не включен в связанный ответ.
Матиас Кун

Ответы:


9

Аналогичный ответ был предоставлен из этого поста:

Сохранить как .csv с координатами в QGIS 2.2 и PyqGIS

Просто добавьте layerOptions ='GEOMETRY=AS_XYZв конце:

layer = QgsVectorLayer("path/to/shapefile", "name", "ogr")
QgsVectorFileWriter.writeAsVectorFormat(layer, r'c:\temp\xyz.csv', "utf-8", None, "CSV", layerOptions='GEOMETRY=AS_XYZ')

Привет, я сталкиваюсь с проблемой в этом, если я наберу это в консоли, он не сохраняет пространственные данные, а только атрибуты. Но если я сохраню это вручную, это будет работать. Я использую QGIS 2.14.12.
Солнечный Найк

2
@SunnyNaik - layerOptionsпараметр теперь требует список строковых значений, тогда как раньше достаточно было одного значения (как описано в этом посте ). Итак, ваша последняя строка будет выглядеть так:QgsVectorFileWriter.writeAsVectorFormat(layer, r'c:\temp\xyz.csv', "utf-8", None, "CSV", layerOptions=['GEOMETRY=AS_XYZ'])
Джозеф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.