Мне нужно сделать обратное геокодирование и получить название города по широте/долготе информации.
Я создал услугу «Угловая», которая звонит в карты Google api через $ http. Из возвращаемых данных мне нужно только название города. Я боролся с асинхронным характером $ http в службе Angular. Единственный способ, которым я мог его запустить, - это создать свое собственное обещание с помощью $ q в сервисе.
Это работает, но я не уверен, что это правильный способ сделать это. Любая обратная связь более чем приветствуется!
var app = angular.module('devApp', []);
app.factory('reverseGeoCoder', function($http, $q) {
var service = {
getAddress: function(lat, lng) {
var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' +lng;
var deferred = $q.defer();
$http.get(url).then(function(data) {
// extract the address and return it to the caller
deferred.resolve(data.data.results[0].formatted_address);
}, function(reason) {
deferred.reject(reason);
});
return deferred.promise;
}
};
return service;
});
app.controller('mainController', function(reverseGeoCoder) {
var vm = this;
reverseGeoCoder.getAddress(47.353166, 8.558387).then(function(data) {
vm.address = data;
}, function(reason) {
console.log('reverse geocoding failed, reason: ' + reason);
});
});