• 締切済み

GoogleMapについて

GoogleMapのジオコーディングを行っています。 下記のコードを記載しているのですが、 検索時にインターネットが重いとpointに値が入らず 入力した住所が見つかりません。のアラートが出てしまいます。 おそらくタイムアウトしているのかな?と思うのですが知っている方いましたらご教授お願いします。 住所自体は存在している住所で、ネットが重くなければ問題なく地図は 表示されます。 geocoder.getLatLng( address, function(point) { if (!point) { alert("入力した住所が見つかりません。"); } else { map.clearOverlays(); map.setCenter(point, 15); } } );

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

タイムアウトしているかどうか確かめるには、getLatLngメソッドでなく、 getLocationsメソッドを使ってレスポンスをjsonでもらい、statusコード でハンドリング出来ます。 下記のようにして、何のステータスが戻っているか確かめてみては。 geocoder.getLocations(address,function(response){ if (response.Status.code == 200){ point = new GLatLng(response.Placemark[0].Point.coordinates[1], response.Placemark[0].Point.coordinates[0]); map.clearOverlays(); map.setCenter(point, 15); }else{ if (response.Status.code != 620){ alert("入力した住所が見つかりません status=" + response.Status.code); }else{ alert("タイムアウトかも暫く待って下さい status=" + response.Status.code); } } }); 正常にジオコーディング出来ていればステータスに200がセットされます。 コードの一覧は参照URL にあります。 また、連続して、大量にジオコーディング要求するとステータスが620が戻され、処理されません。従って、620が返されたときは、暫く待つ必要があります。 (javascriptで暫く待つ工夫は困難ですが)

参考URL:
http://code.google.com/intl/ja/apis/maps/documentation/reference.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javascriptでgooglemapを表示させたいのですが、fir

    javascriptでgooglemapを表示させたいのですが、firefoxで表示できず、空白になってしまいます。 IEでは問題なく表示できています。何が問題でしょうか。 html部分です。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=xxxxxx" type="text/javascript"></script> <script type="text/javascript" src="http://xxxxx.xxx/test.js"></script> </head> <body> <div id="map" style="width: 450px; height: 300px"></div> </body> </html> test.js部分です。 window.onload = function() { var map = null; var geocoder = null; if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(35.67431, 139.69082), 13); // GClientGeocoderを初期化 geocoder = new GClientGeocoder(); } if (geocoder) { geocoder.getLatLng( "東京都xx区xx", function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml("ここが目的地です。"); } } ); } }

  • GoogleMaps API 住所から複数ピンを表示

    GoogleMaps API素人ですが・・・ 最近いろいろやっていてやっとDBの住所(日本語の住所 例:大阪府大阪市中央区平野町1丁目)を引っ張ってきてグーグルマップで座標を取得してピンを立てることに成功しました。 今苦戦しているのは同じ地図上に複数のピンをさす方法です。 どなかた教えていただけないでしょうか? ちなみに今1ピン表示に成功してるコードはこちらです。 どこから、どこまで繰り返したらいいのでしょうか・・・? ------------------------------ <? //DB(MySQL)からデータ取得 $address = $row["address"]; $fukidashi = "住所:".$row["address"]; ?> <div id="map" style="width:500px; height:400px; border:1px solid #999;"></div> <script type="text/javascript"> <!-- var map = null; var geocoder = null;   var address = "<?=$address;?>"; function load() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.addControl(new GLargeMapControl()); geocoder = new GClientGeocoder(); geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " の住所が見つかりません"); } else { map.setCenter(point, 16); var marker = new GMarker(point); map.addOverlay(marker); //吹きだし情報 var msg_html1 = "<?=$fukidashi;?>"; marker.openInfoWindowHtml(msg_html1); } } ); } } //--> </script>

  • GoogleMap 住所から座標の取得

    住所から座標を取得し、マーカーを設置 情報ウインドウを設定したいのですが、想定している動きをしません 動かすと 1回目→3回目→1回目→3回目→2回目 といった順番でalertが表示されます 原因はclientGeocoder.getLatLng辺りじゃないかと思っているんですが、これを順番通りに動かすにはどのようにすればよいでしょうか var map; var shopName; var address; var tel; function changeFont(input) { if (GBrowserIsCompatible()) { //住所名取得 var point = document.getElementById('{!$Component.top.ad}').value.split(','); //地図を配置するオブジェクト取得 map = new GMap2(document.getElementById('map')); //拡大・縮小を行えるようにする map.enableScrollWheelZoom(); //ジオコード var clientGeocoder = new GClientGeocoder(); //マーカー設定 for (var i = 0; i < point.length; i++) { //shopName = shop[i]; address = point[i]; //tel = telpho[i]; alert("1回目 = " + address); clientGeocoder.getLatLng(point[i], shoMap); alert("3回目 = " + address); } } } function shoMap(point) { //中心設定 map.setCenter(point, 8); //マーカー var marker = new GMarker(point); map.addOverlay(marker); alert("2回目 = " + address); GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml("店名:" + shopName + "<br/>住所:" + address + "<br/>TEL:" + tel);}); }

  • Google Map Api 複数のマーカーをおくと、一部が表示されない

    お疲れ様です。 お世話になっております。 Google Map Apiで複数のマーカーを設置するスクリプトを組みました。 10件程度は問題なく表示されるのですが、10件を境に、表示されたり、されなかったりします。 F5で表示されるもの、されないものとまばらになるので、なんとなく原因は、処理よりも表示のほうが速いからではないか?ということなんですが、JSの処理の流れがイマイチわかっていないので、結論は出せません。 実際20件登録したところ、10件~17件の間で出たり出なかったりします。1~10件までは必ず表示され、その後ろのIDを持つものがランダムになります。 これを確実に全部表示されるようにしたいのですが、表示の前にsleepなどかけるのがよいのか、ajaxにしてみるのがよいのかなど、検討がつきません。 下記が、書いたスクリプトです。 もしよければ、アドバイスお願いします。 var markers = new Object(); var marker = new Object(); marker["name"] = "xxx"; marker["icon"] = "ylw-pushpin"; marker["address"] = "座標変換用の住所"; marker["text"] = "噴出しの中身"; marker["center"] = "中心にするかしないか"; markers[0] = marker; 20回ループ markers[20] = marker; googlemap(markers) -----------googlemap(markers) function googlemap(markers) { if (GBrowserIsCompatible()) { geocoder = new GClientGeocoder(); map = new GMap2(document.getElementById("map")); map.addControl(new GSmallZoomControl()); map.addControl(new GScaleControl()); for(var i in markers){ showAddress(markers[i]); //ここは20回ちゃんとまわってるようです } } } ------------------showAddress() function showAddress(amarker) { if (geocoder) { geocoder.getLatLng( amarker['address'], function(point) { if(amarker['center'] == 1){ map.setCenter(point, 12); } //アイコンが指定されてたらアイコンを設定 if(amarker['icon']){ var marker = new GMarker(point,micon); //アラートしてみると、ここが10回~17回ぐらいしか回ってない }else{ var marker = new GMarker(point); } map.addOverlay(marker); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(ふきだしのなかみ) }); } ); } }

  • GoogleAPIの地図をPHP(Smarty)で表示させたい

    PHPのSmartyを用いて、任意の住所の地図表示を行うテンプレートを作成しています。他の方が作られたサンプルプログラムを元に考えているのですが、地図が表示されないようです。 Smartyテンプレートとして、住所文字列を$event_locationとして格納し、その地図を表示させたいのですが、下記の2つのfunction部分で処理がとまるように見えています。 申し訳ございませんが、どなたか解決方法(下記以外の書き方でもかまいません)を教えて頂けませんでしょうか。 よろしくお願いいたします。 ---<googlemap.tpl>------------------------------- <!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> <title>Google Maps JavaScript API Example - simple</title> </head> <script src="http://maps.google.com/maps?file=api&v=2.x&key=GOOGLEAPIKEY type="text/javascript" charset="UTF-8"></script> <body onload="load();showAddress('{$event_location}')"> <div id="map" style="width:450px; height:400px"></div> <script type="text/javascript"> var map = null; var geocoder = null; function load() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.addControl( new GSmallMapControl() ); geocoder = new GClientGeocoder(); } } function showAddress(address) { if (geocoder) { geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); } } </script> <div id="map" style="width:500px; height:600px"></div> </body> </html>

    • ベストアンサー
    • PHP
  • googlemap api で複数マーカー表示

    複数のマーカー表示は最初できてたんですが、 住所から座標を取得してマーカーを複数表示ができません。。 <script type="text/javascript"> function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); //地図を作成 map.setCenter(new GLatLng(35.969115,139.372559), 8); //地図を表示((中心の緯度,経度),縮尺) map.addControl(new GSmallMapControl()); //マップコントローラを付ける map.addControl(new GMapTypeControl()); //マップタイプコントローラを付ける map.addControl(new GScaleControl()); //スケールコントローラを付ける map.removeMapType(G_HYBRID_MAP); //マップタイプコントローラから地図+写真を削除する map.enableScrollWheelZoom(); //マウスホイールによるズーム処理を有効化 //マーカー追加プログラム function addMarker(lat,lng,html) { var geocoder = new GClientGeocoder(); geocoder.getLatLng ( lat, function(point) { var marker = new GMarker(new GLatLng(point,lng)); //マーカー生成 GEvent.addListener(marker,"mouseover",function(){marker.openInfoWindowHtml(html);});//マーカーにマウスが当たると情報ウィンドウを表示する map.addOverlay(marker); //マーカーをオーバレイ表示する } ); } //マーカー追加 addMarker("横浜市",'<p>html</p>'); addMarker("東京都",'<p>html</p>'); } } </script> </head> <body onload="load()" onunload="GUnload()"> 中略・・・ 初心者なもので、、、 ご回答お願いいたします。

  • GoogleMapのGeocoderがlocalhostで正常に動作しません

    今回質問させて頂きたい内容は、GoogleMapAPIのGeocoderについてです。 下記のサイトのプログラムをコピーし「httpd」を使用してlocalhost上(http://localhost/map/search.html)で動作させ検索した所「地名 not found」と表示されてしまいます。 htmlファイルを右クリックし直接IEで起動させると正常に動作するのですが、最終的にはphpで郵便番号から大体の住所を割り出して検索させたい為localhost上で動かしたいのです。 なぜ表示されないのか理由がわからず、ずっと悩んでいます。 なにとぞご教授いただけますよう宜しくお願いいたします。 参考サイト http://www.geekpage.jp/web/google-maps-api/geocoder-0.php ファイル名:search.html プログラム <!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> <title>GClientGeocoderサンプル</title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAANpz9YbJ9ituU8znrs9XJRhT9C0HjqPndW8ASVAENg0TnC9eCpxT0fY1KRBtIwNj2R0ym6ijrCZ0FhQ" type="text/javascript" charset="utf-8"></script> </head> <body onload="load()"> <div id="map" style="width:450px; height:400px"></div> <script type="text/javascript"> //<![CDATA[ var map = null; var geocoder = null; // 初期化 // <body onload="load()"> で呼び出されています function load() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(35.67431, 139.69082), 13); // GClientGeocoderを初期化 geocoder = new GClientGeocoder(); } } // 「移動する」ボタンを押されると実行されます function showAddress(address) { if (geocoder) { geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); } } //]]> </script> <form action="#" onsubmit="showAddress(this.address.value); return false"> <P> <input type="text" size="40" name="address" value="渋谷区1-1" /> <input type="submit" value="移動する" /> </P> <div id="map" style="width:500px; height:600px"></div> </form> </body> </html>

  • Google Maps APIで特定の住所の地図を表示させたい

    Google Maps APIで以下のようなページを作りました。 <body onload="loadMap()"> <div id="map" style="width:450px; height:400px"></div> <script type="text/javascript"> //<![CDATA[ if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(37.441944, -122.141944), 15); map.addControl(new GLargeMapControl()); // GClientGeocoderを初期化 geocoder = new GClientGeocoder(); } GEvent.addListener(map, 'move', function() { var xy = map.getCenter(); document.getElementById("show_x").innerHTML = xy.lng(); document.getElementById("show_y").innerHTML = xy.lat(); }); // 「移動する」ボタンを押されると実行されます function showAddress(address) { if (geocoder) { geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 13); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); } } //]]> </script> <p> </p> <form action="#" onsubmit="showAddress(this.address.value); return false"> <p> <input type="text" size="40" name="address" value="渋谷区1-1" /> <input type="submit" value="移動する" /> </p> </form> <p>x</p><div id="show_x"></div> <p>y</p><div id="show_y"></div> </body> これだと、表示させたい住所を毎回入力しないといけないんですが、PHPとMySQLを使ってDBにある住所の地図を表示させたい場合はどのようにすればいいのでしょうか? <body onload="loadMap()"> を <body onload="showAddress([ここにDBからぬいてきた住所]); return false"> にしてみたんですが機能しません。

  • GoogleMAPの切り替えについて

    Javascriptのエラーについて質問させてください。 1つのページで、2種類のGoogleMAPを切り替えたいと思っています。しかし、以下のように記述したところ「"offsetwidth"はnullまたはオブジェクトではありません。」とエラー表示されてしまいます(確認ブラウザ:IE6、FireFOX3、Safari、Googlechorome)。 一体、何がマズイのかさっぱりわからなくなり、困り果てて質問しています。どうかお力をお貸しください。 宜しくお願いします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="style_sheet.css" type="text/css"> <title>マップテスト</title> <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=グーグルマップAPIキー" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ function load() { if (GBrowserIsCompatible()) { //エリア1マップ用設定開始。 var map = new GMap2(document.getElementById("map")); //コントロール追加表示。右下縮小図とコントロールバー。 map.addControl( new GSmallMapControl() ); map.addControl( new GOverviewMapControl() ); //店舗のマーカー表示 var point1 = new GLatLng(座標,座標); map.setCenter(point1, 10); var point2 = new GLatLng(座標,座標); map.setCenter(point2, 10); var point3 = new GLatLng(座標,座標); map.setCenter(point3, 10); //アイコンのための宣言 var icon = new GIcon(); // アイコン画像のURL icon.image = "./img/hoge.png"; // アイコン画像のサイズ icon.iconSize = new GSize(50, 25); // アイコンの表示場所 con.iconAnchor = new GLatLng(32, 0); // マーカーの表示 map.addOverlay( new GMarker(point1, icon) ); map.addOverlay( new GMarker(point2, icon) ); map.addOverlay( new GMarker(point3, icon) ); //デフォルトの表示 map.setCenter(new GLatLng(座標,座標), 10); } } function load2() { if (GBrowserIsCompatible()) { //エリア2マップ用設定開始。 var map2 = new GMap2(document.getElementById("map")); //コントロール追加表示。右下縮小図とコントロールバー。 map2.addControl( new GSmallMapControl() ); map2.addControl( new GOverviewMapControl() ); //店舗のマーカー表示 var point21 = new GLatLng(座標,座標); map2.setCenter(point21, 10); var point22 = new GLatLng(座標,座標); map2.setCenter(point22, 10); var point23 = new GLatLng(座標,座標); map2.setCenter(point23, 10); var point24 = new GLatLng(座標,座標); map2.setCenter(point24, 10); //アイコンのための宣言 var icon2 = new GIcon(); // アイコン画像のURL icon2.image = "./img/hoge2.png"; // アイコン画像のサイズ(横幅/縦幅) icon2.iconSize = new GSize(50, 25); // アイコンの表示場所 icon2.iconAnchor = new GLatLng(32, 0); // マーカーの表示 map2.addOverlay( new GMarker(point21, icon2) ); map2.addOverlay( new GMarker(point22, icon2) ); map2.addOverlay( new GMarker(point23, icon2) ); map2.addOverlay( new GMarker(point24, icon2) ); //デフォルトの表示 map2.setCenter(new GLatLng(座標,座標); 12); } } //]]> </script> </head> <body onload="load()" onunload="GUnload()"> <a href="#" onclick="load()">エリア1</a>| <a href="#" onclick="load2()">エリア2</a>| <!-- マップ表示用DIV --> <div id="map" style="width:700px;height:350px;"></div> </body> </html>

  • RegisterStartupScriptについて

    vs2005 & asp.net(vb)で開発を行っています。 リクエストパラメータで渡した情報から、DB参照し、 取得した住所からGooglemapを表示しようとしています。 db接続などは問題なく取得できていますが、 JavaScript部のfunction以降に入っていないように思います。 Googlemapを表示するにはどのように記述すれば良いでしょうか。 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'パラメタ取得 http://www.hoge.jp/hoge.aspx?id=gegege String hoge = Page.Request.QueryString.Get("id"); 'db接続 objRs. = CreateObject("ADODB.Connection") objRs..Open("dsn=xxx;uid=xxx;pwd=xxx;") objRs..CursorLocation = 3 'sql発行 strSql = "" strSql = "select address from table where id=' " & id & "'" rs = objRs.Execute(strSql) '住所取得 'strAddress = rs("address").value strAddress = "大阪駅"'←テストのためセット Dim sScript As New System.Text.StringBuilder sScript.Append("var map=new GMap2(document.getElementById(""map""));") sScript.Append("var address = '" & StrAddress & "';") sScript.Append("var Geocoder = new GClientGeocoder();") sScript.Append("alert('1');")'←表示される sScript.Append("function showAddress(address) {") sScript.Append("alert('2');")←表示されない sScript.Append("geocoder.getLatLng(") sScript.Append("address,") sScript.Append("function(point) {") sScript.Append("if (!point) {") sScript.Append("alert(address);") sScript.Append("} else {") sScript.Append("var map = new GMap2(document.getElementById(""map""));") sScript.Append("map.setCenter(point, 13);") sScript.Append("var marker = new GMarker(point);") sScript.Append("map.addOverlay(marker);") sScript.Append("marker.openInfoWindowHtml(address);") sScript.Append("}") sScript.Append("}") sScript.Append(");") sScript.Append("}") Me.ClientScript.RegisterStartupScript(Me.GetType(), "key", sScript.ToString, True) end if