传单:如何将文本标签添加到自定义标记图标?

Posted

技术标签:

【中文标题】传单:如何将文本标签添加到自定义标记图标?【英文标题】:Leaflet: How to add a text label to a custom marker icon? 【发布时间】:2016-04-18 22:27:59 【问题描述】:

是否可以将文本添加到自定义图标标记?我想避免为了添加文本而不得不在图像编辑器中编辑图标。

我已经像这样创建了我的自定义图标标记:

var airfieldIcon = L.icon(
        iconUrl: 'images/airfield.png',
        iconSize: [48,48]
);

var airfield = L.geoJson (airfield, 
    pointToLayer: function(feature,latlng)
        return L.marker(latlng, 
            icon: airfieldIcon
        )
    
).addTo(map);

如何将文本“Banff Airfield”作为标签添加到此图标?使用图像编辑器是最简单、最有效的方法吗?如果是这样,我会这样做,但想知道是否有更好的方法。谢谢!

【问题讨论】:

【参考方案1】:

你可以使用L.DivIcon:

表示使用简单 div 元素而不是图像的标记的轻量级图标。

http://leafletjs.com/reference.html#divicon

将您的图像和文本放入 HTML 中,添加一些 CSS 以使其显示为您想要的方式,然后您就可以开始了

new L.Marker([57.666667, -2.64], 
    icon: new L.DivIcon(
        className: 'my-div-icon',
        html: '<img class="my-div-image" src="http://png-3.vector.me/files/images/4/0/402272/aiga_air_transportation_bg_thumb"/>'+
              '<span class="my-div-span">RAF Banff Airfield</span>'
    )
);

另一种选择是使用 Leaflet.Label 插件:

Leaflet.label 是用于在传单驱动的地图上为标记和形状添加标签的插件。

存储库:https://github.com/Leaflet/Leaflet.label 示例:http://leaflet.github.io/Leaflet.label/

【讨论】:

正是我想要的。谢谢! 非常适合我。我想要每个标记的自定义文本,但我不能用图像来做到这一点:) 这很完美。 我想你拼错了,应该是小写的divIcon "注意:从 Leaflet 1.0 开始,L.Label 作为 L.Tooltip 添加到 Leaflet 核心,并且该插件已被弃用。"【参考方案2】:

从传单版本 1.0.0 开始,您可以在不使用插件的情况下添加标签(该插件已纳入核心功能)。

例子:

var marker = L.marker(latlng)
    .bindTooltip("Test Label", 
    
        permanent: true, 
        direction: 'right'
    
);

这会在地图上生成一个带有“测试标签”标签的标记,该标签始终显示在标记图标的右侧。

【讨论】:

很好的答案!很高兴 Leaflet 将它纳入核心包。 API 参考在这里 - leafletjs.com/reference-1.0.3.html#layer-bindtooltip 让它看起来像谷歌地图标记:L.marker(latlng).bindTooltip("A",permanent: true, direction: 'top',offset:L.point(-14, -5)).addTo(map);【参考方案3】:

这是开箱即用的解决方案,它可能不适合所有人,但对我有用 只需添加图标标记,然后添加文本标记,如下所示:

    var MarkerIcon = L.icon(feature.geometry.properties.icon);
    var MarkerText = L.divIcon(
    className: TextPositionClass,
     html:'<div>'+ displayText+'</div>',
     iconSize: null
    );
        
        
  let  marker = L.marker(latlng,  icon: MarkerIcon).addTo(this.map); // add marker 
  let label = L.marker(latlng, icon: MarkerText).addTo(this.map); // add text on marker

【讨论】:

以上是关于传单:如何将文本标签添加到自定义标记图标?的主要内容,如果未能解决你的问题,请参考以下文章

R中自定义标记的传单图例

将图像添加到自定义复选框

带有反应传单的自定义标记图标

如何将 JSP 页面包含到自定义标记中

如何使用标签或标识符将多张图片添加到自定义 tableviewcells

jqgrid更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?