MapcsriptをC#で使ってみる

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の中に解凍したファイルを放り込んでおきます。
world 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に変更します。

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環境でコンパイルして、実行すると

C#/Mapscriptの実行画面

上記の表示されましたか?
もしコンパイルできないようならば、以下の確認を

  1. x86(32bit)でなければコンパイルできないようなので、再度チェック
  2. dllのcopyは?
  3. 参照の追加は大丈夫?
  4. mapfileの記述は? IMAGEPATHは正しい?

なんの変哲のないプログラムですが、これでDesktopGISが作れることがわかりました。
たぶん、vb.netでも大丈夫でしょう。

すごいですね~~。 感動ものです。 本職の解析システムとの組み合わせなどなどアイディアや使い方がいろいろと湧いてきます。
表示しただけではつまらないので、こちらにちょっこっと機能を付け加えたものをアップしています。
ご自由にダウンロードしてください。
こんな感じです。
C#/Mapscript Demoの実行画面

いや~~、これは使える!!

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

WP-SpamFree by Pole Position Marketing

Social Widgets powered by AB-WebLog.com.