その13までのページでは OpenLayers v3.7.0 で書いてきたが,ここでは OpenLayers 3.16.0 で書かれている。
前回(その14:GPX による経路の表示・各点の通過時刻を知る)は,GPX 形式の経路データファイルを OpenLayers を使って表示させる例について書いた。 今回は Google Map を OpenLayers v3 で表示する方法について書こう。 これは,OpenLayers 関連のメーリングリストに載っていたものだが,どこに載っていたのか忘れてしまった…。
まずは JavaScript を含んだ web ページのソースを載せよう。 説明は このソースの下に書こう。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<style type="text/css">
div.fill {width: 100%; height: 100%;}
body {padding: 0; margin: 0;}
html, body, #map {height: 100%; width: 100%;}
</style>
<script src="http://maps.google.com/maps/api/js?v=3&key=AIzaSyC9kDhQ95raZdgIv8sXTkHRN6LDl5zM7rw"></script>
<title>Google Maps integration example</title>
<link rel="stylesheet" href="http://openlayers.org/en/v3.16.0/css/ol.css" type="text/css">
<script src="http://openlayers.org/en/v3.16.0/build/ol.js"></script>
<script type="text/javascript">
// -------------------------------------------------------------------
var map = null; // map 変数
var view = null; // view 変数
var olMapDiv = null; // OpenLayers Map 用のweb page 上の領域
var kml_vector = null; // KML ファイル用変数
var wp_vector = null; // waypoint KML ファイル用変数 2
var center_lon = 135.804055; // 表示中心の経度(デフォルトは始点の経度)
var center_lat = 35.0515416666667; // 表示中心の緯度(デフォルトは始点の緯度)
var kml_url = "workn2/o3cjmap_data.kml";
var kml_url2 = "workn2/o3cjmap_wpdata.kml";
var initZoom = 15; // ズームの初期値
var MinZoom = 6; // ズームの最小値(最も広い範囲)
var MaxZoom = 21; // ズームの最大値(最も狭い範囲)
// *******************************************************************
function init_map() {
var gmap = new google.maps.Map(document.getElementById('gmap'), {
disableDefaultUI: true,
keyboardShortcuts: false,
draggable: false,
disableDoubleClickZoom: false,
scrollwheel: false,
streetViewControl: false,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
position: google.maps.ControlPosition.TOP_RIGHT,
mapTypeIds: [
google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.TERRAIN,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.HYBRID
]
},
zoomControl: false,
zoomControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
},
scaleControl: false
});
// make sure the view doesn't go beyond the 22 zoom levels of Google Maps
view = new ol.View({
maxZoom: MaxZoom
});
view.on('change:center', function() {
var center = ol.proj.transform(view.getCenter(), 'EPSG:3857', 'EPSG:4326');
gmap.setCenter(new google.maps.LatLng(center[1], center[0]));
});
view.on('change:resolution', function() {
gmap.setZoom(view.getZoom());
});
kml_vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'work/o3cjmap_data_20160611.kml',
format: new ol.format.KML({ showPointNames: false })
}),
style: new ol.style.Style({
stroke: new ol.style.Stroke({ color: '#319FD3', width: 1 })
})
});
wp_vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'work/o3cjmap_wpdata_20160611.kml',
format: new ol.format.KML({ showPointNames: false })
}),
});
olMapDiv = document.getElementById('olmap');
map = new ol.Map({
layers: [kml_vector, wp_vector],
interactions: ol.interaction.defaults({
altShiftDragRotate: false,
dragPan: false,
rotate: false
}).extend([new ol.interaction.DragPan({kinetic: null})]),
target: olMapDiv,
view: view
});
view.setCenter(ol.proj.transform([center_lon, center_lat], "EPSG:4326", "EPSG:3857"));
view.setZoom(initZoom);
olMapDiv.parentNode.removeChild(olMapDiv);
gmap.controls[google.maps.ControlPosition.TOP_LEFT].push(olMapDiv);
} // init_map()
// *******************************************************************
</script>
</head>
<body onload="init_map()">
<div id="map" class="map">
<div id="gmap" class="fill"></div>
<div id="olmap" class="fill"></div>
</div>
</body>
</html>
web ページのソース部分は,赤色部分が OpenLayers のライブラリの読み込み関連の部分であり,灰色部分は web の基本的な要素である。 青い部分は,Google Map の定義部分である。 ここでは option が沢山書いてあるが,デフォルトの設定そのままでよい場合は記述しなくてもよい。 ただし,ここで無効(false に設定)にしておかないと,OpenLayers の機能とダブってしまってうまく働かないものもある。 例えば「disableDoubleClickZoom」や「zoomControl」は false にしておかないとうまくいかないと思われる。 気になる方は試してみてはいかがだろうか?
ちなみに,「zoomControl」を false してるので,「zoomControlOptions」の項目はいらないが,こういう指定もある,ということで載せてある。
水色の部分は ol.View クラス関連であり,中心や zoom の設定を行っている。
緑色部分は,KML 経路データをベクトルレイヤーとして読み込んでいる。
紫色の部分は OpenLayers の ol.Map クラスとしての map 変数を定義している。 ここで,interaction(地図に対する操作に関する部分)に追加 (extent) された項目がある。 また,数行下で Google Map を読み込むためのおまじないが2行書かれている。 どうやら,この2行が肝心みたいである。
これで Google Map を読み込んで,その上に KML 経路データを記述できる。 「その15」のサンプルを具体的な web ページとして用意したので,具体的な表示を見てみて欲しい。 (ちなみにサンプルページはアクセスログを取るルーチンを組み込んでいます)
その16:OpenLayers v3 で Google Map と地理院地図を重ねるに続く
0 件のコメント:
コメントを投稿