WordPressでWebGIS

県別データで色分けした図に県境ポリゴンを重ねて表示し、さらに県毎の属性データをリンクする簡易的なWebGISをWordpressで試してみました。 予め県ごとに層別して色分けした背景図の上に、県境のポリゴンを乗せ、県を選択すと関連情報にリンクするというシンプルなものです。   実際の画面は、このページの下方にあります。   QGISを使って色分けした画像をGeoTiffもしくは、ワールドファイル付きの画像ファイルにするなどで、簡単にできるだろうと思ったのですが、思いのほか難航しました。基本的なことが分かってなかったこともあり、あれこれ試行錯誤した末、ようやくそれらしい格好のものができたと思っています。もしかして不正確な部分もあるかもしれませんが、一応形にはなったので、忘れないよう、今後のための覚書としておくことにしました。   内容は以下の通り。 1.基本的な枠組み 2.QGISで主題図を作成 3.LeafLetでの画像とGeoJsonの表示 4.実際の埋込み画面  

基本的な枠組み

県別データで層別した背景図に、県境ポリゴンを重ね、それと関連データをリンクするというシンプルなものです。各種の背景図を用意すれば、表示を切り替えて比較することができます。  
無料ツールのQGISで背景画像を作成し、LeafLetで背景画像と、ベクトル図を表示しています。無料ツールでできる範囲ということになります。  

QGISで元データを作成

 

県境の表示

 

県境データの取得

国土交通省の国土数値情報ダウンロードサービスや、estatなどのデータなど、いくつか探したなかで、最終的に、下記のデータを利用させて頂きました。 市町村界の統合の手間とか、データ容量などの理由によります。 こちらのサイトにある、「ShapeFileデータ(地域境界・地域メッシュ)」です。   ただ後で気づいたのですが、投影法がLeafLetデフォールトとは違い、EPSG:4326だったため、QGIS上では支障はなかったものの、LeafLetでは、背景画像とGeoJsonのベクターとが、ずれてしまったりしました。 なかなか、読み込んでからの投影法変換がうまくいかず、一旦、投影法を変えたGeoJsonで保存し、再読み込みしすることで、EPSG:3857に合わせることができました。 手順は以下の通り。 <投影法の変換手順> (1)ベクターレイヤとして読みこむ (2)レイヤ選択して、「レイヤ」メニューの「名前を付けて保存」 (3)保存形式を「GeoJson」 (4)座標参照系「EPSG:3857」 (5)「OK」  

CSVデータとの連結

県境ポリゴンにリンクする属性情報は、CSVファイルで用意し、あらかじめ「レイヤ」「レイヤの追加」「CSVテキストレイヤを追加」で、CSVファイルを読み込みます。 上記の県境ポリゴンには、「jcode」というフィールドがあり、県コードに対応した値が設定されています。これに応じたフィールドをCVSファイル側に設けることで、ポリゴンと県別データと結合できました。   まずは、ベクターレイヤの「プロパティ」で、「テーブル結合」を選びます。
「+」ボタンクリックで表示される画面で、結合するレイヤ、結合基準の属性、ターゲット属性を指定し、「OK」で結合できます。  

シンボロジーの設定

階層分けするデータ項目を指定し、階層分けなどを指定します。使用するデータをもとに、いろいろと層別表示した、いわゆる主題図を作ることができます。 色分け表示ができれば、枠線なしの塗りつぶしを画像としてエクスポートします。 枠線なしの設定が、今ひとつ分からないのですが、単一定義の塗りつぶしの設定で、ストロークの色を白にすることで、枠線が見えなくなりました 拡大表示しても、枠線のポリゴンと重ねれば、画像のギザギザが気にならないのではないかと思います。  

画像としてエクスポート

シンボロジーを設定した状態を、背景画像用として出力します。 「プロジェクト」の「インポートとエクスポート」で「地図を画像としてエクスポート」を実行すると、エクスポート条件設定が表示されます。ここで、「レイヤから計算」で、あらかじめ用意しておいた、画像の枠を指定します。QGISでは矩形での選択とか、矩形を書くことができないようなので、前もってGeoJasonファイルを編集し、座標を指定して、矩形のポリゴンデータを作成しておきました。 なお、この際、ワールドファイルも作成されるので、QGISで読み込めば、元々の位置に重なって表示されるようです。 LeafLetでは、ワールドファイルに対応していないので、画像エクスポートの際に指定した枠の座標を利用しました。  

WordPressに埋め込んだLeafLetでの画像の表示

 

背景画像の表示

画像は、ImageOverLayで表示するのですが、その際にboundで枠を指定します。QGISで画像をエクスポートする際に利用した矩形GeoJsonの座標を用いました。 ImageOverLayに関するマニュアルの説明によれば、以下で画像の表示ができます。  
    imageBounds = [[左上座標], [右下座標]];
L.imageOverlay(imageUrl, imageBounds).addTo(map);
  画像が複数あれば、overlaysに必要数の画像レイヤを指定し、baselayersと合わせて、レイヤを設定出来るようです。(マニュアルのControl.layers参照) L.control.layers(baseLayers, overlays).addTo(map);   ここでは、baselayerなしで、複数の画像レイヤーによるoverlaysを設定しました。

var overlays ={
"overlay1 ":image1,
"overlay2" :image2
};
L.control.layers(overlays).addTo(map);
  これだけで、複数ある画像レイヤの切り替えもできるようになりました。  

GeoJsonの表示

  jQueryの$.getJSONメソッドで、GeoJsonファイルを読み込み、L.geoJsonメソッドでaddTo(map)とすれば表示できます。 予めQGISで色分けした画像を用意しなくても、個々のポリゴンを動的に色分けできるのかもしれませんが、その辺は今後の課題です。

L.geoJSON(data, { style: function (feature) { return {color: feature.properties.color}; } }).bindPopup(function (layer) { return layer.feature.properties.description; }).addTo(map);
  onEachFeatureオプションで、各featureに関連情報へのリンクを設定しました。

L.geoJson(data, {
 onEachFeature: function (feature, layer) {
    var field = '県名 : '+ feature.properties.PREF+'
    '+'関連情報: '+ '外部サイト' ;       
    layer.bindPopup(field);
 }
}).addTo(map);
 

COVID19関係データによる実際の埋込み画面

実際のcsvデータを準備して、Leafletで表示させのが以下の地図画面です。 Covid19に関するワクチン接種、感染者数で層別、色分けした画像の上に、県境のGeoJsonを表示しています。 レイヤアイコン をクリックするして、表示レイヤを選択できます。
なお、色分けのための元情報は、厚労省、官邸のWebサイトで公開されているデータに基づいています。各項目名称と元データ項目との対応は以下の通りです。  
PCR検査数:PCR検査実施人数、陽性者数:陽性者数、感染者数:入院治療などを要する者、回復者:退院又は療養解除となった者の数、死者数:死亡(累積)、未回復:陽性者数ー退院又は療養解除となった者の数、V接種者数:ワクチン接種回数(医療関係者等+高齢者)
  さらに、県ポリゴンには、関連する情報を掲載している関連情報へのリンクが紐づいており、これをクリックするとそちらにリンクします。 分かりやすくまとめられたサイトがあったので、リンクさせて頂きました。ただし、こちらのデータの内容については、それぞれでご確認ください。 県ごとの日別推移情報のページを用意し、そちらへのリンクとしました。   他に情報がまとまれば、追加の予定です。

まとめ

県ごとに層別したデータを地図上に表示し、関連する情報にリンクするWebGISページをWopdPressに組み込んでみました。 日々、喧伝される、Covid19の感染者数などの細切れの情報を、もう少し、分かりやすく、まとめて表示できればと思ったのがきっかけです。 分かりやすくまとめられたデータが、すでに他の方のサイトで公開されいるのを知り、こちらへのリンクを設定することにしました。 基本的な形ができたので、今後、もう少し、分かりやすい情報表示などができればと思っています。また、このようなことを試みる際の参考になれば幸いです。

コメント

タイトルとURLをコピーしました