Ich muss eine umgekehrte Geocodierung durchführen und den Namen der Stadt aus der Breiten-/Längengradinformation erhalten.
Ich habe einen Angular-Dienst erstellt, der über $ http einen Aufruf an die Google Maps API aufruft. Von den zurückgegebenen Daten brauche ich nur den Namen der Stadt. Ich kämpfte mit der asynchronen Natur von $ http innerhalb des Angular Service. Der einzige Weg, wie ich es zum Laufen bringen konnte, war mein eigenes Versprechen mit $ q im Service zu erstellen.
Es funktioniert, aber ich bin mir nicht sicher, ob dies der richtige Weg ist, es zu tun. Jede Rückmeldung ist mehr als willkommen!
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);
});
});