Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单张(geojson)多边形上的简单标签_Javascript_Mapping_Openlayers_Leaflet - Fatal编程技术网

Javascript 单张(geojson)多边形上的简单标签

Javascript 单张(geojson)多边形上的简单标签,javascript,mapping,openlayers,leaflet,Javascript,Mapping,Openlayers,Leaflet,我正在尝试我想象中的一个相当常见的使用传单多多边形对象的用例 我使用geojson创建多多边形: var layer = L.GeoJSON(g, style_opts); 我想在每个多边形的中心放置一个简单的文本标签。(例如,将州名称放在每个州的中心) 我看过: 它实际上覆盖了文本,但当我添加一堆多边形时,它似乎以奇怪的方式使标签偏离中心,我目前无法跟踪问题 我还研究了: 但这似乎只是在将鼠标移到多边形上时将标签放置在多边形上,而不是静态地停留在多边形上 我认为我最好的做法是使用第一个链接

我正在尝试我想象中的一个相当常见的使用传单多多边形对象的用例

我使用geojson创建多多边形:

var layer = L.GeoJSON(g, style_opts);
我想在每个多边形的中心放置一个简单的文本标签。(例如,将州名称放在每个州的中心)

我看过:

它实际上覆盖了文本,但当我添加一堆多边形时,它似乎以奇怪的方式使标签偏离中心,我目前无法跟踪问题

我还研究了:

但这似乎只是在将鼠标移到多边形上时将标签放置在多边形上,而不是静态地停留在多边形上

我认为我最好的做法是使用第一个链接,并找出它改变位置的原因,但同时,如果有人知道在传单的多边形上贴标签的快捷方法,我将不胜感激

此外,如果我对上述两个链接有任何错误的假设,请随时纠正我


非常感谢。传单标签插件还允许使用静态标签,请参阅。 多段线标签不是静态的唯一原因是它在您沿多段线移动时会四处移动

通过覆盖多边形的bindLabel(),您可能可以做得更好,但这是一种将静态标签添加到多边形中心的简单方法:

label = new L.Label()
label.setContent("static label")
label.setLatLng(polygon.getBounds().getCenter())
map.showLabel(label);

您可以使用
L.geoJson
onEachFeature
选项为每个多边形创建一个新的
L.divIcon

L.geoJson(geoJsonData, {
  onEachFeature: function(feature, layer) {
    var label = L.marker(layer.getBounds().getCenter(), {
      icon: L.divIcon({
        className: 'label',
        html: feature.properties.NAME,
        iconSize: [100, 40]
      })
    }).addTo(map);
  }
);

谢谢你的回答。设法使它起作用。在调用
showLabel()
之前,您确实需要将标签添加到映射中,但是:
label.addTo(map)
我一定是做错了什么。。。感谢传单1.0的更新,标签插件已被工具提示的新核心功能所取代:如果将“geoJsonData”切换为地图上的功能层,您将如何实现这一点?当前方法在开始时将标签添加到地图。谢谢你的提示。如果你的
L.geoJson
图层保存在一个名为
geoJson
的变量中,你可以调用
geoJson.clearLayers()
,然后调用
geoJson.addData(newGeoJsonData)
@redshift。。请检查我的答案,6年零4个月后,仍然没有更好的方法在传单中标记多边形,这是可悲的。内置工具提示类不提供相同的功能,几乎总是需要修改和自定义类来模拟真实的地图标签。与其抱怨,不如闭嘴写个插件。同时,我想把这个链接添加到图片中。Esri传单项目描述了标签的这种方法,这种方法本身也可以很好地处理传单:我尝试过在vue js中使用带有自定义css的floate.label和bindTooltip来标记geojson multipolygon,但这是我的案例中唯一的解决方案。谢谢@jhickok