2015年10月25日日曜日

DotSpatialで地理院タイルを表示する

DotSpatialで地理院タイルを表示してみます。

…といっても、こちらの投稿で作ったプログラムを使うだけです。とくにやることはありません。
また、DotSpatial 1.8に付属の"DemoMap.exe"でもできます。

プログラムを起動します。ツールバーの中で、「None」と表示されているところのプルダウンメニューをクリックして(この部分がWebMapというプラグインです)、"Other"を選択します。





ダイアログ内のテキストボックスに、地理院タイルのURLを入力します。ただし、{z}は{zoom}に置き換えます(下の画像は、標準地図を指定しています)。

OKを押すと、地理院タイルが表示されるようになります。(ただ、縮尺の関係だと思いますが、画像がぼけるので、きれいに表示させるには、縮尺をぴったり合わせないといけないかと)


2015年10月16日金曜日

DotSpatialでGISアプリを作る (1)とりあえず作ってみる

【2015/10/25改変】
DotSpatial1.8では、1.7以前と異なるやり方でアプリケーションを作るようになったようですので(このページのコメント参照)、1.8のやり方で書き直しました。

----

DotSpatialは、.NET Frameworkを使ってGISアプリを作るためのライブラリです。
QGISやArcGISなどの素晴らしいアプリケーションがすでにあるので、もちろんそちらを使っても良いとは思いますが、特定の目的に特化したアプリを作りたいときなんかは、こういうライブラリを使って自分でアプリを作るのもありかと。そんなわけで、DotSpatialをちょっと試してみます。


ここでは、次の環境を使うことにします。
  • Visual Studio Express 2013 for Windows Desktop
  • DotSpatial 1.8
  • .NET Framework 4.5(DotSpatialは.NET Framework 4以降で動作します)
  • Visual C#

DotSpatialの入手


DotSpatialのサイトにいき、「download」をクリックすると、最新版のzipファイルが入手できます。これを任意の場所に展開します。


プロジェクトの作成と準備


C#のWindows Formsアプリケーションでプロジェクトを作成します。

参照設定で、DotSpatialのライブラリの中から、DotSpatial.Controls.dll, DotSpatial.Data.dll, DotSpatial.Data.Forms.dll, DotSpatial.Symbology.dllの4つを追加します。



「ツールボックス」を開き、右クリックして「タブの追加」を選択します。タブ名には、「DotSpatial」などの任意の名前を付けておきます。


追加したタブを右クリックし、「アイテムの選択」を選択します。「ツールボックスアイテムの選択」画面の中で、「.Net Framework」タブで「参照」をクリックし、DotSpatial.Controls.dllを選択します。そうすると、下図のようにコンポーネントが自動選択されるので、この状態で「OK」を押します。これで、ツールバーにDotSpatialのフォームが追加されます。


デザイン


まず、フォームにAppManagerを貼り付けます。ツールバーからAppManagerを選択し、フォーム上の任意の位置をクリックすると、AppManagerが貼り付けられます。

フォームの編集はこれだけです。


コーディング


Form1のコードを開き、次のようにコーディングします。

ビルド

上記までできたら、一度ビルドします。まだデバッグ起動はしません。
ビルドが完了したら、プログラムができたフォルダー(プロジェクトファイルのbin\Debug)に、ダウンロードしたDotSpatialのファイルの中から、"Plugins", "Tools", "Windows Extensions"の3つのフォルダーを、フォルダーごとコピーします。

動作確認


デバッグで起動します。起動すると、次のような画面が表示されます。


ツールバーの左端にある"Add Layer..."ボタンを押すと、ファイル選択ダイアログが出るので、たとえばshapefileを指定すると、shapefileが地図上に表示されます(下図は、DotSpatialのチュートリアルについているstates.zipというファイルを表示させています)。この地図エリアは、マウスドラッグでスクロールしたり、マウスホイールでズームイン・ズームアウトも可能です。

また、レイヤーの表示・非表示切替ができたり、凡例の色の部分をダブルクリックして下図にように表示設定を変更することもできます。


さらに、こんな感じで属性値による色分けの設定なんかもできます。
この設定をすると、先ほどのレイヤーはこんな表示になります。

属性テーブルも標準でついてきます。


そのほか、地物の追加とか頂点の編集なんかもできてしまいます。

こんな感じで、そこそこ高機能のアプリをたった数行のコーディングで作れてしまうのが、DotSpatialのおもしろいところではないかと思います。

2015年10月9日金曜日

NetTopologySuiteでESRI Shapefileを読む

NetTopologySuiteは、.NETでGIS(地理情報システム)に関するプログラムを作成するのに便利なライブラリ群で、ジオメトリのモデルや、GIS関連のデータの入出力をするためのクラスを提供しています。

これを使って、C#のプログラムからESRI Shapefileを読んでみることにします。

まず、準備として、ESRI Shapefileを入手します。ここでは、「むろらんオープンデータライブラリ」の中から、「AED設置事業所」のデータを使わせていただくことにします(2015年5月15日時点のデータを使用します)。「AED設置事業所」欄の「Shape」をダウンロードし、任意の場所に展開しておきます。展開すると、aed_20150515.shpなど4つのファイルが存在します。

次に、Visual Studioのプロジェクトを作成します。ここでは、Visual Studio 2013 Express Editionを使い、C#のコンソールアプリケーションを作成することにします。.NET Frameworkのバージョンは4.5を選択します。
プロジェクトを作ったら、NuGetを使って、NetTopologySuite.IOのライブラリをインストールします(このとき、NetTopologySuiteやGeoAPIといった、依存するライブラリも同時にインストールされます)。ここでは、NetTopologySuiteのバージョンは、現時点で最新のバージョンである1.13.3.2を使用します。

あとは、次のようにメインプログラムを作成します(Shapefileの場所は適宜変更します)。このプログラムでは、AEDのある場所のXY座標と施設名称(Shapefileの2番目の属性)を、コンソールに出力します。
プログラムをビルドして実行すると、次のように出力されます。
室蘭市白鳥大橋記念館みたら: -107633.0310,-183353.6321
ナラサキスタックス(株)室蘭支店: -105597.5526,-184627.0971
市立室蘭水族館: -107633.6553,-183599.8972
函館どつく株式会社室蘭製作所: -106873.9019,-183623.7433
特別養護老人ホームみたらの杜: -108338.5202,-184190.3925
養護老人ホームあいらん: -107738.2913,-184231.3324
室蘭市文化センター: -105473.6671,-186298.2846
医療法人社団 鈴木内科: -105479.7746,-186384.1112
室蘭市入江運動公園陸上競技場: -104978.1349,-185667.5652
室蘭市立西中学校: -104728.2999,-186524.2061
(以下略)

2015年9月12日土曜日

日本救急医療財団 全国AEDマップ

NHKニュース:『AEDの全国マップ 4県庁の9台が表示漏れ』
http://www3.nhk.or.jp/news/html/20150909/k10010222871000.html

このニュースで知ったのですが、AED設置箇所を地図で表示するサイトができていたのですね。

『日本救急医療財団 全国AEDマップ』
https://www.qqzaidanmap.jp/


スマートフォンでも問題なく見られますし、位置情報との連動で現在地周辺のAED設置箇所がわかるようになっています。
情報の信頼性を3段階で表示してくれるのもよさそうです(が、大半が最低ランクの箇所みたいです…)

このサイトの改善を望むとすると、次の2つでしょうか。
  • 「ようこそ」の文字が大きすぎてスマートフォンで見ると地図の表示エリアが下がってしまう。
  • 背景地図は地理院地図でなくて民間の地図のほうがよかったかも。
    • たとえば近くのAEDを見つけるとき、「コンビニの隣のビル」などというように、目印となる店や施設がわかったほうが便利なのではないか。
いずれにせよ、もしもの時のために、こういうサイトの存在を知っておくのは非常に大事なことですね。

2015年9月6日日曜日

国土地理院のベクトルタイルをOpenLayers 3で表示する

もう1か月以上前になってしまいましたが、国土地理院のベクトルタイル実証実験で全国データが提供されました。
ということで、これを地図上に表示させたい、と思うのがGISやってる人間なわけです。
で、OpenLayers 3には、TileVectorというまさにドンピシャなクラスがあって、それを使うと割と簡単にベクトルタイルを扱えます。

ソースコードはこんな感じ。ここでは、道路中心線・鉄道中心線・河川中心線を表示させています。

2015年8月26日水曜日

【世界のオープンデータ】 ケニアのオープンデータサイト

ケニア政府のオープンデータサイトが最近リニューアルしたそうです。
https://opendata.go.ke/

データカタログは最近割と見かけるポータルサイトと変わりないのですが、注目したいのは"Open Budget"というページで、どの公共事業にいくら予算を使ってて、その予算の出どころがどこか(他国からの援助でやってるものが多いっぽいのですが)というのがわかるようになっています。なにより、地図を見ればどこで何をやってるのがわかるのがすばらしいです。

地図上のマーカーにマウスを載せると、ポップアップで概要が表示されます。
マーカーをクリックすると、事業の詳細や進捗状況・予算の出所などが表示されます。


日本でも、どこで何をやってて、それにいくらかけてるのかが一目でわかるサイトがあるとおもしろそうですね。


2015年8月23日日曜日

「スマートシティとオープンデータ 〜データ活用によるまちづくりのイノベーション〜」を聴いてきた

2週間ほど前の話になってしまいますが、こちらのイベントに参加してきました。

いちおうNPOが主催ですが、横浜市の市政の一貫としてやってるみたいです。

話としては、行政や鉄道会社がデータの活用をどのように考えているかという点について、結構踏み込んだ話を聴けて、たいへん興味深いものがありました(バルセロナの大学教授の話は、技術寄りすぎてついていけなかったので、「なるほどそういう考えなのね」という程度の理解しかできませんでしたが)。

ただ、終わってみるとものすごい消化不良で、その理由は、講演全体において、「ビッグデータの活用」という点に話が終始してしまい、「オープンデータ」についての議論が一切なかったからでした。データをオープンにすることでどのようなイノベーションが生まれるのか、とか、データをオープンにするにあたっての課題は何か、とか、データをオープンにした具体的な事例、とか、そういう話は一切なく、ただひたすらデータを活用することの重要性を説いていたように思えました。


横浜市ってオープンデータ界では進んでいるほうだと思っていましたが、結局この程度の理解なのかな、と思うとちょっと期待外れとなってしまいました。これからの発展に期待です。