教えて下さい。同じ緯度経度の別情報をまとめるには?

1,689 views
Skip to first unread message

net aruko

unread,
Mar 22, 2010, 11:34:23 PM3/22/10
to Google-Maps-API-Japan
はじめまして。仕事でgooglemapをカスタマイズしなくてはなくて
いろいろな方の情報や本を見ておりました。。

地域の店舗情報を地図で表示することが目的で
店舗情報はMySQLを利用し管理しています。

googlemap apiを利用して、表示エリアを取得

phpに情報を渡し、そのエリア範囲内のデータをxmlで生成する。

xmlを解析。表示。

という流れで利用を考えており、ここまでの情報は見つけることができました。

ココで、問題がでまして、ビルなどにテナントを構える場合
同じ住所に複数店舗が存在することがあります。
その場合、同じ住所内のひとつの店舗しか、infoWindowに出てこないのです。

http://i-ll.jp/test/map/map.html

上記テストでサンプルをとってきて変えてみたのですが
赤坂見附と赤坂見附2が同じ経度緯度になっています。

マーカーをクリックすると、「赤坂見附2」の情報だけが表示されます。
サイドバーの情報からクリックすると個別に表示されます。

これを、マーカー、サイドバーの情報どれをクリックしても

ーーーーーーーーーーーーーーーー
|赤坂見附             |
|G05 Akasaka-mitsuke     |
| ------------ |
|赤坂見附2            |
|G65 Akasaka-mitsuke     |
| ------------ |

上記のように、infoWindowに二つの情報を続けて入れたいのですが
どうしたらよいでしょうか。
データーを引っ張るので、XMLを調整すればというのは厳しいです。

zpointが関係しているんだろうということは漠然とわかるのですが
具体的にどうしたらよいか、参考サイトやヒントなど教えて頂けないでしょうか?

Masashi.K

unread,
Mar 24, 2010, 2:33:32 AM3/24/10
to Google-Maps-API-Japan
net arukoさん

その場合は、
「PHP側で同じ緯度経度だったら情報ウィンドウの内容をまとめる」
みたいな処理をするのが普通ですよ。たぶん。

Message has been deleted

net aruko

unread,
Mar 25, 2010, 2:46:25 AM3/25/10
to Google-Maps-API-Japan
Masashi.K 様

ご返信ありがとうございます。
googlemapapiのことばかり、考えていてXMLファイルを生成するphp側で
操作することを考えておりませんでした。


それも一つの方法として、行ってみたいと思います。


が、もしajax側、javascript側での操作方法をご存知の方がいらっしゃいましたら
参考までに教えていただけたら幸いです。

W少年

unread,
Mar 26, 2010, 12:05:56 PM3/26/10
to Google-Maps-API-Japan
javascriptで実装するにしてもphpで実装するにしても気をつけないといけないことがあります。
xmlから得られるオブジェクトの構造がJSON形式で以下のようになっていたとします。
obj = {"data":[
{"lon":139.123456,"lat":35.567890,"name":"\u6771\u4eac\u90fd"},
{"lon":139.123457,"lat":35.567890,"name":"\u6771\u4eac\u90fd"},
{"lon":139.123456,"lat":35.567891,"name":"\u6771\u4eac\u90fd"},
{"lon":139.123457,"lat":35.567891,"name":"\u6771\u4eac\u90fd"}
]};
このobj.dataという配列の中の各々のオブジェクトの場所は本来同一の場所であるべきだろうというのは想像できますね。
このように同一区画が微妙に異なる座標で登録される場合もあるのでそれも合一しなければいけません。
まず、phpの段階でMySQLから取り出す際にORDER BYしないとかなり整理効率が落ちます。
このORDER BYをどのようにやるかが腕の見せ所でもありますが。
javascriptでもn個の要素があればn*(n-1)/2回の比較で座標をチェックできますが一般にphpでやるのより速度が落ちます。
もしやるとしたら経緯度の0.00001未満の誤差を無視する場合以下のようにします。
for (var i=0; i<obj.data.length; i++) {
for (var j=i+1; j<obj.data.length; j++) {
if (Math.abs(obj.data[i]-obj.data[j])<=Math.pow(10,-5)) {
//この中でデータを合一します
}
}
}
phpなら以下のようになるでしょう。
for ($i=0; $i<count($obj->data); $i++) {
for ($j=$i+1;$ j<count($obj->data); $j++) {
if (abs($obj->data[$i]-$obj->data[$j])<=pow(10,-5)) {
//この中でデータを合一します
}
}
}
これは、データが全くORDER BYされていない場合の方法ですが、ORDER BYによって多少比較回数を減らせます。

net aruko

unread,
Apr 2, 2010, 1:41:34 AM4/2/10
to Google-Maps-API-Japan
W少年様

サンプルを含め、ありがとうございます。

並べ替えorderby も考えて作っていきたいと思います。
ありがとうございました。


TK

unread,
Apr 9, 2010, 11:14:35 AM4/9/10
to Google-Maps-API-Japan

横からすみません。同じ問題で解決方法を探しており、こちらに辿りつきました。

> for (var i=0; i<obj.data.length; i++) {
> for (var j=i+1; j<obj.data.length; j++) {
> if (Math.abs(obj.data[i]-obj.data[j])<=Math.pow(10,-5)) {
> //この中でデータを合一します}
> }
> }

XMLを読み込んで表示したいのですが具体的に教えていただけますと助かります。

downloadUrl("data.xml", function(data) {
var markers = data.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
for (var j = i+1; j < markers.length; j++) {
if (Math.abs(markers[i]-markers[j]) <= Math.pow(10,-5)) {
var latlng = new
google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),

parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(markers[i].getAttribute("name"),
latlng);
}}}
});
}

上記ではマーカーが表示されなくなってしまいます。
コードはこれで合ってますでしょうか?

W少年

unread,
Apr 10, 2010, 7:40:45 PM4/10/10
to Google-Maps-API-Japan
> 上記ではマーカーが表示されなくなってしまいます。
多分そうなるでしょうね。
> コードはこれで合ってますでしょうか?
厳しいことを言いますが、あなたはこの処理で何をやらせたいのですか。
ソースコードを見てそれが伝わってこないので、それを考えながらコーディングすると自然とできるようになるはずです。

TK

unread,
Apr 14, 2010, 10:22:17 AM4/14/10
to Google-Maps-API-Japan

W少年さま返信ありがとうございます。
プログラムの基本的な知識が乏しいため、考えてみましたがさっぱり分かりませんでした。
せっかくご指導いただいたのに申し訳ありません。

かわりにサンプルを見つけましたので、net arukoさんの参考になればと思い、報告します。
http://gmaps-samples.googlecode.com/svn/trunk/manymarkers/markerhash.html

これを元に、v3用のファンクションに書き換えて試してみたいと思います。

net aruko

unread,
Apr 26, 2010, 8:48:38 PM4/26/10
to Google-Maps-API-Japan
TK様

しばらく、こちらを拝見しておらずご返信遅れましたことお詫び申し上げます。
そしてわざわざサンプルを提示していただき本当にありがとうございます。
私の探していたものです!!
これで、やっと理想とするものが実現できそうです。本当にありがとうございました。



On 4月14日, 午後11:22, TK <taketo.ogu...@gmail.com> wrote:
> W少年さま返信ありがとうございます。
> プログラムの基本的な知識が乏しいため、考えてみましたがさっぱり分かりませんでした。
> せっかくご指導いただいたのに申し訳ありません。
>
> かわりにサンプルを見つけましたので、net arukoさんの参考になればと思い、報告します。http://gmaps-samples.googlecode.com/svn/trunk/manymarkers/markerhash....
>
> これを元に、v3用のファンクションに書き換えて試してみたいと思います。

--
このメールは Google グループのグループ「Google-Maps-API-Japan」の登録者に送られています。
このグループに投稿するには、google-map...@googlegroups.com にメールを送信してください。
このグループから退会するには、google-maps-api-...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/google-maps-api-japan?hl=ja からこのグループにアクセスしてください。

Reply all
Reply to author
Forward
0 new messages