GSJMap - 拡張ガイド

 GSJMapは,新たに地図描画エンジンを追加したり,コントローラ,ジオコーダを追加したりといった拡張が可能です.
 ここでは,これらの拡張を行う際に必要となる情報を提供します.

マップ生成関数

 地図描画エンジンを実装する場合に最低限必要な作業は,新しいエンジン名を決めることと,マップ生成関数を提供することです.マップ生成関数は,「GSJ.engine.エンジン名」に代入してください.この命名法に従うこことによりGSJMapがエンジンを探し出して使うことができるようになります.
 以下に新しい地図描画エンジン名を"myleaflet"とした場合の例を示します.

        GSJ.engine.myleaflet = function( map ) {

                map.original = new L.Map( map.owner, {
                        center: map.center,
                        zoom: map.zoom
                } );

                ...

                return map;
        };

 GSJMapは,様々な前処理を行い,メソッド等を追加した後でこのマップ生成関数を呼び出します.マップ生成関数は,Mapオブジェクトを引数にとり,必要な処理を加えて戻り値として返します.地図描画エンジンがエンジン固有のオブジェクトを生成した際には,上記の例のようにmap.originalに設定してくさい(必須ではありません)

※すなわち,マップ生成関数はMapオブジェクト自身を生成しているわけではありません.しかし,Mapオブジェクトの中心的な機能がここで実装され,地図描画エンジン固有のマップオブジェクトも生成されますのでこう呼んでいます.

 以下は,Mapオブジェクトにタイルレイヤーを生成するメソッド _tileLayer() を追加する例です.この例のように,地図描画エンジンで追加すべきメソッドはすべてアンダーバー"_"で始める規則になっています.なお,アンダーバーをつけない同名のメソッドがMapオブジェクトに存在することも多いですが,引数の仕様等が若干異なるので注意してください.

        GSJ.engine.myleaflet = function( map ) {

                map.original = new L.Map( map.owner, {

                        ...

                } );

                map._tileLayer = function( aLayer ) {

                        aLayer.original = new L.TileLayer( aLayer.url );

                        for ( var key in aLayer ) {
                                if ( aLayer.url.indexOf( '{' + key + '}' ) >= 0 ) {
                                        aLayer.original.options[ key ] = aLayer[ key ]; 
                                }
                        };

                        aLayer.original.addTo( map.original );
                }

                ...

                return map;
        };

Map

 マップ生成関数が返すオブジェクトでは,必要に応じて以下のプロパティおよびメソッドを設定してください.

・プロパティ

プロパティ デフォルト 説明
original Object  なし 地図描画エンジンが生成するオブジェクトがあれば設定

・メソッド

メソッド 引数 戻り値 説明
_on( type, handler ) String, Function  this  typeで指定したイベントに,handlerで指定したイベ関数を登録
未知のイベントタイプについては,可能な場合は,元のとなる地図描画ライブラリのオブジェクトのイベントハンドラにそのまま渡してください.
_addEventLlistener(やaddEventListener)メソッドを地図描画エンジン側で実装する必要はありません.プラットフォーム内でこの_on()メソッドへ読み替えられます.
_addBase( layer ) Layer  Layer  指定したレイヤーを背景地図に追加します. 
_image( layer ) Layer  なし  地図画像レイヤーを追加します. 
_addOverlay( layer ) Layer Layer オーバーレイレイヤーを追加
引数にはMap.layer()メソッドで生成されたLayerオブジェクトが渡されます.
_polyline( polyline ) Polyline  なし  ポリラインオブジェクトを追加します. 
_popup( popup ) Popup Object 指定した位置にポップアップウィンドウを追加
_layerControl( show )  Boolean  なし レイヤーコントロールを表示( showがtrueのとき )または非表示( showがfalseのとき ) 
_marker( marker )  Marker  なし マーカーオブジェクトを生成します
_removeMareker() なし なし  最後に追加したマーカーを削除 
_removeOverlay( layer ) Layer なし 指定したオーバーレイレイヤーを削除
引数を省略すると最後に追加したオーバーレイレイヤが削除されます. 
_removelPopup() なし  なし 最後に追加したポップアップを削除 
_tileLayer( layer ) Layer Layer  layer引数をもとに実際の描画機能を持ったLayerオブジェクトを生成
layer引数には,デフォルトの処理を実装したものが渡されます.
外部地図描画ライブラリのオリジナルLayerオブジェクトがある場合は,layer.originalに設定します.
_removeBase( layer ) Layer なし  指定したレイヤーをベースマップから削除します
_removeImage( image ) Layer なし 指定した画像レイヤーを削除します.
_removePolyline( polyline ) Polyline なし 指定したポリラインを削除します.
_scaleControl( show ) Boolean なし スケールコントロールを表示( showがtrueのとき)または非表示( showがfalseのとき)
_setBase( layer ) Layer Layer  背景レイヤーをlayerに変更
すでに背景として登録されているもののみが指定できます
layerを省略すると,現在表示されている背景レイヤーを返します
_setBounds( bbox )  [LatLng, LatLng] [LatLng, LatLng] | null 南西および北西の緯度経度を指定して,その範囲が収まりかつ最大になるように描画位置と範囲を変更,最終的な範囲を取得.
boundsは省略することができ,その場合は現在の範囲が返されます
マップエンジンの状態により情報取得に失敗することがあり,その場合はnullを返します.
_setCenter( latLng ) LatLng LatLng 地図の中心を,latLngで指定した地理上の位置に変更することを試み,最終的な地理上の位置を取得.
centerは省略することができ,省略すると現在の中心位置が返されます.
_setDraggable( draggable ) Boolean なし マウスで地図をドラッグ可能にするか
_setHf( f ) Number Number 高さ誇張係数を指定
fは省略でき,省略すると現在の誇張係数が返されます.
_setView( view,
 options )
Object,
Object
Object 地図の中心位置とズームレベルを同時に設定します.
引数は,{ centetr: LatLng, zoom: Number }で指定し,フィールドが省略された場合は現在の値となります.引数自体を省略すると現在の表示設定を返します.
optionsに{ animate: false }を指定するとアニメーションを抑止します.
デフォルトではsetCenter()とsetZoom()を使って動作しますが,地図描画園エンジンが専用のメソッドを持つ場合は,このメソッドを実装することにより利用できます.
_setZoom( zoom ) Number Number ズームレベルをzoomに変更することを試み,最終的なズームレベルを取得
ズームレベルの概念を持たない場合(Ceisumなど)も,対応する必要があります.
zoomに実数が渡される可能性があります.実装上は四捨五入するなどして整数のみを扱うだけでも構いません.
_startLocate( params ) Object this  GPS等による現在位置取得を開始します
_stopLocate() なし this GPS等による現在位置取得を中止します
_move( dx,
 dy,
 dz )
Number, 
Number,
Number
なし 地図をx軸方法,y軸方向, z軸方向にそれぞれdx, dy, dzピクセルずつ動かします.
_roll( s,
 t )
Number,
Number
なし 注視点を中心に,水平方向にs, 鉛直方向にt回転させます.
_rollCamera( s,
 t )
Number,
Number
なし カメラを中心に,水平方向にs, 鉛直方向にt回転させます
_up( dz ) Number なし ズームレベルを増加(負の時は減少)させます.
デフォルトでは内部変数に値を蓄積させ,1を超えたとき(または-1を下回ったとき)にズームレベルを変更します.この動作を変えたいときはこのメソッドを実装します.
(dzの考え方が_move()と異なる.要再検討)

Layer

 Mapオブジェクトの_tileLayer()メソッドや_addImage()メソッドが返すLayerオブジェクトでは,以下のプロパティおよびメソッドを必要に応じて実装します.

・プロパティ

プロパティ デフォルト値 説明
original Object 無し 外部地図描画ライブラリが提供するオリジナルのレイヤーオブジェクト

・メソッド

メソッド 引数 戻り値 説明
_redraw() なし なし レイヤーを再描画します
_set( key, value ) String, Eney Eney レイヤーのプロパティをセットし,最終的な値を取得します.
valueは省略でき,省略すると現在の値のみが返されます.
この関数内でredraw()を呼ぶ必要はありません.
この関数は,Layerオブジェクのset()メソッドで未知のプロパティが設定されたときに呼び出されます.
_setOpacity( opacity )  Number Number  不透明度を設定し,最終的な不透明度を取得
opacityは省略でき,省略すると現在の値が返されます.
_setVisibility( visibility ) Boolean Boolean レイヤーの表示・非表示をセットし,最終的な値を取得
vsibilityは省略でき,省略すると現在の状態が返されます.

Marker

 Map._marker()が返すMarkerオブジェクトでは,以下のメソッドを必要に応じて実装します.

・メソッド

メソッド 引数 戻り値 説明
_closePopup()  なし なし  ポップアップウィンドウを閉じます  
_openPopup()  なし なし ポップアップウィンドウを表示します
_setLatLng( latLng ) LatLng LatLng  表示する位置を変更し,最終的な位置を返します.
引数は省略するできます.
_setOpacity( opacity )  Number Number  不透明度を設定し,最終的な不透明度を返します.
opacityは省略でき,省略すると現在の値が返されます.
_setPopup( popup ) String String ポップアップで表示するhtml文字列を設定します.
引数は省略することができ,省略すると現在設定されている文字列を返します
_setVisibility( visibility ) Boolean Boolean レイヤーの表示・非表示をセットし,最終的な値を返します.
vsibilityは省略でき,省略すると現在の状態が返されます.

Polyline

 Map._addPolyline()が返すPolylineオブジェクトでは,以下のプロパティおよびメソッドを必要に応じて実装します.

・プロパティ

プロパティ デフォルト値 説明
original Object 無し 外部地図描画ライブラリが提供するオリジナルのポリラインオブジェクト

・メソッド

メソッド 引数 戻り値 説明
_addLatLng( latLng ) LatLng  なし 地理座標を追加します.
_on( type,
 handler ) 
String,
Function
なし イベントリスナーを登録します. 
_setLatLngs( latLngs ) [ LatLings, ... ]  なし 地理座標の配列を設定します.
_setVisibility( visibility ) Boolean Boolean ポリラインの表示・非表示をセットし,最終的な値を取得します.
vsibilityは省略でき,省略すると現在の状態が返されます.

コントローラ

 独自のコントローラを実装するには,Controllerオブジェクトを返す関数を,GSJ.controller.コントローラ名にセットします.この名前規則に従うことにより,Map.addControle( 'コントローラ名' ) でコントローラに追加できるようになります.
 コントローラに関しては,GSJMapであらかじめオブジェクトを生成することはありません.プロパティやメソッドを適宜実装してください.

・プロパティ

プロパティ デフォルト 説明
active Boolean なし コントローラを有効にするか否か
id String なし コントローラー名.'gamepad'または'leap'
rollSpeed Number なし 回転速度,1秒あたりの回転ラジアン角
rollAxisSpeed Number なし 回転速度スティック用,1秒あたりの回転ラジアン角
upSpeed Number なし 上昇/下降速度,1秒あたりのズームレベル相当
moveSpeed Number なし 移動速度,1秒あたりのピクセル数
moveAxisSpeed Number なし 移動速度スティック用,1秒あたりのピクセル数

・メソッド

メソッド 引数 戻り値 説明
check なし なし Mapオブジェクト内のループの中から呼び出されます.
コントローラの状態が変化があった場合はMapの状態変更用メソッド(move, roll, rollCamera, up)をコールして状態を変更してください

ジオコーダ

 ジオコーダは,通常の使用法でもgeocode()メソッドをオーバーライドすることにより独自ジオコーダを作成,利用することができます.
 さらに,新しいGeocoder()オブジェクトを返す関数を実装して,GSJ.geocoder.ジオコーダ名にセットすると,GSJ.geocoder( ジオコーダ名 )で取得して利用できるようになります.


2014年10月30日更新