DotSpatialで地理院タイルを表示してみます。
…といっても、こちらの投稿で作ったプログラムを使うだけです。とくにやることはありません。
また、DotSpatial 1.8に付属の"DemoMap.exe"でもできます。
プログラムを起動します。ツールバーの中で、「None」と表示されているところのプルダウンメニューをクリックして(この部分がWebMapというプラグインです)、"Other"を選択します。
ダイアログ内のテキストボックスに、地理院タイルのURLを入力します。ただし、{z}は{zoom}に置き換えます(下の画像は、標準地図を指定しています)。
OKを押すと、地理院タイルが表示されるようになります。(ただ、縮尺の関係だと思いますが、画像がぼけるので、きれいに表示させるには、縮尺をぴったり合わせないといけないかと)
2015年10月25日日曜日
2015年10月16日金曜日
DotSpatialでGISアプリを作る (1)とりあえず作ってみる
【2015/10/25改変】
DotSpatial1.8では、1.7以前と異なるやり方でアプリケーションを作るようになったようですので(このページのコメント参照)、1.8のやり方で書き直しました。
----
DotSpatialは、.NET Frameworkを使ってGISアプリを作るためのライブラリです。
QGISやArcGISなどの素晴らしいアプリケーションがすでにあるので、もちろんそちらを使っても良いとは思いますが、特定の目的に特化したアプリを作りたいときなんかは、こういうライブラリを使って自分でアプリを作るのもありかと。そんなわけで、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のおもしろいところではないかと思います。
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のコードを開き、次のようにコーディングします。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Windows.Forms; | |
using System.ComponentModel.Composition; | |
namespace DotSpatialExample1 | |
{ | |
public partial class Form1 : Form | |
{ | |
[Export("Shell", typeof(ContainerControl))] | |
private static ContainerControl Shell; | |
public Form1() | |
{ | |
InitializeComponent(); | |
if (DesignMode) return; | |
Shell = this; | |
this.appManager.LoadExtensions(); | |
} | |
} | |
} |
ビルド
上記までできたら、一度ビルドします。まだデバッグ起動はしません。ビルドが完了したら、プログラムができたフォルダー(プロジェクトファイルの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番目の属性)を、コンソールに出力します。
プログラムをビルドして実行すると、次のように出力されます。
これを使って、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番目の属性)を、コンソールに出力します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using GeoAPI.Geometries; | |
using NetTopologySuite.Geometries; | |
using NetTopologySuite.IO; | |
namespace NTSReadShapefileExample | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
IGeometryFactory factory = new GeometryFactory(); | |
using (ShapefileDataReader reader = new ShapefileDataReader(@"c:\work\aed_20150515\aed_20150515.shp", factory)) | |
{ | |
while (reader.Read()) | |
{ | |
Point geom = reader.Geometry as Point; | |
System.Console.WriteLine(string.Format("{0}: {1:F4},{2:F4}", reader.GetString(1), geom.X, geom.Y)); | |
} | |
} | |
} | |
} | |
} |
室蘭市白鳥大橋記念館みたら: -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
(以下略)
登録:
投稿 (Atom)