ngCordova getCurrentLocation вызывает пустую карту Google

Я знаю, что существует множество форумов поддержки, но кажется, что ни у кого нет ответа, который я ищу. Итак, в деталях ниже мой сценарий (я разрабатываю в ионном фрейме).

Я использую ngCordova cordova-plugin-geolocation для получения моего текущего местоположения (это работает нормально):

function initialize(){
var posOptions = {timeout: 10000, enableHighAccuracy: false};

$cordovaGeolocation.getCurrentPosition(posOptions)
  .then(function(pos){
    var lat=pos.coords.latitude;
    var lng=pos.coords.longitude;
    var myLatlng = new google.maps.LatLng(lat,lng);
    initMap(myLatlng);
  }, function(err){
});}

Я проверил, что с помощью приведенного выше кода переменные lat, lng заполнены правильными значениями. Итак, следующее, что я хочу сделать, это отобразить мои карты Google, я делаю это с помощью функции initMap ниже:

function initMap(origin){
var mapOptions = {
  center: origin,
  zoom: 16,
};
$scope.map=new google.maps.Map(document.getElementById("map"),mapOptions);}

Когда я пытаюсь отобразить это изображение, я получаю только пустой экран. Кроме того, у меня есть ionic.Platform.ready(initialize); в моем коде контроллера.

ПРИМЕЧАНИЕ. Ниже приведен фрагмент кода в моем html-шаблоне:

<div id="map" ng-controller="MapCtrl">
</div>

Некоторые неудачные попытки кодирования включают:

  1. используя ng-init() вместо ionic.Platform.ready - то же пустое изображение
  2. вывод всего из строя (отчаянная попытка) - тот же пустой образ

Успешно, когда:

Я вызываю initMap напрямую с объектом Google latlong, полностью минуя операцию "getCurrentPosition", которая вложена в функцию initialize().

Любые рекомендации будут действительно оценены.


person LostJon    schedule 14.02.2016    source источник
comment
codepen.io/ionic/pen/uzngt Это должно вам помочь   -  person Paresh Gami    schedule 15.02.2016
comment
Это была одна из ссылок, которые я использовал... это мне не помогает, потому что в этом примере не используется $cordovaGeolocation.getCurrentPosition(). Я могу заставить это работать, ЕСЛИ функция getCurrentPosition() не используется.   -  person LostJon    schedule 15.02.2016
comment
К вашему сведению, я опубликовал эту проблему более подробно на другом форуме: forum.ionicframework.com/t/   -  person LostJon    schedule 19.02.2016
comment
ты решил это или нет?   -  person Paresh Gami    schedule 20.02.2016
comment
Я только что узнал сегодня утром... Требуется использование $q.defer, чтобы давать обещания получать данные и возвращать их асинхронно. Я опубликую это как ответ здесь, если вам интересно!   -  person LostJon    schedule 20.02.2016
comment
да, конечно, вы можете опубликовать ответ на свой вопрос. это полезно для меня и других также   -  person Paresh Gami    schedule 20.02.2016


Ответы (1)


Итак, проблема с моей первоначальной логикой заключалась в том, что выполнение getCurrentPosition является асинхронным вызовом, то есть он получит свои данные после полной загрузки DOM. Итак, чтобы исправить это, я использую $q.defer() для создания объекта обещания, к которому можно получить доступ позже. дополнительную информацию о том, как это сделать, можно найти на другом форуме, который я разместил:

https://forum.ionicframework.com/t/ngcordova-getcurrentposition-with-google-maps-api/44153

Удачи и счастливого кодирования!

person LostJon    schedule 22.02.2016