def run(self): # layer base name and dir path base_name = QFileInfo(self._fn).baseName() dir_path = QFileInfo(self._fn).absoluteDir() # create the uri for the delimitedtext provider from .settings_dlg import Settings csvUrl = QUrl.fromLocalFile( self._fn ) csvUrl.setQueryItems( [ ( "delimiter", Settings.delimiter() ), ( "delimiterType", "plain"), ( "xField", Settings.longitudeField() ), ( "yField", Settings.latitudeField() ) ] ) # load the layer from qgis.core import QgsVectorLayer csvVl = QgsVectorLayer(csvUrl.toString(), base_name, "delimitedtext") if not csvVl.isValid(): # invalid layer csvVl.deleteLater() QMessageBox.warning( self.parent(), "Invalid layer", u"Unable to load the layer %s" % self._fn ) return (self.INVALID_INPUT, None) # check the layer geometry type from qgis.core import QGis if csvVl.geometryType() != QGis.Point: csvVl.deleteLater() QMessageBox.warning( self.parent(), "Invalid layer", u"Unable to get data from the selected file. \nSetup Lat/Long field names and delimiter from the Settings dialog, \nthen try again." ) return (self.INVALID_LATLON, None) # check whether the CSV file has to be imported to SL db if not Settings.importCsvToSl(): return (self.OK, csvVl) # uri pointing to the new SL database from qgis.core import QgsDataSourceURI sqlite_path = dir_path.absoluteFilePath( u"%s.sqlite" % base_name ) slUri = QgsDataSourceURI() slUri.setDatabase( sqlite_path ) slUri.setDataSource( "", base_name, "GEOMETRY" ) importer = Ogr2ogrImporter(csvVl, slUri, self.parent()) #importer = QGisLayerImporter(csvVl, slUri, self.parent()) ret = importer.start() # get the importer exit code if not ret: if importer.wasCanceled(): ret = self.CANCELED else: ret = self.ERROR QMessageBox.warning( self.parent(), "Error", importer.errorMessage() ) else: ret = self.OK # cleanup importer.deleteLater() importer = None csvVl.deleteLater() csvVl = None if ret != self.OK: return (ret, None) # load the layer from the SL database slVl = QgsVectorLayer(slUri.uri(), slUri.table(), "spatialite") if not slVl.isValid(): # invalid layer slVl.deleteLater() QMessageBox.warning( self.parent(), "Invalid layer", u"Unable to load the layer %s" % slUri.database() ) return (self.ERROR, None) # check the layer geometry type if slVl.geometryType() != QGis.Point: slVl.deleteLater() return (self.ERROR, None) return (self.OK, slVl)
def run(self): # layer base name and dir path base_name = QFileInfo(self._fn).baseName() dir_path = QFileInfo(self._fn).absoluteDir() # create the uri for the delimitedtext provider from .settings_dlg import Settings csvUrl = QUrl.fromLocalFile(self._fn) csvUrl.setQueryItems([("delimiter", Settings.delimiter()), ("delimiterType", "plain"), ("xField", Settings.longitudeField()), ("yField", Settings.latitudeField())]) # load the layer from qgis.core import QgsVectorLayer csvVl = QgsVectorLayer(csvUrl.toString(), base_name, "delimitedtext") if not csvVl.isValid(): # invalid layer csvVl.deleteLater() QMessageBox.warning(self.parent(), "Invalid layer", u"Unable to load the layer %s" % self._fn) return (self.INVALID_INPUT, None) # check the layer geometry type from qgis.core import QGis if csvVl.geometryType() != QGis.Point: csvVl.deleteLater() QMessageBox.warning( self.parent(), "Invalid layer", u"Unable to get data from the selected file. \nSetup Lat/Long field names and delimiter from the Settings dialog, \nthen try again." ) return (self.INVALID_LATLON, None) # check whether the CSV file has to be imported to SL db if not Settings.importCsvToSl(): return (self.OK, csvVl) # uri pointing to the new SL database from qgis.core import QgsDataSourceURI sqlite_path = dir_path.absoluteFilePath(u"%s.sqlite" % base_name) slUri = QgsDataSourceURI() slUri.setDatabase(sqlite_path) slUri.setDataSource("", base_name, "GEOMETRY") importer = Ogr2ogrImporter(csvVl, slUri, self.parent()) #importer = QGisLayerImporter(csvVl, slUri, self.parent()) ret = importer.start() # get the importer exit code if not ret: if importer.wasCanceled(): ret = self.CANCELED else: ret = self.ERROR QMessageBox.warning(self.parent(), "Error", importer.errorMessage()) else: ret = self.OK # cleanup importer.deleteLater() importer = None csvVl.deleteLater() csvVl = None if ret != self.OK: return (ret, None) # load the layer from the SL database slVl = QgsVectorLayer(slUri.uri(), slUri.table(), "spatialite") if not slVl.isValid(): # invalid layer slVl.deleteLater() QMessageBox.warning( self.parent(), "Invalid layer", u"Unable to load the layer %s" % slUri.database()) return (self.ERROR, None) # check the layer geometry type if slVl.geometryType() != QGis.Point: slVl.deleteLater() return (self.ERROR, None) return (self.OK, slVl)