@id194695811

Как динамически получить lat и lon координаты?

Всем доброго!
Есть приложение показывающее текущее местоположение на карте (по полученным из JSON API координатам).
Эту функцию оно в общем то выполняет.
Но есть идея добавить на карту точки-достопримечательности. Она на самом деле тоже уже реализована но есть проблема, на данный момент lat и lon необходимо вводить самому.
Вот код который отвечает за получение этих самых данных по lat и lon:
app.factory('places', ['$http', function($http) {

    return $http.jsonp('https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=5000&gscoord=' + 43.1056 + '%7C' + 131.8735 + '&gslimit=30&format=json&callback=JSON_CALLBACK')
        .success(function(data) {
            return data
        })
        .error(function(err) {
            return err
        })

}])

А хотелось бы получать эти координаты динамически из какого нибудь стороннего JSON API, скажем ip-api.com/json
Была идея сделать так
app.factory('places', ['$http', '$scope', function($http, $scope) {

	$scope.coordinates = {};
	$http.get('http://ip-api.com/json')
		.success(function(data) {
			$scope.coordinates.lat = data.lat;
			$scope.coordinates.lon = data.lon;
		});

    return $http.jsonp('https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=5000&gscoord=' + coordinates.lat + '%7C' + coordinates.lon + '&gslimit=30&format=json&callback=JSON_CALLBACK')
        .success(function(data) {
            return data
        })
        .error(function(err) {
            return err
        })

}])

или так
app.factory('places', ['$http', function($http) {

	$http.get('http://ip-api.com/json')
		.success(function(coordinates) {
			   return $http.jsonp('https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=5000&gscoord=' + coordinates.lat + '%7C' + coordinates.lon + '&gslimit=30&format=json&callback=JSON_CALLBACK')
        		.success(function(data) {
            		return data
        		})
        		.error(function(err) {
            		return err
        		})
		});

}])

но этот способ не работает. Не могли бы вы подсказать как можно это сделать?
Если необходимо посмотреть все приложение полностью (весь код), то можете скачать исходники по этой ссылке https://cloud.mail.ru/public/Jpa6/e82QUcSKY На github пока что не заливал.
  • Вопрос задан
  • 892 просмотра
Пригласить эксперта
Ответы на вопрос 1
@mmxdesign
Software Engineer
Ваш второй callback неуспевает получить данные геолокации и запускается без координат скорее всего.
попробуйте такой вариант с использованием блока finally.

app.factory('places', ['$http', '$scope', function($http, $scope) {

  $scope.coordinates = {};
  $http.get('http://ip-api.com/json')
    .success(function(data) {
      $scope.coordinates.lat = data.lat;
      $scope.coordinates.lon = data.lon;
    })
    .finally(function(){

        $http.jsonp('https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=5000&gscoord=' + coordinates.lat + '%7C' + coordinates.lon + '&gslimit=30&format=json&callback=JSON_CALLBACK')
        .success(function(data) {
            return data
        })
        .error(function(err) {
            return err
        })

    })
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы