传单。控件搜索和自定义图标
Leaflet. Control Search and Custom Icons
我有一个小问题。我将 Leaflet 与插件一起使用 Control Search and Marker Cluster.
我需要添加自定义图标,我阅读了来自 http://leafletjs.com/examples/custom-icons.html
的教程
当我将代码 {icon: iconRed} 添加到 L.Marker 时,搜索不再有效。
我的代码示例:
var markers = L.markerClusterGroup({ disableClusteringAtZoom: 16 });
/////////////
var controlSearch = new L.Control.Search({layer: markers, initial: false});
/////////////
var LeafIcon = L.Icon.extend({
options: {
iconSize: [32, 37],
iconAnchor: [16, 37],
popupAnchor: [1, -30]
}
});
/////////////
var iconRed = new LeafIcon({iconUrl: './images/marker_icons/red.png'}),
iconGreen = new LeafIcon({iconUrl: './images/marker_icons/green.png'});
/////////////
var addressPoints = [
[0,0, "Item 1"],
[1,1, "Item 2"],
[2,2, "Item 3"],
[3,3, "Item 4"]
];
/////////////
for (var i = 0; i < addressPoints.length; i++) {
var a = addressPoints[i];
var title = a[2];
marker = new L.Marker(new L.latLng(a[0], a[1]), {icon: iconRed}, {title: title});
marker.bindPopup(title);
markers.addLayer(marker);
}
/////////////
map.addLayer(markers);
/////////////
map.addControl(controlSearch);
您的问题在于您实例化标记的方式:
L.Marker(new L.latLng(a[0], a[1]), {icon: iconRed}, {title: title});
您正在做的是添加另一个 object 作为参数。那行不通,因为 L.Marker
根据文档:http://leafletjs.com/reference.html#marker 只需要两个选项,第一个是 latLng object 或带坐标的数组,第二个选项 object.您应该像这样将 属性 和值添加到选项 object 中:
L.Marker(new L.latLng(a[0], a[1]), {
'icon': iconRed,
'title': title
});
现在标题 属性 在选项 object 中可用,因此您的搜索插件将再次起作用。
这是一个关于 Plunker 的工作示例:http://plnkr.co/edit/46VJcp?p=preview
我有一个小问题。我将 Leaflet 与插件一起使用 Control Search and Marker Cluster.
我需要添加自定义图标,我阅读了来自 http://leafletjs.com/examples/custom-icons.html
当我将代码 {icon: iconRed} 添加到 L.Marker 时,搜索不再有效。
我的代码示例:
var markers = L.markerClusterGroup({ disableClusteringAtZoom: 16 });
/////////////
var controlSearch = new L.Control.Search({layer: markers, initial: false});
/////////////
var LeafIcon = L.Icon.extend({
options: {
iconSize: [32, 37],
iconAnchor: [16, 37],
popupAnchor: [1, -30]
}
});
/////////////
var iconRed = new LeafIcon({iconUrl: './images/marker_icons/red.png'}),
iconGreen = new LeafIcon({iconUrl: './images/marker_icons/green.png'});
/////////////
var addressPoints = [
[0,0, "Item 1"],
[1,1, "Item 2"],
[2,2, "Item 3"],
[3,3, "Item 4"]
];
/////////////
for (var i = 0; i < addressPoints.length; i++) {
var a = addressPoints[i];
var title = a[2];
marker = new L.Marker(new L.latLng(a[0], a[1]), {icon: iconRed}, {title: title});
marker.bindPopup(title);
markers.addLayer(marker);
}
/////////////
map.addLayer(markers);
/////////////
map.addControl(controlSearch);
您的问题在于您实例化标记的方式:
L.Marker(new L.latLng(a[0], a[1]), {icon: iconRed}, {title: title});
您正在做的是添加另一个 object 作为参数。那行不通,因为 L.Marker
根据文档:http://leafletjs.com/reference.html#marker 只需要两个选项,第一个是 latLng object 或带坐标的数组,第二个选项 object.您应该像这样将 属性 和值添加到选项 object 中:
L.Marker(new L.latLng(a[0], a[1]), {
'icon': iconRed,
'title': title
});
现在标题 属性 在选项 object 中可用,因此您的搜索插件将再次起作用。
这是一个关于 Plunker 的工作示例:http://plnkr.co/edit/46VJcp?p=preview