Google Maps APIに関する質問

165 views
Skip to first unread message

Digital Life Innovator

unread,
Aug 28, 2005, 10:49:14 AM8/28/05
to Google-Maps-API-Japan
はじめまして。全国ロケ地図や東京アートイベント地図を作成していますDigital
Life Innovatorのmasaです。
不勉強で申し訳ないのですが、ご存じの方がいらっしゃいましたら教えて頂けると有り難いです。

1.各ズームサイズにおける縮尺(というか経度緯度とドットとの関係)の計算の仕方
全国ロケ地図(http://saya.s145.xrea.com/x/lmap.html)を作っているときに、全てのマーカーを表示したいとか、マーカーを重ならないように引き出し線等で表示したい(印刷用)という要望がありました。
前者は、全マーカの中心に移動しズームアウトしていき、表示範囲を取得(getBoundsLatLng)して全て入ったところでやめるというかなり無理矢理なやり方をしています。
後者も表示範囲(getSpanLatLng)から経度緯度とドットの関係を計算して、うまく配置するしかないのでしょうか?

2.InfoWindowのサイズについて
InfoWindowの中のhtmlをdiv等のサイズ指定で表示するとサイズが指定できますが、
・横幅をある程度以上小さくできない
(http://saya.s145.xrea.com/x/weather.html)
・Safari(Mac)だとスクロールバーを動かせない
(http://saya.s145.xrea.com/x/tab.html)
に対する対策はないでしょうか?

3.マーカーの表示順の変更や表示・非表示をできないのか?
今のところ、下に置きたいマーカーから描画したり、表示・非表示の切り替えをclearOverlayして書き直したりしてますが、もっと簡単にできたりしないでしょうか?

nagoyan the earthhopper

unread,
Aug 28, 2005, 11:09:21 AM8/28/05
to Google-Map...@googlegroups.com
masaさん、とりあえずですが、2 と 3.に関係ありそうな Google-Maps-API のスレッドを貼っておきます。
"InfoWindow Size" とか "marker display order" とかでグループ内検索してみた結果です。

InfoWindow - Size
http://groups.google.com/group/Google-Maps-API/browse_frm/thread/95de05938c40a3f/77c90767c01e81e7

Markers Z-order
(マーカーの順序のコントロール)
http://groups.google.com/group/Google-Maps-API/browse_frm/thread/6f7253f449fa64c0/8afc3190a563ba2e

How to determine stacking order of neighboring markers?
(マーカーのソートをしないようにする方法)
http://groups.google.com/group/Google-Maps-API/browse_frm/thread/5831cb859eed19a2/764410cfba746a66

Ksc

unread,
Aug 28, 2005, 11:42:20 AM8/28/05
to Google-Maps-API-Japan
> 前者は、全マーカの中心に移動しズームアウトしていき、表示範囲燭鮗萋澄��艱�阨鈔麑癆野�ぢ)して全て入ったところ燭任笋瓩襪箸いΔ�覆衞詰�靈�覆笋衒�鬚靴討い泙后��

うちのスクリプト KsGMap
でも、同機能を搭載しました。
最初はmasaさんの方法と同じ方法で取得したのですが、かなり速度が遅くなるので、独自に計算しています。

http://www.movies.ne.jp/theatermap/release_script.html
の スクリプト本体 から KsGMapPoint_moveCenterAndZoom関数
を参考にして下さい。
具体的には、現在のマップから一つ広域のマップは、現在のマップ縦横の2倍の大きさという性質から計算できます。
(log
とか計算方法を忘れて、実装にかなり手間取ってしまいました)


> 後者も表示範囲(getSpanLatLng)から経度緯度とドットの関係を計算して、うまく配置するしかないのでしょうか?

ちょっとイメージが分からないのですが、マーカーを線にしてはだめなのでしょうか?


>横幅をある程度以上小さくできない

APIが描写する影の関係ではないでしょうか?
小さいのは独自な情報ウィンドウを作ったほうがいいかも知れません。

Digital Life Innovator

unread,
Aug 28, 2005, 12:05:11 PM8/28/05
to Google-Maps-API-Japan
nagoyanさん、Kscさん、早速回答ありがとうございます。
まだ、確認できていませんが、まずはお礼まで。

> ちょっとイメージが分からないのですが、マーカーを線にしてはだ めなのでしょうか
マーカーがIDになっていて、別ウィンドウの一覧と対応しているようなイメージです。
http://saya.s145.xrea.com/x/lmap.html
印刷して持ち運ぶためとのことです。モバイルでもGoogle
Mapsが動けば必要ないのですが。

Ksc

unread,
Aug 28, 2005, 5:40:10 PM8/28/05
to Google-Maps-API-Japan
やはり座標-ピクセル数を換算してマーカーをうまくずらすしかないでしょうね。
一応、うちのマップでは、近くの座標は同じマーカーに表示しています。
(マーカーが若干重なりますが、小さくすれば、たぶん重なりません)

ひゅ〜

unread,
Aug 28, 2005, 10:08:52 PM8/28/05
to Google-Maps-API-Japan
ズームレベル毎のピクセルはここギコのねねさんが計算していますね。
http://kokogiko.net/m/archives/001294.html
どのように算出したのかは、ご本人に聞いてみましょう♪

あとは表示内容にあわせてがんばってズラすしか無いと思います。

Ksc

unread,
Aug 28, 2005, 10:51:15 PM8/28/05
to Google-Maps-API-Japan
ピクセル辺りの距離は、緯度や経度によって変化するので、シビアな値が欲しいときはリアルタイムに計算した方がいいかと思いますよ。

ここギコねね

unread,
Aug 29, 2005, 3:37:20 AM8/29/05
to Google-Maps-API-Japan
> ピクセル辺りの距離は、緯度や経度によって変化するので、シビアな値が欲しいときはリアルタイムに計算した方がいいかと思いますよ。

御意。
飽くまでうちのサイトに書いたのは、日本近辺でのざっくりとした値で書いてます。
どこの緯度で計測したかも忘れました。
また、求めたのは距離(m)とピクセルの関係で、左下のスケールの表示値とスケールメモリ間のピクセルをPaintShopで確認して計算したものです。

正確な経緯度とピクセルの対照は仕様としてGoogleから出てこないと知る事は無理ですが、
数ピクセル程度の誤差は許容するなら上のやり方のようなやり方で出せますよ。
まず、地図画像が特徴的なところを選んで、中心点の経緯度を求めます。
そこから、APIで正確に経緯度で何秒かずらして、また地図画像を得ます。
前者と後者の画像を、PaintShopなんかで拡大して、何ピクセルずれたかを目で読み取ります。

これを、ずらす量などを増減して、また他の点でも試してみて、経緯度ズレ量とピクセルズレ量のサンプルをまあ4~50例くらいは集めます。
集まったら、それを元に経度・緯度とピクセル差/秒差との関係をプロットして、近似曲線を引いてやればOK。
近似してやる曲線は、図法がメルカトルなので、経度方向は線形(というか一定)だろうし緯度方向もなんか理論で求まるはず。

3年~1年ほど前、携帯版地図サイトを運営していた時は、PC向け地図サイトの地図をパクッて表示させていたんですが、上の方法で経緯度差とピクセルの関係を計算して、現在表示中の地図から何ピクセル移動、とかを制御してました。

ひゅ〜

unread,
Aug 29, 2005, 4:05:01 AM8/29/05
to Google-Maps-API-Japan
なるほど、地図画像から何かをする場合には要注意ですね。
引出し線なら単純にずらしても良いかな?
線引きはAPIでしてもらえば良いですもんね♪

でも、ズラした場所が他と重ならないかチェックが必要ですね。
平面地図は必ず歪んでいる事を忘れたらいけないのか...地図からのアプローチはいろいろあって難しいですな。

Ksc

unread,
Aug 29, 2005, 6:03:01 AM8/29/05
to Google-Maps-API-Japan
> 正確な経緯度とピクセルの対照は仕様としてGoogleから出て燭海覆い斑里觧�鰐詰�任垢���

直接は無理ですが、算出することは可能です。こんな感じ。
var bounds = map.getBoundsLatLng();
var degreesParPixel_lng = ( ( bounds.maxX - bounds.minX ) /
document.getElementById( "map" ).offsetWidth
); //1ピクセル辺りの経度
緯度も同じようにやればOKです。
(GBoundsでなくてGSizeのwidthでも前半の値をとることが出来ますが、なんかこれ仕様と違うような気がするので、GBounds使っています)


ところで、旅行誌などの地図は、情報が集まり過ぎている部分は、別ページにしていますよね。
あえて、情報密集区は詳細でしか表示しないというのも一つの手かも知れません。

sawada

unread,
Aug 29, 2005, 12:32:58 PM8/29/05
to Google-Maps-API-Japan
さわだ@mapli.jp
正確な経緯度とmとピクセルの関係はversion16で解析をしてあります。
今度version18にあわせて拡張APIをつくってリリースしようと思いますのでお待ちください。

その手の計算はすべてmaps.jsに書いてありました、読むのが相当大変でしたけれども。
あとは日本をはずれた場合の測地系の違いも考慮しないといけません。
例えばzoom=13以上で表示した場合は同一画面上での差が相当出てきてしまうので、その場合は測地系の違いを計算するJavaScriptを用意しないといけないかもしれません。

> ここギコねねさん
微妙にメルカトルでない模様。そこが厄介です。

Digital Life Innovator

unread,
Sep 1, 2005, 10:17:29 AM9/1/05
to Google-Maps-API-Japan
皆様、多くのコメントありがとうございました。
教えて頂いたテクニックで、全国ロケ地図に印刷用のID(マーカー)が重ならなくするモードと
全てのIDを表示するときに、1回で計算してズームアウトする処理を作りました。
(まだ、できることを確認しただけの作り込みですが)
ありがとうございました。
Reply all
Reply to author
Forward
0 new messages