我想知道我的"逻辑"是正确的。 我使用 addGeoJson 使用geojson对象在地图上加载不同的数据。 使用此方法标记和多边形会自动绘制,这很好但是如何从地图外部访问它们?
没有任何问题,我只想获得所有几何类型的所有标记" Point"将它们存储在一个数组中,以便能够从地图外部触发它们并启动一个infowindow例如。
我在文档中没有找到任何内容,因此我使用下面的代码删除标记然后创建相同的标记并将它们添加到 markers 数组。
// add GeoJson datas
map.data.addGeoJson($.parseJSON(Config.polygon));
var bounds = new google.maps.LatLngBounds(),
markers = [];
map.data.forEach(function(feature){
if(feature.getGeometry().getType() === 'Polygon'){
feature.getGeometry().forEachLatLng(function(latlng){
bounds.extend(latlng);
});
}else if(feature.getGeometry().getType() === 'Point'){
var LatLng = feature.getGeometry().get(),
id = feature.getProperty('id'),
icon = Config.templateDirectoryUri+feature.getProperty('icon'),
marker = new google.maps.Marker({
position: LatLng,
map: map,
id: id,
icon: icon,
});
markers[id] = marker;
// load infowindow
IDV.mapInfoWindowHTML(feature, map, marker);
// remove previous markers from map.data
map.data.remove(feature);
}
});
// bounds gmap window to polygons boundaries
map.fitBounds(bounds);
之后从我的" .property"触发我的标记没问题。使用jQuery和数据属性的类。
$('.property').on('click', function () {
if($(this).data('markerid') !== 0){
google.maps.event.trigger(markers[$(this).data('markerid')], 'click');
}
})
.mouseenter(function() {
if($(this).data('markerid') !== 0){
markers[$(this).data('markerid')].setAnimation(google.maps.Animation.BOUNCE);
}
})
.mouseleave(function() {
if($(this).data('markerid') !== 0){
markers[$(this).data('markerid')].setAnimation(null);
}
});
我的问题很简单,有人知道更有效的方式直接在map.data中存储标记,而不必再次添加它们(new google.maps.Marker)并删除之前的一个......无论如何都很好。
由于