I'm trying to write a standalone script that writes a shapefile (using QGIS 3.0.2). I've tried something like :
from qgis.core import *
from qgis.PyQt.QtCore import QVariant
from qgis.utils import QGis
QgsApplication.setPrefixPath("/usr/bin/qgis", True)
qgs = QgsApplication([], False)
qgs.initQgis()
fields = QgsFields()
fields.append(QgsField("ID_HYD", QVariant.Int))
fields.append(QgsField("SBD_KM2", QVariant.Double))
writer = QgsVectorFileWriter("/home/sylvain/test.shp",
"CP1250",
fields,
QGis.WKBPoint,
None,
"ESRI Shapefile")
qgs.exitQgis()
The issue is as follow :
/usr/bin/python3.5 /home/sylvain/test.py
Must construct a QGuiApplication first.
Process finished with exit code 1
Is there a way to write a shapefile on drive without constructing a GUIApplication ?
If not, how should I do do create such an item ?
Answer
You are getting the error in line 3 from qgis.utils import QGis
. In QGIS 3, geometry types is specified by QgsWkbTypes
enum in core
library. Thus, remove from qgis.utils import QGis
Use script in the following way. Notice highlighted lines with ####
.
from qgis.core import *
from qgis.PyQt.QtCore import QVariant
# from qgis.utils import QGis # REMOVE THIS LINE ####
QgsApplication.setPrefixPath("/usr/bin/qgis", True)
qgs = QgsApplication([], False)
qgs.initQgis()
fields = QgsFields()
fields.append(QgsField("ID_HYD", QVariant.Int))
fields.append(QgsField("SBD_KM2", QVariant.Double))
writer = QgsVectorFileWriter("/home/sylvain/test.shp",
"CP1250",
fields,
QgsWkbTypes.Point, #### instead of QGis.WKBPoint
QgsCoordinateReferenceSystem(), #### instead of None
"ESRI Shapefile")
qgs.exitQgis()
No comments:
Post a Comment