2015-04-22 78 views
1

嗯,我有這個問題,加載地圖一次,一切工作完美。第二次或一旦更新地圖不加載好,但在導航時沒有居中加載,您可以看到已製作但已變形或完全丟失的標記。谷歌地圖中心加載失敗

我已經嘗試了幾種方法來解決這個問題,首先和最常見的我發現是使用google.maps.event.trigger(map 'resize'),但它並沒有工作,然後邏輯,嘗試每當加載地圖執行,創建一個新的地圖,具有相同的數據並專注,但都不適合我。這也可能是我使用地圖的方式。我在我的應用程序中使用相機的插件,用戶拍攝照片,這應該檢測我在哪裏繪製圖片並顯示地圖。每次打開視圖時,攝像頭的插頭,在拍攝和顯示圖片的過程中,我都會調用相應的函數來加載地圖,這使我有點棘手,立即加載我有一個很好的時間鎖定在這個問題,我發現解決方案服務於我,但只爲瀏覽器,設備不起作用。我正在使用離子框架和插件cordova。

img

控制器:

.controller("CamaraCtrl", function($scope,$rootScope, Camera,$cordovaGeolocation,$state,$location,$ionicSideMenuDelegate) { 
    var posOptions = {timeout: 10000, enableHighAccuracy: false}; 
$cordovaGeolocation 
    .getCurrentPosition(posOptions) 
    .then(function (position) { 
    var latitud_actual = position.coords.latitude 
    var longitud_actual = position.coords.longitude 
    $scope.latitud = latitud_actual; 
    $scope.longitud = longitud_actual; 
      //$scope.map = new google.maps.Map(document.getElementById("mapa_ubicacion"), mapOptions); 
    }, function(err) { 
    // error 
    }); 

    function initialize() { 
var mapOptions = { 
    center: new google.maps.LatLng($scope.latitud, $scope.longitud), 
       zoom: 15, 
       mapTypeId: google.maps.MapTypeId.ROADMAP, 
       scrollwheel: false 
}; 
var map = new google.maps.Map(document.getElementById("map"), 
    mapOptions); 
$scope.setMarker(map, new google.maps.LatLng($scope.latitud, $scope.longitud), 'Yo', ''); 
$scope.map = map; 
} 
$scope.setMarker = function(map, position, title, content) { 
    var marker; 
    var markerOptions = { 
     position: position, 
     map: map, 
     title: title 
    }; 

    marker = new google.maps.Marker(markerOptions); 

    google.maps.event.addListener(marker, 'click', function() { 
     // close window if not undefined 
     if (infoWindow !== void 0) { 
      infoWindow.close(); 
     } 
     // create new window 
     var infoWindowOptions = { 
      content: content 
     }; 
     infoWindow = new google.maps.InfoWindow(infoWindowOptions); 
     infoWindow.open(map, marker); 
    }); 
} 
$scope.mostrar_form = false; 
$scope.mostrar_boton_view = false; 
$scope.getPhoto = function() { 
Camera.getPicture().then(function(imageURI) { 
    console.log(imageURI); 
    $scope.lastPhoto = imageURI; 
    $scope.mostrar_form = true; 
    $scope.mostrar_boton_view = false; 
    google.maps.event.addDomListener(window, 'load', initialize); 
    initialize(); 
}, function() { 
    $scope.mostrar_boton_view = true; 
}, { 
    quality: 75, 
    targetWidth: 320, 
    targetHeight: 320, 
    saveToPhotoAlbum: false 
    }); 
}; 
    $scope.getPhoto(); 
}) 

回答

0

我發現的唯一的解決方案是創建一個再次進行地圖的功能。它不應該是最佳的,但至少它解決了我的問題。

$scope.centrar = function(){ 
    var mapOptions = { 
    center: new google.maps.LatLng($scope.latitud, $scope.longitud), 
       zoom: 15, 
       mapTypeId: google.maps.MapTypeId.ROADMAP, 
       scrollwheel: false 
    }; 
    var map = new google.maps.Map(document.getElementById("map"), 
    mapOptions); 
    $scope.setMarker(map, new google.maps.LatLng($scope.latitud, $scope.longitud), 'Yo', ''); 
    $scope.map = map; 
}