openlayers路线图

#openlayers 线图
在这里插入图片描述

dows() {
      var layer = new VectorLayer({
        zIndex: 10
      });
      var source = new VectorSource();
      layer.setSource(source);
      this.icingMap.addLayer(layer);
      var feature;
      let arr = [
        [118.507906, 31.689362],
        [118.707906, 31.689362]
      ];
      feature = new Feature({
        geometry: new LineString(arr)
      });
      source.addFeature(feature);
      var stylesFunction = () => {
         let resolution = this.map.getView().getResolution(); //分辨率:一个像素代表的距离
      let styles = [];
      // 线条样式
      let backgroundLineStyle = new Style({
        stroke: new Stroke({
          color: "green",
          width: 10,
        }),
      });
      styles.push(backgroundLineStyle);
      let geometry = feature.getGeometry();
      // 获取线段长度
      const length = geometry.getLength();
      // 箭头间隔距离(像素)
      const step = 30;
      // 将间隔像素距离转换成地图的真实距离
      const StepLength = step * resolution;
      // 得到一共需要绘制多少个 箭头
      const arrowNum = Math.floor(length / StepLength);
      const rotations = [];
      const distances = [0];
      geometry.forEachSegment(function(start, end) {
        let dx = end[0] - start[0];
        let dy = end[1] - start[1];
        let rotation = Math.atan2(dy, dx);
        distances.unshift(Math.sqrt(dx ** 2 + dy ** 2) + distances[0]);
        rotations.push(rotation);
      });
      // 利用之前计算得到的线段矢量信息,生成对应的点样式塞入默认样式中
      // 从而绘制内部箭头
      for (let i = 1; i < arrowNum; ++i) {
        const arrowCoord = geometry.getCoordinateAt(i / arrowNum);
        const d = i * StepLength;
        const grid = distances.findIndex((x) => x <= d);

        styles.push(
          new Style({
            geometry: new Point(arrowCoord),
            image: new Icon({
              src: "image/x10.png",
              opacity: 1,
              anchor: [0.75, 0.5],
              rotateWithView: false,
              // 读取 rotations 中计算存放的方向信息
              rotation: -rotations[distances.length - grid - 1],
              scale: 0.1,
            }),
          })
        );
      }
      return styles;
      };
      feature.setStyle(stylesFunction);
    },

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值