また,GNSS/GPS 経路の表示に OpenLayers 2 を使う(その0:はじめに)に目次がある。
ここでは OpenLayers 2.13.1 を使っている。
ここでは OpenLayers を使って Google Map をさせようと思う。 実は前回(GNSS/GPS 経路の表示に OpenLayers 2 を使う(その0:はじめに))すでに Google Map の表示の仕方を説明していた。 今回は同じ Google Map の表示だが,複数種類の Google Map を表示させよう。
OpenLayers では,地図画像や,マーカーなどはベースとなる変数(画像のためのキャンバスのような意味を持つ変数。ここでは「map」)に, いろんな地図やマーカーなどの「Layer(層)」を重ねていくイメージである。 通常は「背景」となる「Base Layer」となる画像を置き,その上に「Overlay(上の層)」を重ねていく。 ここで,Base Layer と Overlay の違いは,地図画像自体の透明度を変えるなどの加工ができるかどうか,であり, Base Layer は加工はできないみたいである(たぶん…)。
今回は,複数種類の Google Map を全て Base Layer として表示させる。 そのため,複数の地図画像 (Base) Layer を重ねてやると,複数種類の Google Map を同じ画面上に表示できるが, 当然下の画像は見えなくなってしまう。 片方の画像の透明度を変えるとうまく兼ねて表示できるのだが,その点に関しては,「その4」辺りで述べようと思う。
ここでは複数種類の地図を Base Layer として表示させるが,同時には見えないので,Layer 切り替えスイッチを使って表示を切り替える。 以下に具体例を示すので,自分で表示させて感触を得て欲しい。
以下に web ソースコードを書いておこう。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>OpenLayers Example: Google Map</title>
<script src="http://maps.google.co.jp/maps/api/js?sensor=false&language=ja"></script>
<script src="../OpenLayers-2.13.1/lib/OpenLayers.js"></script>
<script type="text/javascript">//<![CDATA[
var param = { div: 'map_canvas', lon: 136.181193333333, lat: 34.2329783333333, zoom: 15 };
//]]></script>
<script type="text/javascript">
var proj_3857 = new OpenLayers.Projection('EPSG:3857');
var proj_4326 = new OpenLayers.Projection('EPSG:4326'); // WGS84
// 初期化
function init_map() {
// 地図表示の変数定義
var map = new OpenLayers.Map({
div: param.div
});
// Google Maps(道路地図)を base layer として表示
var gmap = new OpenLayers.Layer.Google("Google ROADMAP", {
type: google.maps.MapTypeId.ROADMAP,
numZoomLevels:22
});
// Google Maps(高度表示):base layer
var gmapT = new OpenLayers.Layer.Google("Google TERRAIN", {
type: google.maps.MapTypeId.TERRAIN,
numZoomLevels:16
});
// Google Maps(衛星写真):base layer
var gmapS = new OpenLayers.Layer.Google("Google SATELLITE", {
type: google.maps.MapTypeId.SATELLITE,
numZoomLevels:22
});
map.addLayers([gmap, gmapT, gmapS]); // 最初は道路地図が見える。切り替えは Layer 切替スイッチで行う
// 中心座標を設定
if (!map.getCenter()) {
map.setCenter(new OpenLayers.LonLat(param.lon, param.lat).transform(proj_4326, proj_3857), param.zoom);
}
// Layer の切替スイッチの表示
map.addControl(new OpenLayers.Control.LayerSwitcher());
} // 初期化
</script>
</head>
<body onload="init_map()">
<div id="map_canvas"></div>
</body>
</html>
基本的には前回と同じだが,異なる種類の Google Map を表示させている点が異なってる。 具体的には以下のソースの青字の部分で,Google Map の TERRAIN と SATELLITE 用の変数を用意している。 オプションとして「isBaseLayer: false」というのを「{...}」の中に書くと Base Layer ではなく,Overlay として表示させることができるが, ここではその指定をしていないので,全て Base Layer と認識される。
そして,赤字の部分で,ROADMAP と一緒に TERRAIN,SATELLITE を表示させている。 前回と違う点は,「map.addLayer」ではなく「map.addLayers」と末尾に「s」がついていて, 地図の指定が「[]」で囲まれている。これにより,複数の地図を同じ map 変数に表示させることができる。 地図に表示される優先順位は [] 内の先頭からであり,この場合は「gmap」がまずは表示される。
複数地図の表示の切替は緑字の部分で表示させている LayerSwitcher で行う。 これは地図画面の右上の方に表示されるが,最初は「+」記号だけが小さく表示される。 その「+」を押すと,複数の Layer の選択ボタンが現れる。 そこで ROADMAP と異なる種類の地図を選ぶと,表示されている Google Map が入れ替わる。
自分で web ページが作れない人のために「その1」のサンプルを用意したので,具体的な表示を見てみて欲しい。(ちなみにサンプルページはアクセスログを取るルーチンを組み込んでいます)
その2:OpenLayers 2 を使って地理院地図を表示に続く
0 件のコメント:
コメントを投稿