

Google Map APIで 緯度経度から住所を逆算しています。  
一つは問題なくできるのですが、大量のデータを一括処理したいため、  
配列での繰り返しを試みています。  
しかし下記のコードで書いても最後のデータしか表示されません。  
何が間違っているのでしょうか。  
JSは経験がなく、Web上の助言を集めて書いてみました。  
初心者でアホな質問してたらすみません。。。

[code]

    <script type="text/javascript">
    
    
    //　緯度経度から住所を求める
    function getAdrs(){
    
        var markers = [
            ['高知県立美術館',35.663778,139.73951],
            ['牧野植物園',33.54661,133.57790],
            ['高知城',33.56067,133.53147],
            ['桂浜',33.497145,133.57480],
            ['高知市文化プラザかるぽーと',33.55826,133.54725]
        ];
    
        for (var i = 0; i < markers.length; i++) {
            var name = markers[i][0];
    
            var latlng = new google.maps.LatLng(markers[i][1],markers[i][2])
            var gc = new google.maps.Geocoder();
            gc.geocode({ location : latlng }, 
    
            function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    var adrsData = results[0].address_components;
                    var txt = name;
                    for(var i=0; i<adrsData.length; i++){
                        txt += adrsData[i].long_name + " , ";
                        //txt += adrsData[i].types + "<br>";
                    }
                    document.getElementById("result").innerHTML = txt;
                }else{
                    alert(status+" : ジオコードに失敗しました");
                }
            });
        }
    }
    
    </script>
    
[/code]


CC BY-SA 3.0
2015-03-10T12:34:22.160
7735
2015-04-09T14:53:47.680
2015-03-10T12:53:02.857
2383
8527
question
javascript api google-maps
Google Map APIで　緯度経度から住所を逆算、繰り返し処理したいが、一つしか出てこない


このコード

[code]

    document.getElementById("result").innerHTML = txt;
    
[/code]

が出力場所だとすれば、結果を上書きしているため最終的に最後の結果しか出力されません。

[code]

    console.log(txt)
    
[/code]

を使うか

[code]

    document.getElementById("result").innerHTML += txt + "<br />";
    
[/code]

などとすると良いのではないでしょうか。


CC BY-SA 3.0
2015-03-10T12:43:32.387
7736
2015-03-10T12:43:32.387
8667
7735
answer


コールバックはループ終了後に実行されるため、変数が期待する値になっていないと思われます。  
`function(results, status){...}`の部分を

[code]

    (function(n){ return function(results, status){
        var name = markers[n][0];
    ...
    }; })(i);
    
[/code]

のように書き直して`name`を再取得する必要があります。


CC BY-SA 3.0
2015-03-10T12:47:46.940
7738
2015-03-10T12:47:46.940
5750
7735
answer