0

地理位置情報を取得してテキストに変換しようとしています。それを行うコードを取得しましたが、エラーが発生します。このエラーはどのように解決できますか?

エラー: TypeError: 'undefined' はオブジェクトではありません ('geocoder.geocode' を評価しています)

コード:

var geocoder;

if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 
//Get the latitude and the longitude;
 function successFunction(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
codeLatLng(lat, lng)
}

function errorFunction(){
alert("Geocoder failed");
}

function initialize() {
geocoder = new google.maps.Geocoder();



}

function codeLatLng(lat, lng) {

var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'location':latlng}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
  console.log(results)
    if (results[1]) {
     //formatted address
     alert(results[0].formatted_address)
    //find country name
         for (var i=0; i<results[0].address_components.length; i++) {
        for (var b=0;b<results[0].address_components[i].types.length;b++) {

        //there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate
            if (results[0].address_components[i].types[b] == "administrative_area_level_1") {
                //this is the object you are looking for
                city= results[0].address_components[i];
                break;
            }
        }
    }
    //city data
    alert(city.short_name + " " + city.long_name)


    } else {
      alert("No results found");
    }
  } else {
    alert("Geocoder failed due to: " + status);
  }
});
}
4

1 に答える 1

0

ジオコードを逆にするために、リクエスト構造にはlatLngではなくが含まれますlocation

わずかに変更されたドキュメントの例から(テストされていません):

 function codeLatLng(lat, lng) {
    // remove irrelevant code
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {

また、これは正しくありません。最初の結果 (結果 [0]) を使用する場合は、それが存在するかどうかを確認する必要があります (結果 [0] の場合 ... 結果 [1] の場合ではありません)。

if (results[1]) {
 //formatted address
 alert(results[0].formatted_address)     

jsfiddleを見ると、API が正しく読み込まれていません。API をロードする正しい方法については、ドキュメントを参照してください。

于 2013-03-31T13:09:05.523 に答える