waigani's diary

QGISを中心にFOSS4Gをいじくる

QGIS プロセッシング Scriptsで一括処理したい その1

QGIS プロセッシング Scripts

久々更新なのですっかり使い方忘れてます。QGIS プロセッシング Scriptsについては、下記の記事をまずはご参照ください。

QGIS プロセッシング Scriptsを使いたい その1 - waigani's diary

QGIS プロセッシング Scriptsを使いたい その2 - waigani's diary

QGIS プロセッシング Scriptsを使いたい その3 - waigani's diary

QGIS プロセッシング Scriptsを使いたい その4 - waigani's diary

フォルダ内のファイルをががーっと処理したい

フォルダ内にいくつかのshpefileがあるとして、同一の処理を全てのファイルに行うことを考えます。

下記のように、ランダムにポイントが配置されたshapefileが、それぞれの領域は重ならずに4ファイルあるとします。

f:id:waigani:20140723230024p:plain

 それぞれのファイルにボロノイ分割を行います。使用する機能としては、メニューの【ベクタ】→【ジオメトリツール】→【ボロノイポリゴン】になります。processingから呼ぶ際の名称としては、'qgis:voronoipolygons'です。

processing scriptsで処理するとして、まず入力は、

  • 入力先のフォルダを指定
  • ボロノイ図作成に必要なオプションを指定
  •  出力先のフォルダを指定

とします。

処理の内容としては、入力値のチェックなどなど省いて必要最小限にして、

  • 入力先フォルダから拡張子.shpのファイル名を取得
  • ファイル名からパス部分を削除して、出力先フォルダ名と'output_'を頭に付けて出力ファイル名作成
  • processingを使って、'qgis:voronoipolygons'を実行

だけ書いてみます。log出力してるのは気にしない。最後の行は、グラフィカルモデラーでつないでいくときのおまじない程度に考えてください。

##[My Scripts]=group
##input_dir=folder
##buffer=number 0.000000
##output_dir=folder
##outputDir=output string

from processing.core.ProcessingLog import ProcessingLog
import os
import glob

ProcessingLog().addToLog(ProcessingLog.LOG_INFO, "input folder :" + input_dir)
ProcessingLog().addToLog(ProcessingLog.LOG_INFO, "output folder :" + output_dir)

files = glob.glob(os.path.join(input_dir, r'*.shp'))
for file in files:
outputFile = os.path.join(output_dir, 'output_'+os.path.basename(file))
processing.runalg('qgis:voronoipolygons', file, buffer, outputFile)

outputDir = output_dir

"voronoi.py"という名称にして、

 ユーザのホームディレクトリ\.qgis2\processing\scripts

に置いておきます。qgisを再起動して、プロセッシングツールボックスから追加されたスクリプトを探して実行しましょう。

f:id:waigani:20140723233406p:plain

入力先フォルダ、出力先フォルダを指定して『run』すると、出力先フォルダにshapefileが作成されます。qgisでshapefileを開いてみると、ボロノイ図が作成されていることを確認出来ます。

f:id:waigani:20140723233756p:plain

改良点

バラバラにボロノイ図作っているので隙間開いてますね。読み込んだファイルを1ファイルにしてとか入れましょうか。

Mapboxを使ってみよう その2

前回

マーカーを1つ追加しての公開

Mapboxを使ってみよう その1 として、地図デザインを変更、マーカーを追加して公開するところまで行ってみました。

今回は、手持ちのベクトルデータがあったとして、アップロードして地図に追加してみます。

手持ちのベクトルデータを加えてみる

データの準備

geojson,csv,kml,gpxであれば、簡単に地図に追加することが出来ます。

ここでは

  • 国土数値情報からバス停留所のデータを取得
  • qgisでgeojsonに変換

としてみます。

国土数値情報ダウンロード

国土数値情報 からは、様々な国土に関する空間情報データをダウンロードすることが出来ます。データ形式としてJPGIS2.1を選択したまま、バス停留所を選択してください。

f:id:waigani:20140420163620p:plain

ダウンロードは都道府県単位で行えますので、北海道を選択して進みます。

JPGIS形式となっていますが、ダウンロードしたzipファイルを解凍すると、shapefileも入っています。shapefileの方を使用します。

f:id:waigani:20140420164108p:plain

QGISにて変換

QGISを起動して、ダウンロードしたバス停留所のshapefileを開きます。

全てのデータをアップロードするのは無理なため、一部必要なデータのみを切り取ることにします。無料プランですと、20点が限度になります。

下図の黄色い点が選択されている点とします。メニューから"レイヤ"→"選択部分をベクタファイルとして保存する"を選択し、geojson形式で名前を付けて保存しておきます。

f:id:waigani:20140420164752p:plain

データのインポート

さて、Mapbox上のprojectにベクトルデータを追加してみましょう。データを追加したいprojectを開いておいて下さい。

開いたら、先ほど保存しておいたgeojsonをドラッグ&ドロップで地図上に持って行きましょう。これだけでアップロードすることが出来ます。

f:id:waigani:20140420165313p:plain

Mapboxに読み込めるファイルだと認識されると、ポップアップに表示するタイトル、説明、スタイル、シンボルを設定するパネルが表示されます。タイトル、説明では、geojson中のどの属性を表示するかを選択出来ます。予めgeojsonの中をテキストエディタで確認して、どの属性を表示するか確認しておいた方がいいでしょう。

f:id:waigani:20140420165920p:plain

設定が終わったら、"Finish Importing"をクリックしましょう。

地図上にマーカーが追加されます。

f:id:waigani:20140420170414p:plain

出所の明記

「『国土数値情報(○○データ) 国土交通省』を使用して作成」と、出所の明記をする必要がありますので、お忘れなく。

 

Mapboxを使ってみよう その1

Mapboxとは?

Mapbox

ホームページに拡大縮小・スクロールといった操作が出来る地図を貼り付けたい、という時に真っ先に思いつくのはGoogle Mapでしょうか?確かにお手軽ですし、とても便利なサービスです。でもよく使われているサービスだけに、見た目の違いで差を付けるのはなかなか大変になります。地図のデザインを変更することも出来ますが、JavaScriptの知識は必要ですね。

もう少し手軽にオリジナルな地図を公開したいならMapboxがオススメです。

Mapboxは、簡単な操作でオリジナルな地図を作成、公開出来るサービスです。

ベースとなる地図はOpenstreetMapを使用するため、著作権を気にすることもありません。地図デザインを自分好みに変更し、目的に応じてマーカー、ライン、ポリゴンで情報を書き足し、書き足した図形へのポップアップ動作も付けてくれます。作成した地図はMapbox上に保存しておき、指定されたコードで自分のホームページへ貼り付けることが出来ます。

さらに開発者向けには、iOS用のSDKや、leafletを元にしたJavaScriptのライブラリも用意されていますので、作成した地図を様々な用途で使用することが出来ます。

f:id:waigani:20140418224536j:plain

プランは色々あるので気をつけよう

 こんな便利なMapboxは無料で使いはじめる事が出来ます。3,000map view/month、50MBの容量等の条件を超えてくると有料プランを使用する必要がありますので、注意はしましょう。plansのページを参照のこと。

Mapboxを使ってみよう

Sign up

まずはアカウントを作成しますが、詳細は省略。

f:id:waigani:20140418231413p:plain

Projectを作る

アカウントを作成し、Sign inしたら、Projectsを選択します。

projectが作成済みの場合は、タイトル一覧が表示されますが、最初のSign inなので空ですね。Create projectをクリックしてprojectの作成を開始します。

f:id:waigani:20140418232445p:plain

 表示位置を調整

エディタが起動すると、いきなり南大西洋辺りを中心に、アフリカ・南アメリカといった地域の地図が表示されます。このままだとデザインをしていくのも不便ですので、お目当ての地域を表示しましょう。GoogleMapと同じようなマウス操作でのドラックスクロール、マウスホイールでの拡大・縮小が出来ます。

この後の工程で位置を変更しても問題ありませんので、デザインしやすそうな位置にしておいてください。

f:id:waigani:20140418233726p:plain

Styleの調整

左上のメニューからStyleを選択します。

Color

色設定のパネルです。

  • Streets : 道路
  • Bdgs : 建物
  • Areas : 敷地
  • Water : 水部
  • Land : 土地

に対して、描画色をそれぞれ設定出来ます。

下図ですと、Streetsに対して"#3fbfbf"が設定されたRGB値となっていますが、この値に対してH(色相)、S(彩度)、L(輝度)が掛けられているので注意してください。"#3fbfbf"をそのまま表示したい場合は、H/S/Lを全て100%としてください。Aは透過の設定になります。

f:id:waigani:20140418234404p:plain

Discard paletteをクリックすると、予め用意されているいくつかのパターンから表示色を選択することが出来ます。

f:id:waigani:20140418235340p:plain

パターンや個別の表示色を変更して、好みの地図デザインを見つけてみてください。

Baselayer

 背景の地図に使うデータを選べます。

  • Streets : 最初に表示されている地図
  • Terrain : 地形
  • Satellite : 衛星画像

が選べますが、Satelliteは有料プランのみでの使用となります。ご注意下さい。

f:id:waigani:20140418235905p:plain

StreetsとTerrainを入れ替えて、どちらのデザインが目的の地図に合っているか選んでみましょう。

Language

地図中に表示される文字列(注記)の言語を設定出来ます。ここでは特に変更の必要はありません。

f:id:waigani:20140419000252p:plain

マーカーを置く

 メニューからData→Markerを選択します。

f:id:waigani:20140419000830p:plain

地図上でマウスカーソルが"✚"で表示されるようになります。マーカーを置きたい位置をクリックしましょう。マーカーが表示されます。

f:id:waigani:20140419001257p:plain

また、パネルの表示も変わり、ポップアップ時に表示されるテキストを入力することが出来ます。入力したテキストは随時マーカーのポップアップに反映されて表示されますので、確認してみてください。下部のタブを切り替えて、マーカーの色、マーカーに表示されるシンボル、経緯度の微調整も行えます。

f:id:waigani:20140419001748p:plain

一度置いたマーカーのテキスト、位置等を変更したい場合は、再度Data→Markerを選択している状態とした上で、配置済みマーカーをクリックします。パネル上で表示内容を変更出来ますし、マーカーをドラックすることで位置を変更することも出来ます。

projectを保存

 デザインが終わったところでprojectを保存しますが、保存の前にprojectに名前を付けておきましょう。メニューからProject→Settingsを選択します。わかりやすい名前を付けておいて下さい。

f:id:waigani:20140419003046p:plain

 

名前を付けたらSaveを選択し、projectを保存します。

公開する

 再度メニューからProjectを選択します。先ほどと変わってInfoの表示が下図のようになっています。

ここでShare linkに表示されているURIをブラウザからアクセスすると、作成した地図を見ることが出来ます。

Embedに表示されているのが、ホームページ等に貼り付ける際のコードになります。これをコピーしてホームページ上の好きな位置に作成した地図を入れることが出来ます。

f:id:waigani:20140419003656p:plain

ブログに貼り付ける

こんな感じになります

 

10.QGIS 2.0の日本語対応が大好きだ!

QGIS 2.0の日本語対応に尽力してくれた皆様本当にありがとうございます。
皆様のお陰で快適に使わせて頂いております。
日本語対応のため各種ソースをcommitしていただいている赤木様、メニュー日本語化をして頂いている嘉山様、GDALの日本語対応をしていただいた沖様、その他関係者皆様、本当にありがとうございます。
QGISハックフェスタに参加されたGeoRepublicの皆様、羨ましい!

当然、QGIS開発コミュニティには大感謝です。
QGISに寄付するという手もありますので、みなさん何らかの貢献を致しましょう。
QGIS Gold Sponsorのアジア航測様ありがとうございます。

来年は私も少しでも貢献出来るように致します。

長文にお付き合いいただけありがとうございました。

9.QGIS 2.0のドキュメント日本語化が好きだ

何にもしてなくてごめんなさい。ユーザ登録すらしてない・・・

これに関しては、アドベントカレンダー中にどなたか触れると思いますので、trasifexのリンクの紹介だけに致します。
The QGIS Documentation translation project on Transifex

参加できる方は是非ご参加下さい。

8.QGIS 2.0のベクトルに複数スタイルを付けられるのが好きだ

QGIS 2.0ではベクトルレイヤに対して複数描画スタイルを付けることが出来ます。
ポリゴンのレイヤを開いているとします。ベクトルレイヤのレイヤプロパティを開いて、スタイルを設定します。
シンボルレイヤ群のところを見てみましょう。一番上の"Fill"を選んでいる状態だと、下の"+"を押していくと複数のシンボルレイヤを追加することが出来ます。

追加されたシンプル塗りつぶしを選択して、パネル右からシンボルレイヤタイプの選択肢を表示してみましょう。

シンプル塗りつぶし以外を選択した際は、もう一段シンボルレイヤが表示されます。
例えばラインパターン塗りつぶしの場合、ここにいくつかのラインをその下に持つことが出来ます。

いろいろなシンボルレイヤがあるので是非試してみてください。

良くある例としては、一番下にオフセットをしたシンボルレイヤを設定して影を付ける、でしょうか。

こんな感じです。

これもカッコイイ表現作ったら教えて下さい!

7.QGIS 2.0のダイアグラムが好きだ

利用頻度が高いかと言われるとそうではないのですが、ダイアグラムも追加になっています。
QGIS 1.8では、パイチャートとテキストダイアグラムが作成可能でした。

QGIS 2.0では、これに加えてヒストグラムが作成出来ます。

北海道の男女人口比を描画してみると、

パイチャート
テキストダイアグラム
ヒストグラム

地味にこういった機能好きです。
カッコイイダイアグラム出来たら教えて下さい!