Как преобразовать название города или штата в почтовый индекс

Как я могу преобразовать название города или штата в почтовый индекс в javascript или angularjs с помощью Geocoder API или каким-либо другим способом? Из пользовательского ввода я хочу преобразовать его.


person Mou    schedule 24.05.2013    source источник
comment
Вы показываете карту Google? (Если нет, у меня есть несколько предложений.)   -  person Matt    schedule 25.05.2013


Ответы (4)


Вот пример фабрики:

feederliteModule.factory('maps', ['$q', function ($q) {
var geocoder = new google.maps.Geocoder();
return {
    geocode: function (address) {
        var deferred = $q.defer();

        geocoder.geocode({
            'address': address
        }, function (results, status) {
            deferred.resolve(results);
        // Should also reject if AJAX errors.
        });

        return deferred.promise;
    }
  };
}]);

где address вводится.

Результат должен быть в виде json, где вы можете найти почтовый индекс:

 ...
 {
    "long_name": "168751",
    "short_name": "168751",
    "types": [
      "postal_code"
    ]
  }
   ...

Теперь вы можете вызвать его из контроллера, например:

 maps.geocode(address)
person Maxim Shoustin    schedule 24.05.2013
comment
Максим, помимо модульности и возможности повторного использования, есть ли какое-то конкретное преимущество или причина, по которой эти коды должны быть помещены на заводе? - person Matty J; 11.06.2013

Спасибо вам всем. Решил ..... :) Вот код:

function getCity (options) {

var geocoder = new google.maps.Geocoder(),
    request;

if( options.latitude ) {

    request= { 'latLng': new google.maps.LatLng( options.latitude, options.longitude ) };

} else {

    request= { 'address': options.address };

};

geocoder.geocode( request, function( results, status ) {

    if ( status == google.maps.GeocoderStatus.OK ) {

        console.log( results );

       geocoder.geocode( request, function( results, status ) {

        if ( status == google.maps.GeocoderStatus.OK ) {

            console.log( results );


            var latitude = results[0].geometry.location.jb;
            var longitude = results[0].geometry.location.kb;
                var  latlng = new google.maps.LatLng(latitude, longitude)

                alert(latlng);

                geocoder.geocode({'latLng': latlng}, function(results, status) {

                    //no result, check addresses
                    for( var resultIndex = 0; resultIndex < results.length; resultIndex++ ) {

                        var addresses = results[resultIndex].address_components;

                        for( var addressIndex = 0; addressIndex < addresses.length; addressIndex++ ) {

                            var types = addresses[addressIndex].types;

                            for( var typeIndex = 0; typeIndex < types.length; typeIndex++ ) {

                                if( types[typeIndex] == 'postal_code' ) {
                                    alert(addresses[addressIndex].long_name) ;
                                    return;

                                };

                            };

                        };

                    };


                });


    } else {

        console.log( 'error: ' + status );
       // complete();

    };

});

};

person Mou    schedule 27.05.2013

У Google для этого есть отличный API. Ознакомьтесь с этой веткой Stack Overflow о получении почтового индекса из названия города с помощью GoogleAPI: Самый простой способ получить почтовый индекс по названию города

person Thomas Fonseca    schedule 24.05.2013
comment
Пока вы используете Google Map, все в порядке, в противном случае это противоречит их TOS. - person Matt; 25.05.2013

Конечно, почтовый индекс не обязательно связан с местом, но с маршрутом доставки. USPS контролирует почтовые индексы и меняет их по мере необходимости для повышения эффективности доставки почты. Многие люди ожидают, что почтовый индекс точно представляет определенный город или район в городе, но он не статичен. Из 42 000 5-значных почтовых индексов в США примерно 4% меняются каждый месяц, поэтому, где бы вы ни получали данные о вашем городе / штате / почтовом индексе, убедитесь, что они обновляются USPS ежемесячно.

Помимо карт Google существует множество коммерческих сервисов, которые предоставляют то, что вы ищете. Быстрый поиск в Google по запросу "zip code api" поможет.

person Jeffrey    schedule 25.05.2013