C#(ASP.NET)でGoogle Mapを使おう
ASP.NETは.NET Frameworkが提供するWebアプリケーションやWebサービスを提供する仕組みです。.NET Frameworkですので、C#でも記述することが出来ます。Google MapはGoogle Maps APIというJava Scriptで記述するAjaxという仕組みを使って操作することができます。YWorks SoftwareではASP.NET2.0を使ってGoogle Maps APIを利用できるGoolge Map コントロールを提供しています。
Google MapコントロールをASP.NET2.0のaspxファイルに配置することでGoogle Maps APIを利用することができます。Google Mapコントロールの利用に当たってはGoogle MapのキーをGoogleより取得しておく必要がありますので、事前に取得して置いて下さい。取得したGoogle MapキーはコントロールのGoogleMapKeyに設定します。中心座標(世界測地系の緯度経度)の指定や中心マーカーの表示、地図のズーム、倍率変更コントロールや地図タイプ変更コントロールなどの初期表示設定についてはYWorksキーは必要ではありません。しかし、Google Mapの各種イベントをサーバ側のイベントとして受け取りたい場合にはYWorks SoftwareのYWorksキーをVectorより取得してコントロールのYWorksKeyプロパティに設定しておく必要があります。
サーバイベントはAjaxにより送受信します。Google Mapコントロールでは、Google MapのイベントリスナとなるJava ScriptをGoogle Mapの各イベントごとに登録しますが、そのJava Scriptの中でmapEventというオブジェクトを生成して、そのオブジェクトのsendメソッドを利用してクライアントからサーバへイベントを送信し、サーバ側でRaiseGoogleMapEventというイベントで受信します。サーバ側からはサーバ処理に応じてGoogle MapコントロールのSendJavaScriptというメソッドを使ってクライアントにGoogle Mapを操作するためのJava Script(Google Maps API)を送信することでGoogle Mapを操作します。
下記にGoogle Mapコントロールの使用例を示します。下記のコードはcsファイルの内容ですが、Google MapキーとYWorksキーおよびコントロールのWidthとHeightについてはaspxファイルにてプロパティ設定してあります(コードで設定することも可能です)。
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using YGoogleMap; namespace GoogleMapSample { public partial class GoogleMapSample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // // Google Map コントロールの初期設定 // //コントロールの表示設定 ctlMap.UseLargeMapControl = true; //Large Map Control を使用 ctlMap.UseMapTypeControl = true; //Map Type Control を使用 ctlMap.UseScaleControl = true; //Scale Control を使用 ctlMap.UseOverviewMapControl = true; //Overview Map Controlを使用 ctlMap.SetOverviewMapControlSize(200, 200); //Overview Map Controlのサイズ(px) //表示位置と倍率の設定 ctlMap.SetCenter(35.466225, 139.622618); //地図の中心の緯度経度を設定(世界測地系) ctlMap.Zoom = 16; //地図のズームを設定 //各種スクリプトの設定 //各種スクリプト設定はYWorksキーが設定されている場合のみ有効です。 ctlMap.MapUserFunctionsScript = this.GetUserFunctions(); //GoogleMapコントロール用のユーザ関数群の設定 ctlMap.MapStartScript = this.GetMapStartScript(); //GoogleMapコントロール初期化直後のスクリプトの設定 ctlMap.MoveEndListenerScript = this.GetMapMoveEndScript(); //GoogleMapコントロールのmoveendイベントのスクリプトの設定 ctlMap.ZoomEndListenerScript = this.GetMapZoomEndScript(); //GoogleMapコントロールのzoomendイベントのスクリプトの設定 } #region 各種スクリプト //Google Mapコントロールで使用するユーザ関数をJavaScriptで記述します。 private string GetUserFunctions() { return "function hello(){window.alert('Hello World!');}"; } //Google Mapコントロール初期化直後のJavaScriptを記述します。 private string GetMapStartScript() { return "hello();"; } //Google MapコントロールのmoveendイベントのJavaScriptを記述します。 //"function(){・・・}"を返します。 //function内でmapEventオブジェクトのsendを呼び出してサーバイベントを発生させます。 private string GetMapMoveEndScript() { string script = "function(){"; script += "var ev = new mapEvent('move_end');"; script += "ev.addArg(" + ctlMap.MapID + ".getCenter().x);"; script += "ev.addArg(" + ctlMap.MapID + ".getCenter().y);"; script += "ev.send();"; script += "}"; return script; } //Google MapコントロールのzoomendイベントのJavaScriptを記述します。 //"function(oldZ, newZ){・・・}"を返します。 //function内でmapEventオブジェクトを使ってサーバイベントを発生させます。 private string GetMapZoomEndScript() { string script = "function(oldZ, newZ){"; script += "var ev = new mapEvent('zoom_end');"; script += "ev.addArg(oldZ);"; script += "ev.addArg(newZ);"; script += "ev.send();"; script += "}"; return script; } #endregion #region サーバイベント応答 //Google Mapコントロールのサーバイベントの応答 protected void ctlMap_RaiseGoogleMapEvent(string eventName, string[] args) { if (eventName == "move_end") //地図の移動 { this.MoveEnd(args); } else if (eventName == "zoom_end") //倍率の変更 { this.ZoomEnd(args); } } //地図の移動時の応答 //メソッド内でSendJavaScriptメソッドを使ってJavaScriptを送信します。 private void MoveEnd(string[] args) { // alertの表示 string script = "window.alert('Server Event : Move End"; script += @"\nlat : " + args[0] + @"\nlng : " + args[1] + "');"; ctlMap.SendJavaScript(script); //markerの表示 script = ctlMap.MapID + ".clearOverlays();"; script += "marker = new GMarker(new GPoint(" + args[0] + ", " + args[1] + "));"; script += ctlMap.MapID + ".addOverlay(marker);"; ctlMap.SendJavaScript(script); } //地図の倍率変更時の応答 //メソッド内でSendJavaScriptメソッドを使ってJavaScriptを送信します。 private void ZoomEnd(string[] args) { // alertの表示 string script = "window.alert('Server Event : Zoom End"; script += @"\nOld Zoom : " + args[0] + @"\nNew Zoom : " + args[1] + "');"; ctlMap.SendJavaScript(script); } #endregion } }
上記のコードにおいては
1.Google Mapの表示直後に「Hello World!」メッセージを表示
2.地図移動時にメッセージ表示とマーカー表示(サーバイベント)
3.地図倍率変更時にメッセージ表示(サーバイベント)
も動作させています。