接触(touch)の判定


shapeObj.touches(shapeObj)を使うと、二つのオブジェクトが接しているかの判定を行うことができます。

ここに、座標系の異なる2つの地図データがあるとします。
・地図1:道路の線形(世界測地系;JGD2000)
・地図2:道路の節点(世界測地系平面直角7系)
地図描画上は、MapServerのオンザフライのおかげで、ちゃんと重なって見えます。
いま、この2つの地図を使って、道路の線形に対して接している節点が欲しいとしたとき、次のようにすると、節点を見つけることができません。

'道路区間を検索のもととする
map.getLayerByName("道路区間").open()
map.getLayerByName("道路区間").whichShapes(_rect)
_shape = map.getLayerByName("道路区間").nextShape

_rect2 = _shapee.bounds '対象の道路区間の範囲を検索範囲とする

'道路節点のすべてのデータをループ
map.getLayerByName("道路節点愛知").open()
map.getLayerByName("道路節点愛知").whichShapes(_rect2)
_shape2 = map.getLayerByName("道路節点愛知").nextShape

Do Until _shape2 Is Nothing

Dim _intKekka As Integer
_intKekka = _shape.touches(_shape2)
If _intKekka = mapscript.MS_TRUE Then
_intCount += 1
MsgBox(_shape.getValue(0).ToString & ":" & _shape2.getValue(0).ToString)
End If
_shape2 = map.getLayerByName("道路節点愛知").nextShape
Loop

map.getLayerByName("道路節点").close()
map.getLayerByName("道路区間").close()
続きを読む >>
bugna | MapScript | 13:19 | comments(0) | trackbacks(0) | - | - |

VB.NETでMapScriptを動かす(準備編:いたずらMapScript)

MapScirpt.ja の更新を行いながら、VB.NETで簡易な実行環境ができないかと考えていました。

MapScript.ja では、各クラスのプロパティやメソッドのサンプルプログラムを書いて実行し、結果のマップファイルの内容をコピペしてという作業をしています。
せっかくサンプルプログラムを作っているので、これを参照するだけでなく、パラメータを少し変えたら、マップファイルがどう変わるかがわかると、いっそう理解が深まります。

VB.NETでMapScriptを動かす(準備編) では、Visual Studio 2005 Express Edition をインストールして、MS4W のフォルダに参照設定をしてということを書いたのですが、環境構築はできても、地図の表示やインターフェースの説明をするのにもうちょっと時間がかかります。

そこで、Visual Studio 2005 Express Edition を使わず、.NET Framework 2.0 の環境と、MS4Wがインストールされた環境下で、簡単にVB.NETでMapScirptを操作することができたらいいなと思い、「いたずらMapScirpt」というプログラムを作ってみました。

続きを読む >>
bugna | MapScript | 11:28 | comments(0) | trackbacks(0) | - | - |

VB.NETでMapScriptを動かす(準備編)

0.MS4Wのダウンロード
※記事を修正しました。2006.12.27 bugna
※MS4Wについては、Yaskeyさんここ や CADWebさん のこことかのサイトが詳しいです。
MS4Wは、MapTools.org で配布している、MapServerのWindows用パッケージです。MapScriptも同梱されており、
C:¥ms4w¥Apache¥cgi-bin フォルダ直下にある関連するDLL
C:¥ms4w¥Apache¥cgi-bin¥ mapscript¥csharp にある2つのDLL
がこれから必要になるDLLです。

ダウンロードページから、"MS4W PHP5 Base Installer v2.*.*" をダウンロードして解凍します。できた、ms4w フォルダを、C:¥直下におきます。

1.フォームの準備
※VB.NET に ついては、VB.NET 2005 Express を参照ください。

VB.NETで、Form1に PictureBox を1つ配置します。

2.プロジェクトにmapscript_csharp.dll を追加

先に、DLLを保存するフォルダを作成します。
ソリューションエクスプローラを右クリックして、

・・・
!ここで!、「ファイル」−「すべてを保存(Ctrl+Shift+S)」を選択します。
”プロジェクトの保存”ダイアログが表示されるので、「上書き保存」を押します。
もうちょっといい方法があったので、以下に訂正します。
環境変数のPathに以下を追加します、
C:¥ms4w¥Apache¥cgi-bin¥ mapscript¥csharp
C:¥ms4w¥Apache¥cgi-bin

方法:




続きを読む >>
bugna | MapScript | 15:02 | comments(0) | trackbacks(0) | - | - |

VB.NETでMapScriptを動かす(概要その1)

このブログの本題ですが、元ネタは下記のページについた、コメントにあったサンプルソースです。
■MapScript C# compilation
http://mapserver.gis.umn.edu/docs/howto/mapscriptcscompile

■CoordinateSolutions
http://www.coordinatesolutions.com/download/MapserverTestVB.zip

コメントにあるように、MapScript_csharp.dll の動作評価のために作られたようです。

VB.NETとC#というのは、どちらかで動くソースは、もう一方でもほぼ同様に書くことができる。
なので、ネット上でVB.NETもしくはC#のソースコードを見つけたら、VB.NET←→C#の言語コンバーター(トランスレーター)ツールを使って、お好みの言語に変換して利用するなんてことを、たぶん、たくさんの人がやっていることと思う。

@ITさんの記事は、両方併記のものが多いですね。

.NET Framework 自身が、CLR上で実行するので、もとになるMSILはどんな言語で作って(コンパイルして)もOKというような感じです。
■CLRとは 【Common Language Runtime】 - 意味・解説 : IT用語辞典 e-Words:
http://e-words.jp/w/CLR.html

なので、「csharp」となっていますが、VB.NETでも動くはずです。動きます。

方法は順を追ってソースコードを貼り付けていきますが、要は、MS4W(MapServer for Windows)の..\ms4w\Apache\cgi-binフォルダ直下にある関連するDLLと、..\ms4w\Apache\cgi-bin\mapscript\csharp にある2つのDLLを全部コピーして、プロジェクトの中で、mapscript_csharp.dll に参照設定すれば、VB.NETだろうがC#だろうがJ#だろうが、MapScriptが使えるということなのです。

bugna | MapScript | 14:06 | comments(0) | trackbacks(0) | - | - |
1/1PAGES | |

01
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--