【发布时间】: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)中,我保存了一个地点列表(它们是文字对象,其中包含详细说明坐标的数据和用于渲染的其他数据)。每个地方都有坐标。它的机制是这样的:
- 您会看到菜单。
- 您点击一个项目。
- 您会看到一个对话框,其中包含所选位置的地图。您会将位置视为标记。
我正在使用Phonegap Google Maps Plugin,这给我带来了很多麻烦。
核心在gmap 函数中,它被放置为每个菜单元素的点击处理程序。它是这样进行的:
- 创建地图(或获取地图 - 它是单例)。
- 清理它(删除以前的事件侦听器和标记)。
- 当地图准备好时,它将(对于所选位置的每个坐标):
- 使用按参数坐标、按参数标题、按参数 sn-p 和固定的自定义图像创建标记。
- 为标记分配一个点击事件处理程序。此类处理程序可确保单击时仅出现一个弹出对话框(以前的对话框已关闭)。
- 创建的标记被添加到标记列表中(它不是一个实际存在的属性,而是我为此目的而创建的)。
- 获得标记位置,并在该位置扩展边界集。背后的想法是让一个“正方形”能够看到所有指定的坐标。如果当前标记是最后一个,则地图必须以边界的中心为中心,以便看到每个标记。
- 显示对话框。
在 Android 中,这就像一个魅力。在 iOS 中根本不工作:显示对话框但没有设置标记,没有看到自定义图像,并且没有在任何设置的边界上进行居中。
问:是什么搞砸了?我对这个插件有点陌生。
【问题讨论】:
-
感谢您使用我的插件。我只是想确认地图是否为空白?您可以使用phonegap-tips.com/articles/… 检查 JS 错误
-
地图不是空白的。正在工作,但未加载标记(并且应用程序从未获得焦点)
-
还有另一个问题:安装插件需要变量,并且稍后添加cordova平台会中断,因为插件无法添加到该新平台,因为未指定变量。我该如何解决这个问题? IT 似乎不是您插件的特定问题,而是cordova 的设计错误。
-
我明白了...嗯,我需要更多信息来检测问题所在。
-
嗯,关于目前的错误,没有我给你的更多信息。也许我可以添加一些标记。
标签: angularjs google-maps cordova