• ベストアンサー

GoogleMapで・・

質問なのですが、PHPにてPOSTで受け取った住所の変数を利用してgeocoderを使って内部でMAPを作成してHTMLに吐き出すということを行いたいのですが、どうしても表示されず、困りはてています。 どなたか理想の手順等、ご教授していただける方がいましたらぜひよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fire--
  • ベストアンサー率49% (146/293)
回答No.2

今、geocorderの使い方までは調べてないのですが、 それ以前に javascript の文法エラーにかかりそうですね。 最初のmap.jsの中で geocoder.getLatLng( address , function( point ) { map.setCenter( point , 17 ); は()のつじつまが合ってないです。 javasciptコソールとか、エラーコンソールとかで見れば エラーが出ていると思いますよ。

mahimahi02
質問者

お礼

ありがとうございます! 初歩的なミスで気づいておりませんでした。 文法を修正したところ、MAPの枠までは表示が出たのですが肝心のMAPが帰ってきませんでした。 内部的におかしな点が未解決です・・ 修正後↓ var address; address = "{$setaddress}"; <!--{literal}--> function load(){ if( GBrowserIsCompatible() ){ var map = new GMap2( document.getElementById("cmap") ); var geocoder = new GClientGeocoder(); geocoder.getLatLng( address , function( point ) { map.setCenter( point , 17 ); map.addControl( new GSmallMapControl() ); map.addControl( new GMapTypeControl() ); var mk = new GMarker( point ); map.addOverlay( mk ) } ); } } <!--{/literal}-->

その他の回答 (3)

回答No.4

> address = "{$setaddress}"; としていますが、"{$setaddress}"; には、どのような値が入っていますか? (PHPに関する部分と思われます) > geocoder.getLatLng の引数にfunction( point ){}がありますが、pointにはどのような値が入っていますか? (javascriptに関する部分と思われます)

mahimahi02
質問者

お礼

返信ありがとうございます。 $setaddressには、POSTで取ってきた値を加工した日本語の住所が入ってきます。 そこが問題なのでしょうか・・? 出力された.jsファイルでは確かに > address = "{$setaddress}"; addres = "東京都新宿区・・"; のように入っては来ています。 しかしそこから反応していないような・・MAP画面ではgoogleマークや利用規約のリンクは返ってきますがMAP自体はグレーになってしまっています。

mahimahi02
質問者

補足

追加 やはり address = "{$setaddress}"; の"{$setaddress}に直接、緯度・経度に置き換えてアップしたところ、正常にMAPが表示されました。 住所を変換できていないのが原因のようなのですが解決策がなにかあるようならご指導いただけますでしょうか?

  • fire--
  • ベストアンサー率49% (146/293)
回答No.3

自分が以前書いたのを引っ張ってきました。 _MGmapGeocoder.getLatLng( address, function(point) { if (!point) { alert(address + " \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002"); } else { _MGmapMap.setCenter(point, 13); var marker = new GMarker(point); _MGmapMap.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); 違いを見てみると、 (1)addMarkerはこの前に行っている。 (2)function(point)の中で、pointが取れたか判定している。 というところですね。 とりあえず、まずはgeocoderなしにして表示されるか確認し、 順番に機能を追加していってはどうでしょう。

mahimahi02
質問者

お礼

返信ありがとうございます。 確認してみたのですがgeocoderなしでよくあるフォームから直接取得では問題なく表示されるのです。 pointに変換されていないのでしょうか・・

mahimahi02
質問者

補足

追加 やはりaddressを直接、緯度・経度に置き換えてアップしたところ、正常にMAPが表示されました。 住所を変換できていないのが原因のようなのですが解決策がなにかあるようならご指導いただけますでしょうか?

回答No.1

とりあえず、 どの様に値を受け取って、 どの様に変数に入れて、 どの様なHTMLと どの様なJavaScriptが生成しているか くらいは書いた方が、的確な回答が得られると思います。

mahimahi02
質問者

補足

返信ありがとうございます。そうですね。ソースを載せてみます。 まず、PHPにて$setaddressという変数に住所が入っているのを下記javascript用のテンプレートに書き出し、.jsで保存します。 var address; address = "{$setaddress}"; <!--{literal}--> function load(){ if( GBrowserIsCompatible() ){ var map = new GMap2( document.getElementById("cmap") ); var geocoder = new GClientGeocoder(); geocoder.getLatLng( address , function( point ) { map.setCenter( point , 17 ); } map.addControl( new GSmallMapControl() ); map.addControl( new GMapTypeControl() ); var mk = new GMarker( point ); map.addOverlay( mk ); } } <!--{/literal}--> 続いて下記HTMLを生成してこちらで上記の座標のMAPを生成したいと考えています。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp"/> <title>アクセスMAP</title> <!--{literal}--> <script src="http://maps.google.com/maps?file=api&v=2&key=キー" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript" src="map.js"></script> <!--{/literal}--> </head> <body onload="load()" onunload="GUnload()"> <div id="cmap" style="width: 500px; height: 300px;"></div> </body> </html> $setaddressに住所が入ってくるところまでは確認でき、それぞれのファイルが生成されるところまではできるのですが、表示がされず、問題点をご指摘いただければ幸いです。

関連するQ&A