plugin.google.maps无法在iOS上运行但在Android上运行

时间:2014-09-08 21:28:42

标签: angularjs google-maps cordova

假设我有这个控制器(这是Cordova / AngularJS应用程序):

var Application_MapLocations = index.controller('Application.MapLocations', ['$scope', '$rootScope', '$state', function($s, $rs, $state){

    function gmap() {
        var ctx = this;
        var map = plugin.google.maps.Map.getMap();
        map.removeEventListener();
        if (map.markers) {
            angular.forEach(map.markers, function(marker) {
                marker.remove();
            });
        }
        map.markers = [];
        var bounds = new plugin.google.maps.LatLngBounds();
        var boundsLength = 0;
        map.addEventListener(plugin.google.maps.event.MAP_READY, function(map){
            angular.forEach(ctx.points, function(value) {
                map.addMarker({
                    position: new plugin.google.maps.LatLng(value.lat, value.lng),
                    title: value.title,
                    snippet: value.snippet,
                    icon: 'www/img/map_point.png'
                }, function(marker){
                    marker.addEventListener(plugin.google.maps.event.MARKER_CLICK, function() {
                        angular.forEach(map.markers, function(marker) {
                            marker.hideInfoWindow();
                        });
                        marker.showInfoWindow();
                    });
                    map.markers.push(marker);
                    marker.getPosition(function(pos){
                        bounds.extend(pos);
                        if (map.markers.length == ++boundsLength) {
                            map.setCenter(bounds.getCenter());
                            map.setZoom(17);
                        }
                    });
                });
            });
        });
        map.showDialog();
    }
    $s.buttons = [
        {id:'btn-section', text:'Seleccione ubicación', section: true, click: function(){ }},
        {id:'carrion', text:'Carrión', section: false, click: gmap, points: [
            {lat: -0.20208, lng: -78.497047, title:"Carrión", snippet:'Dirección: Carrión 1030 y Av. 10 de Agosto\nTeléfonos: 098-742-2271, 02-256-2526, 02-254-3143, 02-290-2434\nFax: 02-256-2385\nContacto: Javier Morquecho dmorquecho@casabaca.com 098-7422271, Dickran Coronel dcoronel@casabaca.com 099-822-2475'}
        ]},
        {id:'cumbaya', text:'Cumbayá', section: false, click: gmap, points: [
            {lat: -0.196783, lng: -78.440718, title:"Cumbayá", snippet:'Dirección: Vía Interoceánica Km 141/2\nTeléfonos: 098-742-2271, 02-204-0078, 02-289-0038\nContacto: Jofrey Lopez jlopez@casabaca.com 098-640-1447'}
        ]},
        /* *** more place > coortinates here *** */
    ];
    /* *** more code here *** */
}]);

属于一个视图,其任务是显示我选择的每个位置的地图。

$scope.buttons中(实际上服务的别名为$s)我保存了一个位置列表(它们是文字对象,其中包含详细描述坐标的数据和用于渲染的附加数据)。每个地方都有坐标。它的机制是这样的:

  1. 你看到了菜单。
  2. 点击某个项目。
  3. 您会看到包含所选位置地图的对话框。你会看到这些位置作为标记。
  4. 我使用Phonegap Google Maps Plugin导致了很多麻烦。

    核心位于gmap函数中,该函数作为每个菜单元素的单击处理程序放置。它继续这样:

    1. 创建一个地图(或获取它 - 它是一个单身人士)。
    2. 清除它(删除以前的事件侦听器和标记)。
    3. 当地图准备好后,它将(对于所选地点的每个坐标):
      • 使用by-param坐标,by-param标题,by-param片段和固定的自定义图像创建标记。
      • 为标记分配单击事件处理程序。这样的处理程序确保在单击时只显示一个弹出对话框(之前的对话框已关闭)。
      • 创建的标记将添加到标记列表中(它不是实际的,存在的属性,而是我为此目的创建的属性)。
      • 获得标记位置,并在该位置上扩展边界集。背后的想法是得到一个" square"能够看到所有指定的坐标。如果当前标记是最后一个,则地图必须以边界的中心为中心,以便看到每个标记。
    4. 显示对话框。
    5. 在Android中,这就像魅力一样。在iOS中根本不起作用:显示对话框但没有设置标记,没有看到自定义图像,也没有在任何边界集上居中。

      :什么可能搞砸了?我对这个插件不知何故。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下命令吗?

$> cordova plugin rm plugin.google.maps
$> cordova platform rm ios
$> cordova platform add ios android
$> cordova plugin add plugin.google.maps --variable API_KEY_FOR_ANDROID= --variable API_KEY_FOR_IOS=
$> ./platforms/ios/cordova/clean