Форум сайта python.su
0
Здравствуйте. Понимаю, что вопрос мега-чайниковский, но осилить не могу никак и даже не знаю, в какую сторону копать. Есть необходимость средствами Python загрузить в проект QGis слой, содержащийся в базе данных SpatiaLite. Через интерфейс QGis слой добавляется без проблем, через консоль никак. Код такой:
uri = QgsDataSourceURI()
uri.setDatabase('/home/novikov/Схема/База/Fibers.sqlite')
uri.setDataSource('', ‘Segments’, ‘geometry’)
vlayer = QgsVectorLayer(uri.uri(), ‘Seg2’, ‘spatialite’)
if not vlayer.isValid():
print “Layer failed to load!”
В общем, неизменно пишет:
Layer failed to load!
То есть слой не загружается. И никаких ошибок не выдаёт, по которым можно было бы выяснить причину и исправить. Делаю всё, как указано в документации pyqgis_developer_cookbook, но вот не получается что-то. При попытке обратиться к данному слою, QGis вылетает, что лишний раз доказывает, что слоя нет. Путь к базе и имена таблиц и полей проверял на несколько раз, все буквы верные, где надо - большие, где надо - маленькие. Догадываюсь, что проблема решается элементарно, но как именно, ума не приложу. Хоть бы ошибку какую выдавал что ли, а то просто не срабатывает, и догадайся тут. Заранее спасибо.
Офлайн
0
Проблема и правда решилась элементарно. Не хватало строки
from qgis.core import *
В итоге код выглядел так:
uri = QgsDataSourceURI()
uri.setDatabase('/home/novikov/Fibers.sqlite')
uri.setDataSource(“”, “Segments”, “geometry”)
vLayer=QgsVectorLayer(uri.uri(),“Segm3”,“spatialite”)
На запрос
vLayer.isValid()
Получил ответ
True
Всем спасибо.
Косяк! Причина в русском шрифте. Правильный ответ ниже.
Отредактировано Sviazist (Сен. 16, 2014 08:13:51)
Офлайн
0
Ан нет, проблема была в русском шрифте, как позже выяснилось. Итоговый рабочий скрипт:
uri.setDatabase('/home/novikov/Схема/Base/Fibers.sqlite'.decode('utf-8'))
uri.setDataSource(“”, “Segments”, “geometry”)
vLayer=QgsVectorLayer(uri.uri(),“Segm3”,“spatialite”)
vLayer.isValid()
Ответ:
True
Офлайн