CentOSでMapServerをインストールして、WEB-GISの準備ができたのですが、ここで閑話休題。
WEBを利用せずに直接Mapscriptを使ってみようと思います。詳しくはhttp://mapserver.org/installation/dotnet.htmlを参照してください。
これがうまくいけば、わざわざMapServerをインストールして、WEB Server立ち上げて、ブラウザーで表示して、と手順を踏んで、行かなければならないのが、Windows上でDesktopGISを作れてしまうのですよ。 すごいですね、さすがにOpen Source。某社とは違う。。。
ちなみに、Windowsで動くMapServerはms4wとして公開されていますので、localなWindows上でMapServerを動かしてみるのも良いと思います。超~簡単にインストールできますよ。
超簡単C#でMapscript
作成するには、Visual Studio 2010を使います。
必要なものは、ライブラリーは
-
mapsrcipt_csharp.dll
-
mapscript.dll
-
そのほかのmapscript_csharp.dllに必要なdll類一式
こちらからms4wのzipをダウンロードしておきましょう。ここではms4w-3.0.1.zipを使って確認しています。(3.0.3あたりでMapServer6.0になっているのですが、ここでは確認していません。)
表示するデータは、CentOSで使ったworldを使います。
データの準備
まずは、データの準備をします。
必要なものは、mapfile(拡張子がmap)、shpファイル一式です。
shpファイルはロシア応用地学センターからダウンロードしておきます(ArcView SHP FORMATの方です)。
c:ドライブにworld Directoryを作り、その中にdata Directoryを作ります。
data Directoryの中に解凍したファイルを放り込んでおきます。
mapfile 作成
windows用のmapfileを作成しておきます。
保存先は、worldの中です。前回作成したCentOSとmapfileと違うのは、IMAGEPATHです。
myworld.map
MAP EXTENT -180 -90 180 90 UNITS DD INTERLACE ON SIZE 600 300 IMAGECOLOR 102 153 255 SHAPEPATH "data" WEB IMAGEPATH "C:/world/" #myworld.mapの場所 #IMAGEURL "/ms_tmp/" #IMAGEPATH "/var/www/html/tmp/" #CentOS #IMAGEURL "/tmp/" #CentOS END LAYER NAME "World" STATUS ON TYPE POLYGON DATA "country_col_region" CLASS COLOR 255 220 160 OUTLINECOLOR 0 0 0 END END END
超簡単DesktopGIS
ms4w Directoryの作成
ms4wのms4w-3.0.1.zipを解凍してms4w Directoryを作成します。
なにやら、いっぱいファイルやらなんやらできますが、使うものは、
-
c:¥ms4w¥Apache¥cgi-bin¥mapscript¥csharp¥mapsrcipt_csharp.dll
-
c:¥ms4w¥Apache¥cgi-bin¥mapscript¥csharp¥mapscript.dll
-
c:¥ms4w¥Apache¥cgi-bin¥にあるdllすべて
今回は、Visual Studio 2010 を使ってC#のWindows Form Applicationを作成します。
-
新規プロジェクトをMapscriptDomo1名で作成
-
C# Windowsフォームアプリケーションを選択。
-
Form上に、PictureBoxコントロールは貼り付ける。
PcitureBox1 → picMap
とオブジェクト名を変更しておきます。ついでに、Form1をMapFormに変更します。
-
ここで一度Debug コンパイルして保存して、終了しておきます。
-
MapscriptDemo1プロジェクトのbin¥debug¥にc:¥ms4w¥Apache¥cgi-bin¥にあるdllすべてコピーします。
-
bin¥debug¥にc:¥ms4w¥Apache¥cgi-bin¥mapscript¥csharp¥mapsrcipt_csharp.dllとc:¥ms4w¥Apache¥cgi-bin¥mapscript¥csharp¥mapscript.dllをコピーします。
-
Visual Sutio 2010を起動して、MapscriptDomo1を呼び出します。
-
参照の追加で bin¥debug¥mapsrcipt_csharp.dllを追加します。
-
以下のようにcodingします。
/* * project: Mapscript Demo1 */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; using OSGeo.MapServer; namespace MapscriptDemo1 { public partial class MapForm : Form { const string MAP_FILE = @"c:\world\myworld.map"; //--> map file mapObj m_map; //--> mapserverのmap objectを作る rectObj m_fullExtent; //--> 初期表示の定義と設定 public MapForm() { InitializeComponent(); //--> mapの初期化 m_map = new mapObj(MAP_FILE); m_map.width = picMap.Width; m_map.height = picMap.Height; //--> mapのimageを作って、PictureBoxのimageにロードする imageObj image = m_map.draw(); byte[] img = image.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { picMap.Image = System.Drawing.Image.FromStream(ms); } m_fullExtent = new rectObj(m_map.extent.minx, m_map.extent.miny, _map.extent.maxx, m_map.extent.maxy, 0); } } }
次に保存後、Debug x86環境でコンパイルして、実行すると
上記の表示されましたか?
もしコンパイルできないようならば、以下の確認を
-
x86(32bit)でなければコンパイルできないようなので、再度チェック
-
dllのcopyは?
-
参照の追加は大丈夫?
-
mapfileの記述は? IMAGEPATHは正しい?
なんの変哲のないプログラムですが、これでDesktopGISが作れることがわかりました。
たぶん、vb.netでも大丈夫でしょう。
すごいですね~~。 感動ものです。 本職の解析システムとの組み合わせなどなどアイディアや使い方がいろいろと湧いてきます。
表示しただけではつまらないので、こちらにちょっこっと機能を付け加えたものをアップしています。
ご自由にダウンロードしてください。
こんな感じです。
いや~~、これは使える!!
Comments are closed.