【问题标题】:plugin.google.maps not working on iOS but working on Androidplugin.google.maps 不适用于 iOS 但适用于 Android
【发布时间】:2014-09-10 05:41:30
【问题描述】:

假设我有这个控制器(这是一个 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. 您会看到一个对话框,其中包含所选位置的地图。您会将位置视为标记。

我正在使用Phonegap Google Maps Plugin,这给我带来了很多麻烦。

核心在gmap 函数中,它被放置为每个菜单元素的点击处理程序。它是这样进行的:

  1. 创建地图(或获取地图 - 它是单例)。
  2. 清理它(删除以前的事件侦听器和标记)。
  3. 当地图准备好时,它将(对于所选位置的每个坐标):
    • 使用按参数坐标、按参数标题、按参数 sn-p 和固定的自定义图像创建标记。
    • 为标记分配一个点击事件处理程序。此类处理程序可确保单击时仅出现一个弹出对话框(以前的对话框已关闭)。
    • 创建的标记被添加到标记列表中(它不是一个实际存在的属性,而是我为此目的而创建的)。
    • 获得标记位置,并在该位置扩展边界集。背后的想法是让一个“正方形”能够看到所有指定的坐标。如果当前标记是最后一个,则地图必须以边界的中心为中心,以便看到每个标记。
  4. 显示对话框。

在 Android 中,这就像一个魅力。在 iOS 中根本不工作:显示对话框但没有设置标记,没有看到自定义图像,并且没有在任何设置的边界上进行居中。

:是什么搞砸了?我对这个插件有点陌生。

【问题讨论】:

  • 感谢您使用我的插件。我只是想确认地图是否为空白?您可以使用phonegap-tips.com/articles/… 检查 JS 错误
  • 地图不是空白的。正在工作,但未加载标记(并且应用程序从未获得焦点)
  • 还有另一个问题:安装插件需要变量,并且稍后添加cordova平台会中断,因为插件无法添加到该新平台,因为未指定变量。我该如何解决这个问题? IT 似乎不是您插件的特定问题,而是cordova 的设计错误。
  • 我明白了...嗯,我需要更多信息来检测问题所在。
  • 嗯,关于目前的错误,没有我给你的更多信息。也许我可以添加一些标记。

标签: angularjs google-maps cordova


【解决方案1】:

你能试试下面的命令吗?

$> 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多