「Google Mapsを用いた地図表示」のカスタマイズについて
「Google Mapsを用いた地図表示」のカスタマイズについて
いつもお世話になってます。
http://cms.al-design.jp/sample/maplog/maplog_map.php
↑
こちらのようなサイトを作成したいと思っているのですが、
マーカーをクリックすると吹き出しを表示するのではなく、
マウスオンで吹き出しを表示し、クリックするとエントリページにジャンプるすようにしたいと思っています。
このようにする場合、どのように設定すればよいのでしょうか?
CMSデザイナーのサポート範囲外なのかもしれませんが、
もしよろしければ教えてくださいませ。
〜以下、追記です。〜
また、左側の地点名につきましても、クリックすると地図上に吹き出しが現れ、
さらに吹き出し内のURLをクリックすることによりページにジャンプしますよね。
これですと、該当ページへ移動する手間がかなり増えるため、
目的のページへの誘導率が低くなってしまうような気がします。
そこで、下記のようなことは可能でしょうか?
・地点名にマウスオンすると、地図上の該当地点に吹き出し表示
・地点名からマウスアウトすると吹き出しが消える
・地点名をクリックすると、そのまま該当エントリページにジャンプ
また、最初は地図上にはマーカーは表示されておらず、
地点名にマウスオンするとマーカーが表示されるという形も可能でしょうか?
どんどんCMSD本来の機能とは離れてきたでしょうか…。
可能な範囲でかまいませんの、ご教授よろしくお願いします。
http://cms.al-design.jp/sample/maplog/maplog_map.php
↑
こちらのようなサイトを作成したいと思っているのですが、
マーカーをクリックすると吹き出しを表示するのではなく、
マウスオンで吹き出しを表示し、クリックするとエントリページにジャンプるすようにしたいと思っています。
このようにする場合、どのように設定すればよいのでしょうか?
CMSデザイナーのサポート範囲外なのかもしれませんが、
もしよろしければ教えてくださいませ。
〜以下、追記です。〜
また、左側の地点名につきましても、クリックすると地図上に吹き出しが現れ、
さらに吹き出し内のURLをクリックすることによりページにジャンプしますよね。
これですと、該当ページへ移動する手間がかなり増えるため、
目的のページへの誘導率が低くなってしまうような気がします。
そこで、下記のようなことは可能でしょうか?
・地点名にマウスオンすると、地図上の該当地点に吹き出し表示
・地点名からマウスアウトすると吹き出しが消える
・地点名をクリックすると、そのまま該当エントリページにジャンプ
また、最初は地図上にはマーカーは表示されておらず、
地点名にマウスオンするとマーカーが表示されるという形も可能でしょうか?
どんどんCMSD本来の機能とは離れてきたでしょうか…。
可能な範囲でかまいませんの、ご教授よろしくお願いします。
Re: 「Google Mapsを用いた地図表示」のカスタマイズについて
bcacsatoさん、いつもお世話になっております。
ご希望の動作は問題なく可能かと思いますが、JavaScriptに多少慣れている
必要がございます。また、現状のサンプルからの変更となりますと、割と大掛かり
な変更となります。
まず、マーカー側から説明させて頂きます。
(1-1) マーカーの上にマウスを持ってきた時点で吹き出しを表示。
現状では、head要素の中のscript要素の中で、吹き出し表示処理(showMaker)
を実行しています。
ここを、clickイベントではなく、makerのmouseoverイベントでshowMaker
を実行するように修正します。
これは、
を、
に変更すればOKです。
(1-2) マーカークリック時にエントリページへジャンプする。
現状、この処理は存在しませんので、新しく作る必要があります。
上記のマーカー表示イベントハンドラの定義部分と並列に、エントリページ
表示処理を記述します。エントリページのファイル名を「entrydetail.php」と
仮定します。
この処理を、makerのmouseoverイベントに割り当てます。
(1-3) マーカーからマウスアウトすると、吹き出しが消える。
同様に、mouseout時のイベントハンドラを作り、それをGEvent.addListner
を使ってmouseoutイベントに割当てます。
マーカーについてはこれでOKです。
次に、左側に並んでいる各リンクに対する処理を記述します。
現状では、リンクのクリック時に吹き出しを表示しています。
この部分です。
onclickイベントではjumpToEnterを、onmouseoverにはshowMakerを、
onmouseoutにはcloseInfoWindowを実行します。
(2-1) 見出しの上にマウスカーソルを持ってきた時に吹き出しを表示する。
(2-2) 見出しをクリックした時にエントリ詳細ページへジャンプする。
(2-3) 見出しからマウスカーソルが外れた時に情報ウィンドウを閉じる。
以上です。
まとめると、makeMaker関数は次のようになります。
ちょっと、実際に実行して確認する時間が取れなかったのですが、おおむねこの
ような手順で動くと思います。
うまく動かなかった場合はご連絡頂ければ幸いです。
ご希望の動作は問題なく可能かと思いますが、JavaScriptに多少慣れている
必要がございます。また、現状のサンプルからの変更となりますと、割と大掛かり
な変更となります。
まず、マーカー側から説明させて頂きます。
(1-1) マーカーの上にマウスを持ってきた時点で吹き出しを表示。
現状では、head要素の中のscript要素の中で、吹き出し表示処理(showMaker)
を実行しています。
コード: 全て選択
// マーカー表示イベントハンドラ
var showMarker = function(){
// マーカーを地図の中央に持ってきて、情報ウィンドウを表示する。
marker.openInfoWindowHtml( '<div class="marker_data_html"><h2>' + cmsdVars.d( 'title' + mapdata.eid ).innerHTML + '</h2>'
+ '<p>' + cmsdVars.d( 'description' + mapdata.eid ).innerHTML + '</p></div>' );
};
// clickイベントハンドラを設定
GEvent.addListener( marker, "click", showMarker );
を実行するように修正します。
これは、
コード: 全て選択
// clickイベントハンドラを設定
GEvent.addListener( marker, "click", showMarker );
コード: 全て選択
// mouseoverイベントハンドラを設定
GEvent.addListener( marker, "mouseover", showMarker );
(1-2) マーカークリック時にエントリページへジャンプする。
現状、この処理は存在しませんので、新しく作る必要があります。
コード: 全て選択
// マーカー表示イベントハンドラ
var showMarker = function(){
表示処理を記述します。エントリページのファイル名を「entrydetail.php」と
仮定します。
コード: 全て選択
// エントリ詳細ページへジャンプ
var jumpToEntry = function(){
window.location = 'entrydetail.php?eid=' + mapdata.eid;
}
コード: 全て選択
// clickイベントハンドラを設定
GEvent.addListener( marker, "click", jumpToEntry );
同様に、mouseout時のイベントハンドラを作り、それをGEvent.addListner
を使ってmouseoutイベントに割当てます。
コード: 全て選択
// 吹き出しを消す
var closeInfoWindow = function(){
marker.closeInfoWindow();
}
// mouseoutイベントハンドラを設定
GEvent.addListener( marker, "mouseout", closeInfoWindow );
次に、左側に並んでいる各リンクに対する処理を記述します。
現状では、リンクのクリック時に吹き出しを表示しています。
この部分です。
コード: 全て選択
// エントリ見出しをクリックした際のイベントハンドラを定義・設定
cmsdVars.d( "title" + mapdata.eid ).onclick = function(){
// zoomを設定
map.setCenter( new GLatLng( mapdata.lat, mapdata.lng ), mapdata.zoom );
// マーカー表示
showMarker();
return false;
}
onmouseoutにはcloseInfoWindowを実行します。
(2-1) 見出しの上にマウスカーソルを持ってきた時に吹き出しを表示する。
コード: 全て選択
// 見出しの上にカーソルを持ってきた時に吹き出し表示
cmsdVars.d( "title" + mapdata.eid ).onmouseover = function(){
// zoomを設定
map.setCenter( new GLatLng( mapdata.lat, mapdata.lng ), mapdata.zoom );
// マーカー表示
showMarker();
return false;
}
コード: 全て選択
// 見出しクリック時にエントリ詳細ページへジャンプ
cmsdVars.d( "title" + mapdata.eid ).onclick = function(){
jumpToEntry();
return false;
}
コード: 全て選択
// 見出しからマウスカーソルが外れた時に情報ウィンドウを閉じる
cmsdVars.d( "title" + mapdata.eid ).onmouseout = function(){
closeInfoWindow();
return false;
}
まとめると、makeMaker関数は次のようになります。
コード: 全て選択
// マーカーを生成して地図に表示する
function makeMarker( map, mapdata )
{
// マーカー生成
var marker = new GMarker( new GLatLng( mapdata.lat, mapdata.lng ) );
map.addOverlay( marker );
// マーカー表示イベントハンドラ
var showMarker = function(){
// マーカーを地図の中央に持ってきて、情報ウィンドウを表示する。
marker.openInfoWindowHtml( '<div class="marker_data_html"><h2>' + cmsdVars.d( 'title' + mapdata.eid ).innerHTML + '</h2>'
+ '<p>' + cmsdVars.d( 'description' + mapdata.eid ).innerHTML + '</p></div>' );
};
// mouseoverイベントハンドラを設定
GEvent.addListener( marker, "mouseover", showMarker );
// エントリ詳細ページへジャンプ
var jumpToEntry = function(){
window.location = 'entrydetail.php?eid=' + mapdata.eid;
}
// clickイベントハンドラを設定
GEvent.addListener( marker, "click", jumpToEntry );
// 吹き出しを消す
var closeInfoWindow = function(){
marker.closeInfoWindow();
}
// mouseoutイベントハンドラを設定
GEvent.addListener( marker, "mouseout", closeInfoWindow );
// エントリ見出しをクリックした際のイベントハンドラを定義・設定
cmsdVars.d( "title" + mapdata.eid ).onclick = function(){
// zoomを設定
map.setCenter( new GLatLng( mapdata.lat, mapdata.lng ), mapdata.zoom );
// マーカー表示
showMarker();
return false;
}
// 見出しの上にカーソルを持ってきた時に吹き出し表示
cmsdVars.d( "title" + mapdata.eid ).onmouseover = function(){
// zoomを設定
map.setCenter( new GLatLng( mapdata.lat, mapdata.lng ), mapdata.zoom );
// マーカー表示
showMarker();
return false;
}
// 見出しクリック時にエントリ詳細ページへジャンプ
cmsdVars.d( "title" + mapdata.eid ).onclick = function(){
jumpToEntry();
return false;
}
// 見出しからマウスカーソルが外れた時に情報ウィンドウを閉じる
cmsdVars.d( "title" + mapdata.eid ).onmouseout = function(){
closeInfoWindow();
return false;
}
}
ような手順で動くと思います。
うまく動かなかった場合はご連絡頂ければ幸いです。
最後に編集したユーザー webmaster on 2008年8月27日(水) 17:14 [ 編集 2 回目 ]
webmasterさま、詳しい解説ありがとうございます!
ご提示いただいたソースを使用したところ、概ね希望通りの動きが実現できましたが、
見出し、マーカーともに、クリックするとNot Foundとなってしまいます。
しかし、URLに間違いはないようで、右クリック→ショートカットのコピーをして
ブラウザに貼り付けると、ちゃんと表示されます。
何が悪いのでしょうか…。もし分かればご教示くださいませ。
Googleマップとの連携機能はとても便利なので、
そのうち、より詳しいサンプルを作成していただけますと嬉しいです。
(たとえは、管理画面から各エントリのマーカー画像を設定する方法など)
それと、↓こちらの件も、ご検討いただけますと幸いです。
http://cms.al-design.jp/phpbb/viewtopic.php?t=1138
よろしくお願いいたしますm(_ _)m
ご提示いただいたソースを使用したところ、概ね希望通りの動きが実現できましたが、
見出し、マーカーともに、クリックするとNot Foundとなってしまいます。
しかし、URLに間違いはないようで、右クリック→ショートカットのコピーをして
ブラウザに貼り付けると、ちゃんと表示されます。
何が悪いのでしょうか…。もし分かればご教示くださいませ。
Googleマップとの連携機能はとても便利なので、
そのうち、より詳しいサンプルを作成していただけますと嬉しいです。
(たとえは、管理画面から各エントリのマーカー画像を設定する方法など)
それと、↓こちらの件も、ご検討いただけますと幸いです。
http://cms.al-design.jp/phpbb/viewtopic.php?t=1138
よろしくお願いいたしますm(_ _)m
bcacsatoさん、申し訳ありません、ちょっと今手元にJavaScriptの仕様書が
ない為、後ほどまた確認させて頂きますが、
で置き換えてみて下さい。
携帯向けGoogle Mapsについても、ちょっと見てみたいと思います。
いつも情報提供ありがとうございます。m(__)m
ない為、後ほどまた確認させて頂きますが、
コード: 全て選択
// エントリ詳細ページへジャンプ
var jumpToEntry = function(){
window.location.href = 'entrydetail.php?eid=' + mapdata.eid;
}
携帯向けGoogle Mapsについても、ちょっと見てみたいと思います。
いつも情報提供ありがとうございます。m(__)m
こちらで同じような仕組みを再現してみましたが、問題なく画面遷移します・・。
bcacsatoさんのところで、以下のサンプルをtest1.htmlという名前で保存して
ブラウザで保存し、表示される文字列をクリックして頂いてもよろしいでしょうか。
クリック後、http://cms.al-design.jp/newsentry.php?eid=00083 が表示
されるはずなのですが…。
弊社環境では問題なく表示されます。Windows XP SP3のFirefox3、IE6で
確認しています。
bcacsatoさんのところで、以下のサンプルをtest1.htmlという名前で保存して
ブラウザで保存し、表示される文字列をクリックして頂いてもよろしいでしょうか。
コード: 全て選択
<html>
<head>
<title>test 1</title>
<script type="text/javascript">
function jumpToLink()
{
window.location.href = 'http://cms.al-design.jp/newsentry.php?eid=00083';
return false;
}
</script>
</head>
<body>
<div onclick="jumpToLink()">click to show CMS Designer site.</div>
</body>
</html>
されるはずなのですが…。
弊社環境では問題なく表示されます。Windows XP SP3のFirefox3、IE6で
確認しています。
bcacsatoさん、何度もお手数をおかけしております。
メールでご連絡頂いた実際のサイトを拝見したところ、
上記の部分がサンプルそのままになっておりました。
私の説明不足だったので申し訳ないのですが、上記の「entrydetail.php」
は架空のページ名なので、bcacsatoさんの環境に合わせて詳細表示用ページ名
と差し替えていただく必要がございます。
何度も申し訳ありませんが、よろしくお願い致します。
メールでご連絡頂いた実際のサイトを拝見したところ、
コード: 全て選択
// エントリ詳細ページへジャンプ
var jumpToEntry = function(){
window.location.href = 'entrydetail.php?eid=' + mapdata.eid;
}
私の説明不足だったので申し訳ないのですが、上記の「entrydetail.php」
は架空のページ名なので、bcacsatoさんの環境に合わせて詳細表示用ページ名
と差し替えていただく必要がございます。
何度も申し訳ありませんが、よろしくお願い致します。