1

Google Maps APIを使用して、住所のデータベースをポイントに保存します。

決められない3日目という問題に出くわしました。アドバイスをいただけますか。

私は、geotsoder.geoсodeを使用してajaxを認識して使用し、データベースにこのアドレスを書き込む、マップ上にマークされているすべてのポイントを循環します。

例:

function saveAddress(marker_points)
{
    var i = 0;
    id = 0;
    address = [];
    var count  = 0;
    points = [];
    for(i in marker_points) 
    {
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( {'address': marker_points[i]},function(results, status){
            address = results[0].formatted_address;
        });

    $.ajax({
        type: "POST",
        url: "/user.view.location.phone_id-{/literal}{$iPhoneId}{literal}.html",
        cache: false,
        data:  "address=" + address + "&location_point=" + marker_points[i],
        dataType: "html",
        async: false,
        timeout: 5000,
        success: function (data) {
        }
    }); 
}
}

しかし、Ajaxでは最後のポイントを通過しました。つまり、データベースに書き込まれると、最後のアドレスと、このアドレスが存在する最後のポイントが返されました。

彼はすべてのオプションを試したので、問題が何であるか、そしてそれを解決する方法を教えてください、それはうまくいきませんか?

4

2 に答える 2

0

あなたのスクリプトは、geocoder.geocodeから応答を得る前にajaxメソッドを呼び出すことがあると思います。$.ajaxメソッドを中に入れてみてください

function(results, status){
    address = results[0].formatted_address;
}

コードのフラグメントは次のようになります。

var marker_points = ["50.463425,30.508120","50.465822,30.514380","50.465317,30.515609"];

for(i in marker_points) {   
       codeAndSendAddress(marker_points[i]);
}

function codeAndSendAddress(point){
    var mp = point.split(',');//Extract numbes from string
    var latLng =  new google.maps.LatLng(mp[0],mp[1]) // create latitude/logitude object


    geocoder.geocode( { 'latLng': latLng}, function(results, status) {
        if(status == google.maps.GeocoderStatus.OK) { make sure location was found

            var geocodedAddress = results[0].formatted_address;
            var geocodedLocationPoint = results[0].geometry.location;

            $.ajax({
                type: "POST",
                url: "/user.view.location.phone_id-{/literal}{$iPhoneId}{literal}.html",
                data: 'address='+geocodedAddress+
                '&geocoded_location_point='+geocodedLocationPoint+
                '&location_point='+point,
                timeout: 5000,
                success: function (data) {}
            });

        }
    });
}
于 2012-11-06T10:36:31.293 に答える
0

関数クロージャを使用して、要求を応答に関連付けることができます。

ジオコーディングされたアドレスの使用例:

「i」でクロージャを取得する関数は次のとおりです。

function geocodeAddress(i) {
    geocoder.geocode({'address' : locations[i]},
       function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
             map.setCenter(results[0].geometry.location);
             createMarker(results[0].geometry.location, i);
          } else {
             alert('Geocode was not successful for the following reason: '
                    + status);
          }
    });
}     
于 2012-11-06T13:50:30.987 に答える