karaGR's memo

FOSS4G R python さんぽ

JpnStdMeshImportプラグインをQGIS3.0で動くように修正しました

どもkaraGRです。

QGIS3.0がリリースされてしばらくたちました。
これまで作りっぱなしで放置していたプラグインも対応せねばということで、
まずはJpnStdMeshImportプラグインをQGIS3.0で動くようにしました。

https://github.com/karaGR/JpnStdMeshImport3.git

試してみてくださいね~~

______________________________________

QGIS3.0ではプラグインのインストールフォルダがかわっています。
C:\Users\ユーザー名\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins


あと、プラグインの管理WidgetでZipからインストールできるらしいです。

→Zip化してこれを使えばいいのか??

______________________________________

以下修正作業のメモ
・PyQGISのアップデートによる修正
 →QgsMapLayerRegistryはQgsProjectに統合されたらしい

from qgis.core import QgsVectorLayer,QgsProject

...
def load_wkt_csv(self):
  ...
  if self.vlayer.isValid():
    QgsProject.instance().addMapLayer( self.vlayer )

・Python3.6へ移行したことによる修正
 →同じフォルダにあるモジュールをインポートするには、"."をつけなけばならないらしい。

from .mesh_wkt import mesh_wkt

→numpyのgenfromtxtでdtype=np.strが通らなくなったので、dtype="S20"に修正

class myFileDialog(QgsEncodingFileDialog):
  ...
  def accept(self):
     ...
     try:
       dat_str = np.genfromtxt(self.filename,delimiter=",",dtype="S20")
  ...

・PyQt5に移行したことによる修正
→モジュールのインポート行をPyQt4→PyQt5に変更
 QDialogとかUI系のクラスはQtGuiからQtWidgetsに移った。

from PyQt5.QtWidgets import QAction, QDialog
from PyQt5.QtWidgets import QVBoxLayout,QHBoxLayout,QGridLayout
from PyQt5.QtWidgets import QLabel,QDialogButtonBox,QCheckBox
from PyQt5.QtWidgets import QLineEdit,QPushButton,QSpinBox,QComboBox
from PyQt5.QtWidgets import QMessageBox, QTableView
from PyQt5.QtGui import QStandardItemModel,QStandardItem

→QUrlのメンバ関数だったaddQueryItemが廃止され,QUrlQueryというクラスが導入された。
 QUrlQuery()のインスタンスにクエリアイテムを入れてから、QUrlのインスタンスに登録

from PyQt5.QtCore import QUrl,QUrlQuery

def load_wkt_csv(self):
    url = QUrl.fromLocalFile(self.outfile_qstr)
    q = QUrlQuery()
    q.addQueryItem("type","csv")
    q.addQueryItem("delimiter",",")
    q.addQueryItem("wktField","1")
    q.addQueryItem("encoding",self.EF_dia.encoding())
    ・・・
    url.setQuery(q)