? отметки из обратного геокодированного ответа - PullRequest
3 голосов
/ 07 июля 2011

Итак, кто-то из России сделал обратный геокодировочный ответ с моего сайта. Я анализирую Json и объединяю город и штат в одну строку на стороне клиента. Это то, что конкатенированная строка оказалась:

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

Есть ли ситуации, когда 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)
}

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Учитывая наличие тире с вопросительными знаками, представляется весьма вероятным, что это проблема набора символов, а не случай, когда Google отправляет обратно вопросительные знаки. (Насколько вы уверены, что ваш сайт указывает UTF-8 в качестве своей кодировки?) Если вас не волнует интернационализация, вы можете обойти эту проблему, принудительно переведя результаты на английский язык с параметром language в URL ( увидеть ниже). Это, конечно, не идеально, но может быть приемлемо для некоторых применений.

В вероятном случае, если вышеуказанный обходной путь неприемлем, попробуйте запустить свой код с результатами из http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true&language=ru (обратите внимание, что параметр language был добавлен в конец, чтобы заставить его возвращать русскоязычные данные ) в различных браузерах, чтобы увидеть, если вы можете повторить проблему с вопросительным знаком. (Если вы знаете, какой браузер / платформу использовал пользователь, когда столкнулся с проблемой, тем лучше.)

0 голосов
/ 07 июля 2011

Может быть, ответ этого человека был возвращен на кириллице или на каком-либо другом языке, и ваша кодировка не соответствует действительности?

...