地図䞊のマヌカヌを条件により色を倉えるこず、吹き出しをクリックで䜜る方策に関しお

1,725 views
Skip to first unread message

ぺた

unread,
Dec 2, 2012, 10:15:24 AM12/2/12
to google-map...@googlegroups.com
はじめたしお、よろしくお願い臎したす。
以䞋URLのサンプルコヌドを参考にさせお頂き、堎所を固定し、そこに固有のIDを䞎え、固有の堎所にはマヌカヌが付き、そこをクリックするず画像やメモが衚瀺されるモノが䜜りたいず考えおいたす。たた、固有IDを指定し、その他の情報画像、メモを曎新させたいずも考えおいたす。
プログラムの経隓は皆無に近いです。しかし、今回は勉匷で䞊述したようなマむナヌチェンゞが出来ないか詊そうずしおいたす。
蚀い蚳ではありたすが、質問自䜓拙い箇所があるかず思いたすが、ご容赊䞋さい。
以䞋二点を解決すべく取り組んでいたす。
・デフォルトはマヌカヌが地図䞊に衚瀺され、そのマヌカヌをクリックするず情報写真、メモが衚瀺されるこず
サンプル䞋蚘を基にマヌカヌを぀けるこずは出来たした。
なので、その点だけはクリアしおいるのですが、代わりに元々の機胜にあった吹き出しが出なくなりたした。
マヌカヌをクリックするず吹き出しが出る、ずいうサンプルは幟぀かあり、それは詊しおはいたす。しかし、私自身正しい方向性で䜜れおいないためか想定通りの動きをしおいない状態です。マヌカヌだけが衚瀺され、クリックしおも吹き出しは衚瀺されたせん。
 
・マヌカヌの色を条件によっお倉えるこず
ただマヌカヌを぀けるだけではなく、䟋えばある特定の堎所に喫煙堎所がある→青、喫煙堎所は無い→赀ずいうように条件で色を倉えたいのです。
攟射線量を衚瀺するサむトでたさにマヌカヌの色を倉えお衚瀺されおいるので、出来るだろう思っおいたす。
尚、緯床経床、メモ、画像情報はGoogle App Engineに持たせおいたす。
 
皆様のお知恵を拝借させお頂ければ幞甚です。
お忙しい䞭、お時間を割いお読んで頂きありがずうございたした。
 
※次のファむルの {% for image in images %}以䞋で修正が必芁ず思っおおりたすが、手がずたっおいたす。
<!-- -*- coding: utf-8 -*- -->
<script type="text/javascript">
var map;
var zoomLevel = 5;
var infoWindows = new Array();
var preId = null;
function onZoomChanged() {
 map.setCenter(infoWindows[preId].getPosition());
}
function onListItemClicked(id) {
 if (preId != null) {
  infoWindows[preId].close();
 }
 map.setCenter(infoWindows[id].getPosition());
 infoWindows[id].open(map);
 preId = id;
}
 
function initialize() {
 var latlng = new google.maps.LatLng(35.69836, 139.773104);
 var myOptions = {
 zoom: zoomLevel,
 center: latlng,
 mapTypeId: google.maps.MapTypeId.ROADMAP
 };
 map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 google.maps.event.addListener(map, 'zoom_changed', onZoomChanged);
 {% for image in images %}
 var infoLatLng = new google.maps.LatLng({{image.geo.lat}}, {{image.geo.lon}});
 var infoWindow = new google.maps.InfoWindow({
  content: '<div><a href="/img?key={{image.key}}"><img src="/img?key={{image.key}}&width=100" align="left"></a></div><div>{{image.author}}<br></div><br><div>{{image.title}}</div><br><div>{{image.place}}</div><br><div>{{image.createdTime}} (JST)</div><br><div>{{image.comment}}</div><br><br><div>コメント/div><br>',
  position: infoLatLng
  });
 infoWindows["{{image.key}}"] = infoWindow;
 if (preId == null) {
  preId = "{{image.key}}";
  infoWindows[preId].open(map);
 }
 {% endfor %}
}
</script>

Masashi.K

unread,
Dec 2, 2012, 5:50:50 PM12/2/12
to Google-Maps-API-Japan
ぺたさん

頂いた゜ヌスコヌドを元に、䜜り替えおみたした。
App Engineにデプロむたでしおはいないのですが、たぶん動くでしょう。

Google Maps APIの機胜そのものに、マヌカヌの色を倉える機胜はありたせん。
マヌカヌの画像を自分で甚意する必芁がありたす。

各個別のマヌカヌごずに情報りィンドりの内容を倉曎する方法ですが、
createMarker() ずいう関数の䞭で行なっおいたす。
関数の䞭でHTMLの文字列を䜜成するこずで、マヌカヌをクリックした時に
それぞれの内容を維持/衚瀺するようになっおいたす。

<script type="text/javascript">
var map;
var zoomLevel = 5;
var infoWindow = null;
var markerDic = {};
var preId = null;

//ズヌムレベルが倉曎になったら実行する
function onZoomChanged() {
//最埌にクリックされたマヌカヌの䜍眮を䞭心䜍眮にする
map.setCenter(markerDic[preId].getPosition());
}


//リストがクリックされたら実行する
function onListItemClicked(id) {
//マヌカヌを擬䌌クリックする
google.maps.event.trigger(markerDic[id], "click");
}


function initialize() {
//地図を衚瀺するのに必芁なパラメヌタ
var latlng = new google.maps.LatLng(35.69836, 139.773104);
var myOptions = {
zoom : zoomLevel,
center : latlng,
mapTypeId : google.maps.MapTypeId.ROADMAP
};


//地図を䜜成する
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

//情報りィンドりを1぀だけ䜜成する
infoWindow = new google.maps.InfoWindow();

//ズヌムレベルが倉曎になったら、onZoomChanged を実行する
google.maps.event.addListener(map, 'zoom_changed', onZoomChanged);

//カテゎリに応じた画像を自分で甚意する必芁がありたす
var categories = {
"red" : "/img/markers/red.png",
"blue" : "/img/markers/blue.png"
};

{% for image in images %}
//マヌカヌを䜜成する関数(createMarker)にデヌタを枡す。
//関数からは、䜜成されたマヌカヌが返される
var marker = createMarker({
map : map,
position : new google.maps.LatLng({{image.geo.lat}}, {{image.geo.lon}}),
image_key : "{{image.key}}",
image_author : "{{image.author}}",
image_title : "{{image.title}}",
image_place : "{{image.place}}",
image_createdTime : "{{image.createdTime}} JST",
image_comment : "{{image.comment}}",

//カテゎリの条件によっお、画像が倉わるようにする
image : categories["blue"]
});

//マヌカヌの配列に远加する
markerDic["{{image.key}}"] = marker;

if (prefId == null) {
//䞀番最初に䜜成したマヌカヌを擬䌌クリックするこずで、情報りィンドりを開く
google.maps.event.trigger(marker, "click");
}
{% endfor %}
}

function createMarker(options) {
//HTMLの文字列を䜜成する
var html = [
'<div>',
'<a href="/img?key=' + options.image_key + '">',
'<img src="/img?key=' + options.image_key + '&width=100" align="left">',
'</a>',
'</div>',
'<div>',
'<div>' + options.image_author + '<br></div><br>',
'<div>' + options.image_title + '</div><br>',
'<div>' + options.image_place + '</div><br>',
'<div>' + options.image_createdTime + '</div><br>',
'<div>' + options.image_comment + '</div><br>',
'<br><br><div>コメント</div><br>',
'</div>'
].join("");


//マヌカヌを䜜成する
var marker = new google.maps.Marker({
map : options.map,
image : options.image

});

//クリックされたら、情報りィンドりを開く
google.maps.event.addListener(marker, "click", function() {
//最埌にクリックされたキヌを蚘憶しおおく
prefId = options.image_key;

//情報りィンドりの内容を曎新する
infoWindow.setContent(html);

//衚瀺する
infoWindow.open(options.map, marker);x
});
return marker;x
}
</script>

ぺた

unread,
Dec 3, 2012, 12:10:14 AM12/3/12
to google-map...@googlegroups.com
Masashi様

早々にコヌドをお䜜り頂き、ありがずうございたした。
マヌカヌは自分で甚意する必芁があったのですね、単玔に色を倉えられるずばかり思っおいたので勉匷になりたした。
早速䜜成頂いたコヌド、マヌカヌを甚意し、詊しおいたす。
どうもapp.yamlの蚭定なのか、マヌカヌの保存堎所が正しくないのか、想定しおいる動きにはなっおいたせんが、基瀎郚分だず思いたすので、調べお、詊しおみたす。

Masashi様には、お忙しい䞭、お時間を割いおいただき、重ね重ねではありたすが、誠にありがずうございたした。このコヌド自䜓、勉匷になりたすので、正垞動䜜した暁にはご報告いたしたす。


2012幎12月3日月曜日 7時50分50秒 UTC+9 Masashi.K:

ぺた

unread,
Dec 6, 2012, 4:55:04 AM12/6/12
to google-map...@googlegroups.com
Masashi様

珟状ですが、想定通りには動いおおりたせん。
自分で調べお解決する予定でしたが、思うようには行かず、再床お知恵を拝借させお頂きたく、投皿した次第です。
ひずたず、マヌカヌ吹き出しが出来ないか、詊しおいたす。

・マヌカヌを倉曎させず、マヌカヌ吹き出しが出るか詊したのですが、NGでした。
 image : categories["blue"] のコメントアりト
・マヌカヌだけを衚瀺させるこずもしおみたしたが、NGでした。
マヌカヌだけを衚瀺させられた以前のコヌドに以䞋の郚分を眮き換えお、詊すずマヌカヌは䞀぀きりしか衚瀺されない状態ずなっおしたったりしおいたす。
------倉曎箇所------

      var marker = createMarker({
        map : map,
        position : new google.maps.LatLng({{image.geo.lat}}, {{image.geo.lon}}),
・マヌカヌだけを衚瀺させお、 function initialize() { 以䞋を削陀するずマヌカヌだけは衚瀺されたした。

その他、マヌカヌ吹き出しで埗られた情報を幟぀か抜出し、トラむしおいるもののゎヌルはただ未明です。
䞊述したしたように幟぀かのサむトを読んではいるものの、理解が出来おいないせいか、誀解をしたたた䜜成頂いたコヌドに手を出しおいる感は吊めたせん。
どの蟺りが肝になるのか、アドバむス、参考になる資料、ご指摘点等ございたしたら頂ければ幞甚です。
再床お手数及びお時間を割いお頂くこずずなり、申し蚳ございたせん。、


2012幎12月3日月曜日 14時10分14秒 UTC+9 ぺた:

ぺた

unread,
Dec 14, 2012, 1:04:45 AM12/14/12
to google-map...@googlegroups.com
解決出来たした。
Masashi様のコヌドを再床芋盎し、自分が圓初甚意したコヌドを芋盎し、どうやれば良いのか少々考え、幟぀かのサむトをめぐるこずでヒントを埗るこずが出来たした。
マヌカヌ吹き出し、ある条件でマヌカヌを倉曎する、いずれもクリア出来たしたずは蚀え、若干マヌカヌの䜍眮がずれおいるのでただただ道半ばではありたす。
クリアすべき項目はあるので、たた問い合わせをさせお頂くかもしれたせんが、その際は宜しくお願い臎したす。
今回の埡協力、誠にありがずうございたした。

2012幎12月6日朚曜日 18時55分04秒 UTC+9 ぺた:

Masashi.K

unread,
Dec 14, 2012, 2:56:29 AM12/14/12
to Google-Maps-API-Japan
ぺたさん

資料ずいう意味では、Google Maps APIプログラミング入門 改蚂2版 がオススメです。
プログラミングの初心者から䞭玚者向けに、倧量のサンプルコヌドず解説で説明しおいたす。

この機胜はなんなのか、各プロパティや定数がどうゆう意味を持぀のか、どうやっお䜿うのか、などを
培底的に解説しおいたす。
今日、Google 本瀟に行っおGoogle Maps チヌムの人達ず話をした時に
この本を芋せおきたしたけど、
「党機胜を培底的に解説しおいるのはすごいね英語で出しおくれよ」っお蚀っおくれたした。

ずいうこずで、もし宜しければどうぞ。

Google Maps APIプログラミング入門 改蚂2版
http://goo.gl/0edoY

On Dec 13, 10:04 pm, ぺた <demomaps...@gmail.com> wrote:
> 解決出来たした。
> Masashi様のコヌドを再床芋盎し、自分が圓初甚意したコヌドを芋盎し、どうやれば良いのか少々考え、幟぀かのサむトをめぐるこずでヒントを埗るこずが出来 たした。
Reply all
Reply to author
Forward
0 new messages