smellman's Broken Diary

クソみたいなもんです

QGISでGoogle Spreadsheetのデータを取り込む

QGISではGoogle Spreadsheetのデータを直接取り込むことができる。ただし、いろいろ制約はある。

Google SpreadSheet側の作業

Google SpreadSheetにてWebに公開を選択し、以下の項目を選択する。

  • 対象のシートを選択
  • 形式をカンマ区切り形式(.csv)を選択

この段階で出てきたURLをコピーする。今回は例として https://docs.google.com/spreadsheets/d/e/hogehoge/pub?gid=0&single=true&output=csv というURLが生成されたとします。

QGIS側での取り込み

QGISレイヤ->レイヤの追加->ベクタレイヤを追加を選択します。

ベクタレイヤ追加のダイアログで以下の項目を入力します。

  • ソースタイプはファイルを選択 
  • ベクタデータセットCSV:"/vsicurl/URL"という形式で入力
    • CSV:"/vsicurl/https://docs.google.com/spreadsheets/d/e/hogehoge/pub?gid=0&single=true&output=csv"
  • オプションの項目が増えるので、以下を入力
    • X_POSSIBLE_NAMES: CSV形式のX座標(経度)の項目
    • Y_POSSIBLE_NAMES: CSV形式のY座標(緯度)の項目

追加を押すとQGISのレイヤーに追加されます。なお、レイヤー名はわかりやすい名前に変更しておいてください。 また、変な位置に描画される可能性があるので、レイヤーを右クリックして、レイヤのCRSをEPSG:4326に設定します。

QGISで再読み込み

QGISで再読み込みをする場合は、Pythonコンソールから作業が必要です。

プラグイン->Pythonコンソールを起動。

レイヤの一覧で更新するレイヤーを選んで以下を入力。

import gdal
gdal.VSICurlClearCache()
iface.activeLayer().dataProvider().reloadData()

解説

QGISは多くの機能がgdal/ogrのフロントエンドとして動くため、gdal/ogrが提供しているVirtual File System機能を用いたファイルアクセスが可能です。

/vsicurl/はHTTPクライアントのVirtual File Systemを提供しており、それを介してアクセスすることでQGISでアクセスが可能です。

ただし、QGISのベクタデータのソースタイプのプロトコルが実質同じ機能を提供しているはずであるが、こちらはCSVの指定ができないためエラーとなってしまう。

メモ

元ネタはhackmdなんだけど、はてな記法に移そうとしたら挫折しました。