2014年7月9日水曜日

GNSS/GPS 経路の表示に OpenLayers 2 を使う (その2:OpenLayers 2 を使って地理院地図を表示)

これはGNSS/GPS 経路の表示に OpenLayers 2 を使う(その1:OpenLayers 2 を使って複数の Google Map を表示)からの続きである。
GNSS/GPS 経路の表示に OpenLayers 2 を使う(その0:はじめに)に目次がある。
ここでは OpenLayers 2.13.1 を使っている。
前回(その1:OpenLayers 2 を使って複数の Google Map を表示)は OpenLayers を使って Google Map を表示させたが,今回は地理院地図を表示させてみる。

 以下に 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: Cyber Japan Map</title>
<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,
          projection: proj_3857
        });

        // 地理院地図(標準地図)を半透明にしてoverlay として表示
        var std_map = new OpenLayers.Layer.XYZ('標準地図', 'http://cyberjapandata.gsi.go.jp/xyz/std/${z}/${x}/${y}.png', {
          attribution: '<a href="http://portal.cyberjapan.jp/help/termsofuse.html" target="_blank">国土地理院</a>',
          maxZoomLevel: 17, isBaseLayer: false
        });
        var pale_map = new OpenLayers.Layer.XYZ('淡色地図', 'http://cyberjapandata.gsi.go.jp/xyz/pale/${z}/${x}/${y}.png', {
          attribution: '<a href="http://portal.cyberjapan.jp/help/termsofuse.html" target="_blank">国土地理院</a>',
          maxZoomLevel: 17
        });
        map.addLayers([std_map, pale_map]);

        // 中心座標を設定
        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 の時と同じである。 ここでは,地理院地図の「標準地図」と「淡色地図」を表示させている。 「淡色地図」を Base Layer にし,「標準地図」を Overlay として表示させている。

 前回と異なる点として,赤字の部分にあるように,変数「map」の定義の際に表示する際の投影法を指定している。 これは OpenLayers の標準の投影法と地理院地図の投影法が異なるための処理である。

 青字の部分で地理院地図用の変数を定義している。 標準地図と淡色地図の定義はほぼ同じだが,標準地図の方にだけ「isBaseLayer: false」というのがある。 これによって標準地図は Base Layer でなくなり,Overlay となる。

 「その2」のサンプルを具体的な web ページとして用意したので,具体的な表示を見てみて欲しい。(ちなみにサンプルページはアクセスログを取るルーチンを組み込んでいます)

その3:中央にセンターマークを表示に続く

0 件のコメント: