osm4_ol_infowindow
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| osm4_ol_infowindow [2018/05/22 12:35] – 管理者 | osm4_ol_infowindow [2018/05/25 03:58] (現在) – [備考] 管理者 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | [[start]]>[[programming_start]] | ||
| + | ====== OpenLayers4での吹き出し表示(仮) ====== | ||
| + | 注意:「OL4勉強のための試作プログラムなので間違っている可能性があります」「DokuWikiは個別にヘッダを編集できないので通常とは少し違う構造になっています」 | ||
| + | |||
| + | 東京都庁と千葉県庁のマーカーをクリックすると吹き出し表示するサンプルデモです。(見にくいかもしれませんが薄い青色の丸が標準マーカーです) | ||
| + | |||
| + | ===== デモ ===== | ||
| + | < | ||
| + | < | ||
| + | .mapdiv{height: | ||
| + | / | ||
| + | .ol-popup {position: absolute; | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup-closer {text-decoration: | ||
| + | .ol-popup-closer: | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | /* 外部CSSの読み込み */ | ||
| + | function cssLoad(cssFile){ | ||
| + | if(document.all){ | ||
| + | document.createStyleSheet(cssFile); | ||
| + | }else{ | ||
| + | var link = document.createElement(" | ||
| + | link.rel = " | ||
| + | link.href = cssFile; | ||
| + | link.type = " | ||
| + | document.getElementsByTagName(' | ||
| + | } | ||
| + | } | ||
| + | cssLoad(" | ||
| + | </ | ||
| + | <script src=" | ||
| + | |||
| + | <div id=" | ||
| + | <!-- 吹き出し用のDIV --> | ||
| + | <div id=" | ||
| + | <a href="#" | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | // | ||
| + | var container = document.getElementById(' | ||
| + | var content = document.getElementById(' | ||
| + | var closer = document.getElementById(' | ||
| + | var popoverlay = new ol.Overlay({ | ||
| + | element: container, | ||
| + | autoPan: true, | ||
| + | autoPanAnimation: | ||
| + | duration: 250 | ||
| + | } | ||
| + | }); | ||
| + | // | ||
| + | closer.onclick = function() { | ||
| + | popoverlay.setPosition(undefined); | ||
| + | closer.blur(); | ||
| + | return false; | ||
| + | }; | ||
| + | | ||
| + | //---- マップ表示 ---- | ||
| + | // | ||
| + | var view0 = new ol.View({center: | ||
| + | var map0 = new ol.Map({ | ||
| + | target: ' | ||
| + | layers: [new ol.layer.Tile({source: | ||
| + | overlays: [popoverlay], | ||
| + | view: view0, | ||
| + | controls: ol.control.defaults({attributionOptions: | ||
| + | }); | ||
| + | map0.addControl(new ol.control.ZoomSlider()); | ||
| + | |||
| + | //---- マーカー関連 ---- | ||
| + | var marker0=[]; | ||
| + | // | ||
| + | marker0[0] = new ol.Feature({ | ||
| + | geometry: new ol.geom.Point(ol.proj.fromLonLat([139.692, | ||
| + | name: '<a href=" | ||
| + | }); | ||
| + | map0.addLayer(new ol.layer.Vector({source: | ||
| + | features: [marker0[0]] | ||
| + | })})); | ||
| + | // | ||
| + | marker0[1] = new ol.Feature({ | ||
| + | geometry: new ol.geom.Point(ol.proj.fromLonLat([140.122, | ||
| + | name: '<a href=" | ||
| + | }); | ||
| + | map0.addLayer(new ol.layer.Vector({source: | ||
| + | features: [marker0[1]] | ||
| + | })})); | ||
| + | |||
| + | // | ||
| + | map0.on(' | ||
| + | var feature = map0.forEachFeatureAtPixel(evt.pixel, | ||
| + | if (feature) { | ||
| + | //var coordinate = evt.coordinate; | ||
| + | content.innerHTML = '< | ||
| + | var coordinate = feature.getGeometry().getCoordinates(); | ||
| + | popoverlay.setPosition(coordinate); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | // | ||
| + | // | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== ソースコード ===== | ||
| + | <code javascript> | ||
| + | < | ||
| + | .mapdiv{height: | ||
| + | / | ||
| + | .ol-popup {position: absolute; | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup-closer {text-decoration: | ||
| + | .ol-popup-closer: | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | /* 外部CSSの読み込み */ | ||
| + | function cssLoad(cssFile){ | ||
| + | if(document.all){ | ||
| + | document.createStyleSheet(cssFile); | ||
| + | }else{ | ||
| + | var link = document.createElement(" | ||
| + | link.rel = " | ||
| + | link.href = cssFile; | ||
| + | link.type = " | ||
| + | document.getElementsByTagName(' | ||
| + | } | ||
| + | } | ||
| + | cssLoad(" | ||
| + | </ | ||
| + | <script src=" | ||
| + | |||
| + | <div id=" | ||
| + | <!-- 吹き出し用のDIV --> | ||
| + | <div id=" | ||
| + | <a href="#" | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | // | ||
| + | var container = document.getElementById(' | ||
| + | var content = document.getElementById(' | ||
| + | var closer = document.getElementById(' | ||
| + | var popoverlay = new ol.Overlay({ | ||
| + | element: container, | ||
| + | autoPan: true, | ||
| + | autoPanAnimation: | ||
| + | duration: 250 | ||
| + | } | ||
| + | }); | ||
| + | // | ||
| + | closer.onclick = function() { | ||
| + | popoverlay.setPosition(undefined); | ||
| + | closer.blur(); | ||
| + | return false; | ||
| + | }; | ||
| + | | ||
| + | //---- マップ表示 ---- | ||
| + | // | ||
| + | var view0 = new ol.View({center: | ||
| + | var map0 = new ol.Map({ | ||
| + | target: ' | ||
| + | layers: [new ol.layer.Tile({source: | ||
| + | overlays: [popoverlay], | ||
| + | view: view0, | ||
| + | controls: ol.control.defaults({attributionOptions: | ||
| + | }); | ||
| + | map0.addControl(new ol.control.ZoomSlider()); | ||
| + | |||
| + | //---- マーカー関連 ---- | ||
| + | var marker0=[]; | ||
| + | // | ||
| + | marker0[0] = new ol.Feature({ | ||
| + | geometry: new ol.geom.Point(ol.proj.fromLonLat([139.692, | ||
| + | name: '<a href=" | ||
| + | }); | ||
| + | map0.addLayer(new ol.layer.Vector({source: | ||
| + | features: [marker0[0]] | ||
| + | })})); | ||
| + | // | ||
| + | marker0[1] = new ol.Feature({ | ||
| + | geometry: new ol.geom.Point(ol.proj.fromLonLat([140.122, | ||
| + | name: '<a href=" | ||
| + | }); | ||
| + | map0.addLayer(new ol.layer.Vector({source: | ||
| + | features: [marker0[1]] | ||
| + | })})); | ||
| + | |||
| + | // | ||
| + | map0.on(' | ||
| + | var feature = map0.forEachFeatureAtPixel(evt.pixel, | ||
| + | if (feature) { | ||
| + | content.innerHTML = '< | ||
| + | var coordinate = feature.getGeometry().getCoordinates(); | ||
| + | popoverlay.setPosition(coordinate); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== 備考 ===== | ||
| + | |||
| + | 0.吹き出し以外の部分は[[osm4_ol_marker]]など確認して下さい。 | ||
| + | |||
| + | 1.GoogleMapと違い吹き出しは自分でdivを用意しなければならないので、スタイルとdivを用意します | ||
| + | |||
| + | <code css> | ||
| + | / | ||
| + | .ol-popup {position: absolute; | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup: | ||
| + | .ol-popup-closer {text-decoration: | ||
| + | .ol-popup-closer: | ||
| + | </ | ||
| + | <code html> | ||
| + | <!-- マップ用DIVの次の行に、吹き出し用のDIVを追加 --> | ||
| + | <div id=" | ||
| + | <a href="#" | ||
| + | <div id=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 2.吹き出し用のオーバーレイの準備と閉じるボタンを押した時の動作を設定 | ||
| + | |||
| + | <code javascript> | ||
| + | // | ||
| + | var container = document.getElementById(' | ||
| + | var content = document.getElementById(' | ||
| + | var closer = document.getElementById(' | ||
| + | var popoverlay = new ol.Overlay({ | ||
| + | element: container, | ||
| + | autoPan: true, | ||
| + | autoPanAnimation: | ||
| + | duration: 250 | ||
| + | } | ||
| + | }); | ||
| + | // | ||
| + | closer.onclick = function() { | ||
| + | popoverlay.setPosition(undefined); | ||
| + | closer.blur(); | ||
| + | return false; | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | 3.マップのオーバーレイを追加 | ||
| + | < | ||
| + | overlays: [popoverlay], | ||
| + | </ | ||
| + | |||
| + | 4.マーカー設定に表示するテキストを追加、HTMLも使えます | ||
| + | < | ||
| + | name: '<a href=" | ||
| + | </ | ||
| + | |||
| + | 5.吹き出しを表示するためのクリックイベントを追加、クリックするとマーカー上か判断してマーカー上ならdivの内容を書き換えてマーカーのある座標に吹き出しを表示します。 | ||
| + | <code javascript> | ||
| + | // | ||
| + | map0.on(' | ||
| + | var feature = map0.forEachFeatureAtPixel(evt.pixel, | ||
| + | if (feature) { | ||
| + | content.innerHTML = '< | ||
| + | var coordinate = feature.getGeometry().getCoordinates(); | ||
| + | popoverlay.setPosition(coordinate); | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | ---- | ||
| + | [[start]]>[[programming_start]] | ||
