Google Maps с ионной

Я пытаюсь реализовать карту с помощью Google Maps с Ionic. Я следовал кодированию в этой ссылке, но все, что я получил, это пустой экран, не знаю, где я ошибся. Пожалуйста помоги

Это контроллер

angular.module('starter', ['ionic'])

.controller('MapCtrl', function($scope, $ionicLoading, $compile) {
  function initialize() {
    var myLatlng = new google.maps.LatLng(43.07493,-89.381388);

    var mapOptions = {
      center: myLatlng,
      zoom: 16,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map"),
        mapOptions);

    //Marker + infowindow + angularjs compiled ng-click
    var contentString = "<div><a ng-click='clickTest()'>Click me!</a></div>";
    var compiled = $compile(contentString)($scope);

    var infowindow = new google.maps.InfoWindow({
      content: compiled[0]
    });

    var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'Uluru (Ayers Rock)'
    });

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.open(map,marker);
    });

    $scope.map = map;
  }
  google.maps.event.addDomListener(window, 'load', initialize);

  $scope.centerOnMe = function() {
    if(!$scope.map) {
      return;
    }

    $scope.loading = $ionicLoading.show({
      content: 'Getting current location...',
      showBackdrop: false
    });

    navigator.geolocation.getCurrentPosition(function(pos) {
      $scope.map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude));
      $scope.loading.hide();
    }, function(error) {
      alert('Unable to get location: ' + error.message);
    });
  };

  $scope.clickTest = function() {
    alert('Example of infowindow with ng-click')
  };

});

Это HTML-файл

 <script src="//maps.googleapis.com/maps/api/js?key=AIzaSyB16sGmIekuGIvYOfNoW9T44377IU2d2Es&sensor=true"></script>


<body ng-controller="MapCtrl">
<ion-header-bar class="bar-dark" >
  <h1 class="title">Map</h1>
</ion-header-bar>
<ion-content>

  <div id="map" data-tap-disabled="true"></div>
</ion-content>
<ion-footer-bar class="bar-dark">
  <a ng-click="centerOnMe()" class="button button-icon icon ion-navigate">Find Me</a>
</ion-footer-bar>
  </body>

пожалуйста помоги.

6 ответов

Решение

Я изменил несколько вещей, чтобы заставить это работать:

Вам больше не нужен ключ API для карт Google, этого достаточно для скрипта src (см. Раздел "Что такое ключ API Карт Google"):

<script src="//maps.googleapis.com/maps/api/js?sensor=false"></script>

Замените "function initialize ()" на "$ scope.init ()" и закомментируйте строку, в которой она написана:

//google.maps.event.addDomListener(window, 'load', initialize);

Также добавьте ng-init = "init ()" в ваш html следующим образом:

<ion-header-bar class="bar-dark" ng-init="init()">
    <h1 class="title">Map</h1>
</ion-header-bar>

Я не знаю, почему он не работает с domListener, но данные должны быть инициализированы перед их отображением (см. API Google MAP Uncaught TypeError: Невозможно прочитать свойство 'offsetWidth' из null). С помощью ng-init вы можете достичь этого.

Конечный контроллер должен выглядеть так:

.controller('MapCtrl', function($scope, $ionicLoading, $compile) {

    $scope.init = function() {
        var myLatlng = new google.maps.LatLng(43.07493,-89.381388);

        var mapOptions = {
          center: myLatlng,
          zoom: 16,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map"),
            mapOptions);

        //Marker + infowindow + angularjs compiled ng-click
        var contentString = "<div><a ng-click='clickTest()'>Click me!</a></div>";
        var compiled = $compile(contentString)($scope);

        var infowindow = new google.maps.InfoWindow({
          content: compiled[0]
        });

        var marker = new google.maps.Marker({
          position: myLatlng,
          map: map,
          title: 'Uluru (Ayers Rock)'
        });

        google.maps.event.addListener(marker, 'click', function() {
          infowindow.open(map,marker);
        });

        $scope.map = map;
    };

    // google.maps.event.addDomListener(window, 'load', initialize);

    $scope.centerOnMe = function() {
        if(!$scope.map) {
            return;
        }

        $scope.loading = $ionicLoading.show({
          content: 'Getting current location...',
          showBackdrop: false
        });

        navigator.geolocation.getCurrentPosition(function(pos) {
          $scope.map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude));
          $scope.loading.hide();
        }, function(error) {
          alert('Unable to get location: ' + error.message);
        });
    };

    $scope.clickTest = function() {
        alert('Example of infowindow with ng-click')
    };
});

Надеюсь, это помогло!

Или просто замени это

google.maps.event.addDomListener(window, 'load', initialize);

за это

ionic.Platform.ready(initialize);

ссылка http://codepen.io/mircobabini/developer/ionic-google-maps-nightly

Если вы используете последнюю версию Ionic, скорее всего, при развертывании на Android вы увидите пустой экран, но вы увидите карту, когда вы запустите решение в веб-браузере. Чтобы решить проблему, вам нужно добавить плагин белого списка, запустите: ionic plugin add cordova-plugin-whitelist.

Я решил это, установив в:

<ion-content ng-controller="MapCtrl">
    <div id="map" data-tap-disabled="true"></div>
</ion-content>

и тогда вам придется сделать:

.controller('MapCtrl', function($scope, $ionicLoading) {

    google.maps.event.addDomListener(window, 'load', function() {
        var newLatlng = new google.maps.LatLng(53.5000, -113.4300);

        var mapOptions = {
            center: newLatlng,
            zoom: 15,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map"), mapOptions);

        navigator.geolocation.getCurrentPosition(function(pos) {
            map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude));
            var myLocation = new google.maps.Marker({
                position: new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude),
                map: map,
                title: "My Location"
            });
        });

        $scope.map = map;
    });

});

Ссылка от: Реализация Google Maps с использованием Ionic Framework

Вы можете использовать плагин angularjs-google-maps (ngmap), созданный для angularjs. Работает на ионные. Это дает вам возможность использовать Google Map v3.

https://github.com/allenhwkim/angularjs-google-maps

Проверьте этот проект на GitHub

http://angular-ui.github.io/angular-google-maps/

Он использует директивы Angular.js для предоставления API-интерфейсов для значительной части функциональности Карт Google.

Другие вопросы по тегам