问题:我无法在谷歌地图上显示标记。我希望用户单击要显示的标记,并将地图置于标记的中心。
损坏内容:单击时不显示标记。地图下方的lat/long div也不显示。
工作原理:地图将显示,并正确居中于单击位置。变量mapClicked
更新为true
。
自我诊断:我认为这个问题源于vm.map
的范围问题,或者对vm.map
的更改在AngularJS生命周期中没有被消化。
第三方包:我使用角谷歌地图。
我的代码片段:
超文本标记语言:
<ui-gmap-google-map id="listingMap"
center='listingCtrl.map.center'
zoom='listingCtrl.map.zoom'
events='listingCtrl.map.events'
style="height: 250px; width: 100%">
<ui-gmap-marker ng-if="listingCtrl.mapClicked"
coords="listingCtrl.map.marker"
idKey=" 'userClickLocation' ">
</ui-gmap-marker>
</ui-gmap-google-map>
<div class="col-xs-12" ng-if="listingCtrl.map.marker.latitude">
<span style="font-weight: bold">Latitude: </span>{{ listingCtrl.map.marker.latitude }}
<span style="font-weight: bold">Longitude: </span>{{ listingCtrl.map.marker.longitude }}
</div>
控制器:
(function () {
'use strict';
angular.
module('boat').
controller('NewListingController', NewListingController);
function NewListingController() {
var vm = this;
vm.activePage = 1;
vm.map = getMap();
vm.mapClicked = false;
////////////////////
function getMap() {
var map = {
center: {latitude: 20.9, longitude: -78.1},
zoom: 5,
marker: {},
events: {
click: function (map, eventName, originalEventArgs) {
var e = originalEventArgs[0];
map.marker = {latitude: e.latLng.lat(), longitude: e.latLng.lng()};
map.panTo(new google.maps.LatLng(map.marker.latitude, map.marker.longitude));
vm.mapClicked = true;
}
}
};
return map;
}
}
})();
概述:所需的行为是用户单击地图以添加标记。坐标应呈现在地图下方。地图应该以点击为中心。其他单击会更新单个标记和坐标。
你能帮忙吗?
问题在于,单击事件处理程序上的map
参数与getMap函数中名为map
的现有局部变量冲突。
只需将单击
事件处理程序参数更改为mapObject
并调用panTo
即可修复此问题。
// ...
click: function(mapObject, eventName, originalEventArgs) {
/*^^^^^*/
var e = originalEventArgs[0];
map.marker = {
latitude: e.latLng.lat(),
longitude: e.latLng.lng()
};
mapObject.panTo(new google.maps.LatLng(map.marker.latitude, map.marker.longitude));
/*^^^^^*/
vm.mapClicked = true;
}
// ...
JS处理修复程序。
或查看下面的代码片段。
angular.module('boat', ['nemLogging', 'uiGmapgoogle-maps']);
(function() {
'use strict';
angular.
module('boat').
controller('NewListingController', NewListingController);
function NewListingController() {
var vm = this;
vm.activePage = 1;
vm.map = getMap();
vm.mapClicked = false;
////////////////////
function getMap() {
var map = {
center: {
latitude: 20.9,
longitude: -78.1
},
zoom: 5,
marker: {},
events: {
click: function(mapObject, eventName, originalEventArgs) {
var e = originalEventArgs[0];
map.marker = {
latitude: e.latLng.lat(),
longitude: e.latLng.lng()
};
mapObject.panTo(new google.maps.LatLng(map.marker.latitude, map.marker.longitude));
vm.mapClicked = true;
}
}
};
return map;
}
}
})();
.angular-google-map-container {
height: 150px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdn.rawgit.com/nmccready/angular-simple-logger/master/dist/browser.js"></script>
<script src="//maps.googleapis.com/maps/api/js?sensor=false"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-google-maps/2.2.1/angular-google-maps.min.js"></script>
<div ng-app="boat">
<div ng-controller="NewListingController as listingCtrl">
<!-- CODE IN QUESTION BEGINS -->
<ui-gmap-google-map id="listingMap" center='listingCtrl.map.center' zoom='listingCtrl.map.zoom' events='listingCtrl.map.events' style="height: 250px; width: 100%">
<ui-gmap-marker ng-if="listingCtrl.mapClicked" coords="listingCtrl.map.marker" idKey=" 'userClickLocation' "></ui-gmap-marker>
</ui-gmap-google-map>
<div class="col-xs-12" ng-if="listingCtrl.map.marker.latitude"> <span style="font-weight: bold">Latitude: </span>{{ listingCtrl.map.marker.latitude }} <span style="font-weight: bold">Longitude: </span>{{ listingCtrl.map.marker.longitude }}</div>
<!-- CODE IN QUESTION ENDS -->
</div>
</div>
我使用的谷歌地图api如下: 这需要拉特和lng,地图画得很好,但是当新的拉特 我想在不重新绘制地图的情况下更新地图上的标记。
我一直在寻找关于实现OnMarkerClickListener的帮助,但我发现什么都没用。这是我下面的标记,单击它只会更改颜色(浅蓝色)。我希望它能打开一个更大的窗口,这样我可以输入更多的信息。这可能吗? 上面的标记在我的地图上工作得很好,但现在我想点击标记,让它打开一个新的活动/页面或一个更大的窗口,这是最容易使用的。由于我是制作应用程序的真正新手,如果有人成功获得了一个工作示例,请您提供一个链
我需要一些帮助来绘制我正在绘制的地图。地图并不特别复杂,因为我是一个初学者,我有一堆带有信息窗口的标记(完成后还会有更多标记),单击标记或选择页面HTML端下拉菜单的相应项时可以打开这些标记。 当信息窗口打开时(在HTML菜单中单击或选择),我想做但自己找不到的是在地图上自动居中标记。我假设有某种函数可以分配给click或infowindow打开事件,但无法确定是哪种函数以及如何实现它。 我的代码
我有一个函数,以一个地名作为输入,并在谷歌地图上那个地方的lat和lng位置下降一个pin。它还使用lat和lng位置设置边界,将pin设置为Viewport。一切都很好,但旧的标记没有得到清除,而添加一个新的标记。我已经清除了标记数组,但它不起作用。这是我的代码
我正在将现有的交通应用程序从<code>MapView</code>升级到Google地图v2。我有两个核心要求,但从叠加到标记会带来以下问题: 要求1) -地图需要播种固定位置标记的初始层。然后再加一层标记来描绘车辆的位置。如果车辆具有相同的< code > latting ,则应始终在车站位置的顶部进行渲染。 使用覆盖<代码> MapView > < /代码,Z-Inde 但是,在使用 Goo
我想更改Google Maps上选定的标记图标,因此我有以下代码: 在这一行,我从下面得到错误: 例外情况如下: