0

Googleマップ(v3)を使って、検索フィールドに入力した住所が実際に存在するかどうかを確認し、画面に印刷する必要があります。これは、そのアドレスの緯度と経度のペアが見つかったかどうかを確認するだけで簡単に実行できます。しかし、私には問題があります。

ユーザーがFirstStreetのような一般的な通りの名前など、幅広い検索を入力する場合、ユーザーが1つを選択できるように、見つかったすべての結果を印刷する必要があります。この時点で結果をマップに表示する必要はありません。ページに結果のリストを表示するだけです。それを実行するはずのコードをオンラインで見つけて変更しましたが、機能しません。「GClientGeocoder()が定義されていません」というエラーが表示されますが、それを過ぎてもコードに問題があるのではないかと思うので、経験豊富な人が私を正しい方向に向けてくれるかどうか疑問に思いました。

これがコードです。テスト目的で、検索語「FirstStreet」を関数にハードコードしました。

function showAddress() {
    var geo;
    geo = new GClientGeocoder();
    var search = 'First Street';
    // ====== Perform the Geocoding ======        
    geo.getLocations(search, function (result)
      {
        //map.clearOverlays(); 
        if (result.Status.code == G_GEO_SUCCESS) {
          // ===== If there was more than one result, "ask did you mean" on them all =====
          if (result.Placemark.length > 1) { 
            document.getElementById("message").innerHTML = "Did you mean:";
            // Loop through the results
            for (var i=0; i<result.Placemark.length; i++) {
              document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+result.Placemark[i].address;
            }
          }
          // ===== If there was a single marker =====
          else {
            document.getElementById("message").innerHTML = "Result found:"+result.Placemark[0].address;
          }
        }
        // ====== Decode the error status ======
        else {
          alert('No results found');
        }
      }
    );
  }

「メッセージ」は単なる通常のメッセージ<div>です。関数はbodyタグから呼び出されます。

<body onLoad='showAddress()'>
4

1 に答える 1

1

このコードは古いV2-API用に作成されています。V3-APIスクリプトを読み込んでいると思います。

V2-APIで実行すると、正常に動作します。

V2とV3には互換性がありません。

V3に翻訳されたコード:

    function showAddress() {
      var geo = new google.maps.Geocoder();

      var address = 'First Street';
      geo.geocode({"address": address},
                      function(result,status)
                      {
                        var out='no results found';
                        if (status == google.maps.GeocoderStatus.OK) 
                        {
                          if(result.length==1)
                          {
                            out = "Result found:"+result[0].formatted_address;
                          }
                          else
                          {
                            out = "Did you mean:";
                            for(var i=0;i<result.length;++i)
                            {
                              out+="<br>"+(i+1)+": "+result[i].formatted_address;
                            }
                          }

                        }

                        document.getElementById("message").innerHTML = out;
                      }
                    );
  }

http://jsfiddle.net/doktormolle/xUHAR/

于 2012-01-29T11:44:14.367 に答える