美文网首页openlayers学习笔记
四章-37-矢量标签的显示控制

四章-37-矢量标签的显示控制

作者: 彩云飘过 | 来源:发表于2020-04-21 11:25 被阅读0次

本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5.3.x api。

源码 见 1037.html ,对应的 官网示例

image.png
<!DOCTYPE html>
<html>

<head>
  <title>矢量标签显示控制</title>
  <link rel="stylesheet" href="../include/ol.css" type="text/css" />
  <script src="../include/ol.js"></script>
</head>

<body>
  <div id="map" class="map"></div>

  <script>
    var map = new ol.Map({
      target: "map",
      view: new ol.View({
        center: [0, 0],
        zoom: 1
      })
    });

    //文字标签样式
    var labelStyle = new ol.style.Style({
      geometry: function (feature) {
        var geometry = feature.getGeometry();
        //关键代码,找到最宽的多边形,然后显示字体标签
        if (geometry.getType() == "MultiPolygon") {
          // 多个多边形要素集合中仅渲染最宽的那个
          var polygons = geometry.getPolygons();
          var widest = 0;
          for (var i = 0, ii = polygons.length; i < ii; ++i) {
            var polygon = polygons[i];
            var width = ol.extent.getWidth(polygon.getExtent());
            if (width > widest) {
              widest = width;
              geometry = polygon;
            }
          }
        }
        
        return geometry;
      },
      text: new ol.style.Text({
        font: "14px Calibri,sans-serif",
        overflow: true,
        fill: new ol.style.Fill({
          color: "#000"
        }),
        stroke: new ol.style.Stroke({
          color: "#fff",
          width: 3
        })
      })
    });
    
    //国家边界样式
    var countryStyle = new ol.style.Style({
      fill: new ol.style.Fill({
        color: "rgba(255, 255, 255, 0.6)"
      }),
      stroke: new ol.style.Stroke({
        color: "#319FD3",
        width: 1
      })
    });
    
    var style = [countryStyle, labelStyle];

    var vectorLayer = new ol.layer.Vector({
      source: new ol.source.Vector({
        url: "../data/lands.geojson",
        format: new ol.format.GeoJSON()
      }),
      style: function (feature) {
        labelStyle.getText().setText(feature.get("name"));
        return style;
      },
      declutter: true
    });

    map.addLayer(vectorLayer);


  </script>
</body>

</html>

相关文章

  • 四章-37-矢量标签的显示控制

    本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers 5...

  • echart:地图上标签重叠问题解决

    最近做大屏用echart里面的矢量地图,上面需要显示一些标签。 标签使用常规的做法,即用散点图,坐标则设为地图坐...

  • 优化——SVG常用方法

    首先我们看一下矢量图的文件 显示的是这么个图形 我们来看看每个标签的意思 vector 定义的矢量图,在res/d...

  • CSS第二节:CSS性质

    简单复习一下: Display改变标签显示模式: display可以控制标签的显示模式。 客串一个:visibil...

  • css性质(1)

    1、CSS设置标签模式display属性 行内标签: 块标签: (1)display可以控制标签的显示模式 dis...

  • CSS第二节

    CSS的标签模式设置Display属性 display可以控制标签的显示模式。 display:none | in...

  • 移动端meta 以及一些常用js事件

    控制显示区域各种属性:常用的标签模板 width - viewport的...

  • HTML5

    #SVG矢量图绘制 SVG标签用于绘制矢量图。 与HTML标签相比:它们都是XML标签的衍生产物,属于平级的兄弟关...

  • css第二节

    display:可以控制标签的显示模式。 display:inline;使块级标签变成行内元素 display:b...

  • use_svg_display()

    用矢量图显示

网友评论

    本文标题:四章-37-矢量标签的显示控制

    本文链接:https://www.haomeiwen.com/subject/ptjcuhtx.html