3

そのため、ロシアの誰かが私のWebサイトから逆ジオコーディングの応答をしました。Jsonを解析し、都市と州をクライアント側で1つの文字列に連結します。これは、その連結された文字列が最終的に次のようになったものです。

???? ?????-?????????, ??????

Googleが送信する状況はありますか?逆ジオコーディングされた応答からJsonを介してマークバックしますか?緯度/経度は正しかった。ブラウザから直接同じJson投稿を行ったところ、正しい応答が返されました。

http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true

誰かアイデアはありますか?

それは、私が米国からJsonにアクセスしていて、彼がロシアからアクセスしていたためでしょうか?

編集:連結はここで発生します:

最初に結果を取得します。

geocoder.geocode({'latLng': realUsersLoc}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
        if (results[1]) { 
            var loc = getCityState(results);

    function getCityState(results)
{
    var city = '';
    var state = '';
    var bad = '';
    var good = '';
    var us = true;
    // check for non-us
    for (var i = 0; i < results[0].address_components.length; i++)
    {
        var shortname = results[0].address_components[i].short_name;
        var longname = results[0].address_components[i].long_name;
        var type = results[0].address_components[i].types;
        if (type.indexOf("country") != -1)
        {
            if (!isNullOrWhitespace(shortname))
            {
                us = (shortname == 'US');
            }
            else
            {
                us = (longname == 'United States');
            }
        }
    }
    if (!us)
    {
        for (var i = 0; i < results[0].address_components.length; i++)
        {
            var shortname = results[0].address_components[i].short_name;
            var longname = results[0].address_components[i].long_name;
            var type = results[0].address_components[i].types;
            if (type.indexOf("country") != -1)
            {
                if (!isNullOrWhitespace(longname))
                {
                    state = longname;
                }
                else
                {
                    state = shortname;
                }
            }
            if (type.indexOf("administrative_area_level_1") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    city = shortname;
                }
                else
                {
                    city = longname;
                }
            }
            else if (type.indexOf("locality") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    city = shortname;
                }
                else
                {
                    city = longname;
                }
            }
        }
    }
    else
    {
        // us
        for (var i = 0; i < results[0].address_components.length; i++)
        {
            var shortname = results[0].address_components[i].short_name;
            var longname = results[0].address_components[i].long_name;
            var type = results[0].address_components[i].types;
            if (type.indexOf("administrative_area_level_1") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    state = shortname;
                }
                else
                {
                    state = longname;
                }
            }
            else if (type.indexOf("locality") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    city = shortname;
                }
                else
                {
                    city = longname;
                }
            }
            else if (type.indexOf("administrative_area_level_3") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    good = shortname;
                }
                else
                {
                    good = longname;
                }
            }
            else if (type.indexOf("administrative_area_level_2") != -1)
            {
                if (!isNullOrWhitespace(shortname))
                {
                    bad = shortname;
                }
                else
                {
                    bad = longname;
                }
            }
        }
        if (city == '')
        {
            if (good != '')
            {
                city = good;
            }
            else
            {
                city = bad;
            }
        }
    }
    if (isNullOrWhitespace(city) && isNullOrWhitespace(state))
    {
        return 'N/A';
    }
    if (isNullOrWhitespace(city))
    {
        return state;
    }
    else if (isNullOrWhitespace(state))
    {
        return city;
    }
    return (city + ', ' + state)
}
4

2 に答える 2

2

疑問符の付いたダッシュの存在を考慮すると、これは文字セットの問題であり、Googleが疑問符を送り返す場合ではない可能性が非常に高いようです。(サイトがUTF-8を文字セットとして指定していることをどの程度確信していますか?)国際化を気にしない場合はlanguage、URLのパラメーターを使用して結果を英語に強制することで問題を回避できます(以下を参照)。 。もちろん、これは理想的ではありませんが、一部の用途では許容できる場合があります。

上記の回避策が受け入れられない可能性がある場合は、 http://maps.googleapis.com/maps/api/geocode/json?latlng = 60.0486851,30.3197483&sensor = true&language = ruの結果を使用してコードを実行してみてください(注さまざまなブラウザでlanguageパラメータを最後に追加して、ロシア語のデータを強制的に返すようにし、疑問符の問題を再現できるかどうかを確認します。(ユーザーが問題を経験したときに使用していたブラウザー/プラットフォームがわかっている場合は、なおさらです。)

于 2011-07-10T07:52:09.053 に答える
0

たぶん、その人の応答はキリル文字または他の言語でコンテンツが返され、あなたの文字セットは適切なものではありませんか?

于 2011-07-07T18:24:06.633 に答える