gmap3_cross
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| gmap3_cross [2018/05/26 18:40] – 管理者 | gmap3_cross [2018/05/26 21:33] (現在) – [ソースコード] 管理者 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | {{tag> | ||
| + | [[start]]>[[programming_start]] | ||
| + | ====== GoogleMaps APIv3 地図の中央に十字アイコン表示 ====== | ||
| + | 地図の中心位置がわかるように十字アイコンを表示します。 | ||
| + | |||
| + | APIを使う方法をHTML+CSSを使う方法の2種類あります。 | ||
| + | |||
| + | ---- | ||
| + | ===== APIを使う方法 ===== | ||
| + | 地図の移動に合わせてカスタムマーカーを移動させる方法を使っています。APIで動作しているので正確に中央を表示しますが移動時に十字アイコンが遅れて追従します。 | ||
| + | |||
| + | ==== サンプルデモ ==== | ||
| + | 地図の移動に合わせて中央の十字アイコンが動きます。 | ||
| + | |||
| + | < | ||
| + | < | ||
| + | #mapdiv1 {width: | ||
| + | </ | ||
| + | <div id=" | ||
| + | < | ||
| + | var map1; | ||
| + | function initMap1() { | ||
| + | map1 = new google.maps.Map(document.getElementById(' | ||
| + | center: {lat: 35.6895326, lng: 139.6908937}, | ||
| + | zoom: 8 | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | var tgt_marker = new google.maps.Marker({ | ||
| + | position: {lat: 0, lng: 0}, | ||
| + | map: map1, | ||
| + | icon: { | ||
| + | url: ' | ||
| + | size: new google.maps.Size(32, | ||
| + | origin: new google.maps.Point(0, | ||
| + | scaledSize: new google.maps.Size(32, | ||
| + | anchor: new google.maps.Point(16, | ||
| + | }, | ||
| + | clickable: false, /* クリック不可 */ | ||
| + | zIndex: 0 | ||
| + | }); | ||
| + | // | ||
| + | tgt_marker.setMap(map1); | ||
| + | |||
| + | // | ||
| + | google.maps.event.addListener( map1 ,' | ||
| + | var pos = map1.getCenter(); | ||
| + | tgt_marker.setPosition(pos); | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | initMap2(); | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | <script src=" | ||
| + | </ | ||
| + | |||
| + | ==== ソースコード ==== | ||
| + | <code javascript> | ||
| + | < | ||
| + | #mapdiv {width: | ||
| + | </ | ||
| + | <div id=" | ||
| + | < | ||
| + | var map; | ||
| + | function initMap1() { | ||
| + | map = new google.maps.Map(document.getElementById(' | ||
| + | center: {lat: 35.6895326, lng: 139.6908937}, | ||
| + | zoom: 8 | ||
| + | }); | ||
| + | |||
| + | // | ||
| + | var tgt_marker = new google.maps.Marker({ | ||
| + | position: {lat: 0, lng: 0}, | ||
| + | map: map, | ||
| + | icon: { | ||
| + | url: ' | ||
| + | size: new google.maps.Size(32, | ||
| + | origin: new google.maps.Point(0, | ||
| + | scaledSize: new google.maps.Size(32, | ||
| + | anchor: new google.maps.Point(16, | ||
| + | }, | ||
| + | clickable: false, /* クリック不可 */ | ||
| + | zIndex: 0 | ||
| + | }); | ||
| + | // | ||
| + | tgt_marker.setMap(map); | ||
| + | |||
| + | // | ||
| + | google.maps.event.addListener( map ,' | ||
| + | var pos = map.getCenter(); | ||
| + | tgt_marker.setPosition(pos); | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | <script src=" | ||
| + | </ | ||
| + | |||
| + | ==== 備考 ==== | ||
| + | 1.十字アイコンの画像を表示する部分です。 | ||
| + | <code javascript> | ||
| + | // | ||
| + | var tgt_marker = new google.maps.Marker({ | ||
| + | position: {lat: 0, lng: 0}, | ||
| + | map: map, | ||
| + | icon: { | ||
| + | url: ' | ||
| + | origin: new google.maps.Point(0, | ||
| + | size: new google.maps.Size(32, | ||
| + | scaledSize: new google.maps.Size(32, | ||
| + | anchor: new google.maps.Point(16, | ||
| + | }, | ||
| + | clickable: false, /* クリック不可 */ | ||
| + | zIndex: 0 | ||
| + | }); | ||
| + | // | ||
| + | tgt_marker.setMap(map1); | ||
| + | </ | ||
| + | |||
| + | 2.十字アイコンを地図に合わせて移動させる2つの設定です。マップの変更を検知すると中央座標を取得してターゲットスコープの座標を更新します。 | ||
| + | |||
| + | 移動中は「bounds_changed」イベントが繰り返し何度も処理されるため高負荷(クライアント側のみ)となります。低スペックPC向けのWebサイトの場合は「idle」イベントに変更すると操作後の低負荷時にイベントが発生するので負荷が減ります。 | ||
| + | |||
| + | <code javascript> | ||
| + | // | ||
| + | google.maps.event.addListener( map ,' | ||
| + | var pos = map.getCenter(); | ||
| + | tgt_marker.setPosition(pos); | ||
| + | }); | ||
| + | </ | ||
| + | ---- | ||
| + | ===== HTML+CSSを使う方法 ===== | ||
| + | HTMLとCSSを使いマップの上に画像を重ねているだけです。重ねて表示する方法はいくつかありますがこの例ではposition: | ||
| + | |||
| + | ==== サンプルデモ ==== | ||
| + | 地図の移動に合わせて中央の十字アイコンが動きます。 | ||
| + | |||
| + | < | ||
| + | < | ||
| + | #mapdiv2 {width: | ||
| + | # | ||
| + | # | ||
| + | width: | ||
| + | top: | ||
| + | background-image: | ||
| + | background-position: | ||
| + | background-repeat: | ||
| + | pointer-events: | ||
| + | } | ||
| + | </ | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | var map2; | ||
| + | function initMap2() { | ||
| + | map2 = new google.maps.Map(document.getElementById(' | ||
| + | center: {lat: 35.6895326, lng: 139.6908937}, | ||
| + | zoom: 8 | ||
| + | }); | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== ソースコード ==== | ||
| + | <code javascript> | ||
| + | < | ||
| + | # | ||
| + | /* 重ねるための親div */ | ||
| + | #tgt_wrap{ | ||
| + | position: | ||
| + | } | ||
| + | /* 重ねるアイコンのdiv */ | ||
| + | #tgt{ | ||
| + | position: | ||
| + | width: | ||
| + | top: | ||
| + | background-image: | ||
| + | background-position: | ||
| + | background-repeat: | ||
| + | pointer-events: | ||
| + | } | ||
| + | </ | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | </ | ||
| + | < | ||
| + | var map; | ||
| + | function initMap1() { | ||
| + | map = new google.maps.Map(document.getElementById(' | ||
| + | center: {lat: 35.6895326, lng: 139.6908937}, | ||
| + | zoom: 8 | ||
| + | }); | ||
| + | } | ||
| + | </ | ||
| + | <script src=" | ||
| + | </ | ||
| + | ==== 備考 ==== | ||
| + | 1.マップを表示するdiv(id=mapdiv)の直後にスコープを表示するdiv(id=tgt)を設置し、その2つをdiv(id=tgt_wrap)で囲みます。 | ||
| + | |||
| + | <code html> | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | <div id=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 2.CSSで、マップと同じ大きさのdivの中心にスコープを表示しマップの上に重ねて表示します。重ねるだけだとクリック操作が上側にあるスコープのdivが受け取ってしまいマップが動かないのでpointer-events: | ||
| + | <code css> | ||
| + | #tgt_wrap{ | ||
| + | position: | ||
| + | } | ||
| + | #tgt{ | ||
| + | position: | ||
| + | width: | ||
| + | top: | ||
| + | background-image: | ||
| + | background-position: | ||
| + | background-repeat: | ||
| + | pointer-events: | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | [[start]]>[[programming_start]] | ||
