谷歌地图api检查标记在绑定范围内
Google map api check marker is within the bound
尝试检查标记是否在绑定内并触发onclick事件。但是使用getPosition()和contain()尝试检查标记是否在绑定范围内时运气不佳。
有人能指出如何检查标记是否在绑定中吗?
function _onMapZoom () {
console.log('testing')
if(map.zoom < mcOptions.maxZoom){
return;
}
var mapMarkers = oms.markersNearAnyOtherMarker();
if (mapMarkers.length <= 0) {
return;
}
var bounds = map.getBounds();
var ne = bounds.getNorthEast(); // LatLng of the north-east corner
var sw = bounds.getSouthWest(); // LatLng of the south-west corner
var nw = new google.maps.LatLng(ne.lat(), sw.lng());
var se = new google.maps.LatLng(sw.lat(), ne.lng());
for (var i = 0; i < mapMarkers.length; i++) {
var element = mapMarkers[i];
//CHECK IF LAT LON OF MARKER IS WITHIN BOUNDS
var markerIsOrNotInBounds = map.getBounds().contains(mapMarkers.getPosition());
console.log(markerIsOrNotInBounds)
if (markerIsOrNotInBounds) {
continue;
}
gm.event.trigger(marker[i], 'click');
}
}
可能只有一组蜘蛛状标记,此外,单击一个蜘蛛状标记将取消当前蜘蛛状标记组的蜘蛛状标记。
解决方案:当点击被触发时,立即离开该功能。
google.maps.event.addDomListener(window,'load',function() {
var gm = google.maps,
map = new gm.Map(document.getElementById('map_canvas'), {
center: new gm.LatLng(50, 0),
zoom: 6
}),
oms = new OverlappingMarkerSpiderfier(map,
{markersWontMove: true, markersWontHide: true}),
places=[{lat:50,lng:0},{lat:51,lng:-1},{lat:50,lng:1}];
//some random markers
for(var p=0;p<places.length;++p){
for (var i = 0; i < 10; i++) {
(function(index){
var marker=new gm.Marker({map:map,
position:{lat:(Math.random()*.1)+places[p].lat,
lng:(Math.random()*.1)+places[p].lng}});
oms.addMarker(marker);
})(i)
}
}
function _onMapZoom () {
var bounds = map.getBounds(),
markers = oms.markersNearAnyOtherMarker();
for(var i=0;i<markers.length;++i){
if(//when marker is within map-bounds
bounds.contains(markers[i].getPosition())
){
gm.event.trigger(markers[i],'click',{latLng:markers[i].getPosition()});
//no need to trigger further clicks
return;
}
}
}
//wait until map-projection is available until you set the listener
gm.event.addListenerOnce(map,'idle',function(){
gm.event.addListener(this,'zoom_changed',_onMapZoom)
gm.event.trigger(this,'zoom_changed');
});
});
html,body,#map_canvas{height:100%;margin:0;padding:0}
<script src="http://maps.google.com/maps/api/js?v=3.9&sensor=false"></script>
<script src="http://jawj.github.io/OverlappingMarkerSpiderfier/bin/oms.min.js"></script>
<div id="map_canvas"></div>
相关文章:
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- Knockout.js绑定范围
- 如果指令包含在另一个指令中,我如何在隔离范围内添加双向数据绑定属性
- 内联此范围'绑定'
- 使用d3.js在绑定数据内数组(以恒定性动态生成d3.svg.line)
- 谷歌地图api检查标记在绑定范围内
- 角度.js指令模板 URL 无法绑定范围
- 在闭包中自动绑定范围变量
- jQuery插件样板 - 具有绑定范围的私有方法
- 在 HTML 模板中使用短划线绑定范围属性
- Angularjs 数学在绑定范围对象上
- AngularJS:选择不会更改绑定范围变量时的选定选项
- 绑定 JavaScript:内联或外部(或脚本)
- angular.js指令双向绑定范围更新
- 从外部绑定范围访问knockoutjs ViewModel
- 有没有可能保护'this'引用绑定对象内的函数
- 绑定范围外的变量可以加快代码的速度吗
- 通过指令将元素添加到 DOM 并从控制器绑定范围监视(角度.js)
- 无法在 AngularJS 中绑定范围变量
- CoffeeScript:使用函数绑定的内联调用委派