不明人士深夜室内行窃被发现,行窃者尽然是...

npm


   5.3.0的版本可用,高版本openlayer(ol)请自行寻找使用方式.

   npm install ol@5.3.0 --save-dev 

   npm install element-ui --save-dev

组件部分


<template>

  <div>

    <div class="lineString">

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

      <el-button type="info" @click="drawLine" style="right:260px;"

        >获取</el-button

      >

      <el-button type="warning" @click="resetMap" style="right:170px;"

        >重置</el-button

      >

      <el-button type="primary" @click="startControl" style="right:90px;"

        >开始</el-button

      >

      <el-button type="danger" @click="endControl" style="right:10px;"

        >完成</el-button

      >

    </div>

    <label for="speed">

      speed:&nbsp;

      <input

        id="speed"

        type="range"

        min="10"

        max="999"

        step="10"

        v-model="speed"

      />

    </label>

    <button id="start-animation">Start Animation</button>

  </div>

</template>


图1

引入


import "ol/ol.css";

import Map from "ol/Map";

import View from "ol/View";

import Draw from "ol/interaction/Draw";

import { Tile as TileLayer, Vector as VectorLayer } from "ol/layer";

import { OSM, Vector as VectorSource } from "ol/source";

import Feature from "ol/Feature";

import { LineString } from "ol/geom";

import { Style, Fill, Stroke, Circle as CircleStyle, Icon } from "ol/style";

import ImageLayer from "ol/layer/Image";

import Static from "ol/source/ImageStatic";

import Point from "ol/geom/Point";

data



     /*点数组*/

      coordinate: [],

      /*是否开启*/

      flag: false,

      /*速度*/

      speed: 1


Methods



/*开始绘制*/

    startControl() {

      let that = this;

      that["map"].addInteraction(that["draw"]);

      that.flag = true;

      that.coordinate = [];

      if (that["styles"]) {

        that.map.removeLayer(that["vectorLayer"]);//删除层

        that.map.un("postcompose", that['moveFeature']);//解除绑定事件

        that["styles"] = null;//重置绘制样式

      }

    },

    /*完成*/

    endControl() {

      let that = this;

      that["map"].removeInteraction(that["draw"]);

      that.flag = false;

      that.trackPlayback();

    },

    /*重置地图*/

    resetMap() {

      window.document.querySelector("#map").innerHTML = "";

      this.initMap();

      this.coordinate = [];

    },

    /*根据坐标绘制线*/

    drawLine() {

      var Line = new Feature({

        geometry: new LineString([].concat(this.coordinate))

      });

      //设置线的样式

      Line.setStyle(

        new Style({

          //填充色

          fill: new Fill({

            color: "rgba(255, 255, 255, 0.2)"

          }),

          //边线颜色

          stroke: new Stroke({

            color: "#00CCFF",

            width: 2

          }),

          //形状

          image: new CircleStyle({

            radius: 7,

            fill: new Fill({

              color: "#00CCFF"

            })

          })

        })

      );

      //实例化一个矢量图层Vector作为绘制层

      var source = new VectorSource({

        features: [Line]

      });

      //创建一个图层

      var vector = new VectorLayer({

        source: source

      });

      this["map"].addLayer(vector);

    },

    /*轨迹回放*/

    trackPlayback() {

      let _self = this;

      if (_self.coordinate.length == 0) {

        return;

      }

      window.document.querySelector("#map").innerHTML = "";

      this.initMap();

      let routeCoords = _self.coordinate;

      let route = new LineString(routeCoords);

      let routeLength = routeCoords.length;

      let routeFeature = new Feature({

        type: "route",

        geometry: route

      });

      let geoMarker = new Feature({

        type: "geoMarker",

        geometry: new Point(routeCoords[0])

      });

      let startMarker = new Feature({

        type: "icon",

        geometry: new Point(routeCoords[0])

      });

      let endMarker = new Feature({

        type: "icon",

        geometry: new Point(routeCoords[routeLength - 1])

      });

      _self["styles"] = {

        route: new Style({

          stroke: new Stroke({

            width: 6,

            color: [237, 212, 0, 0.8]

          })

        }),

        icon: new Style({

          image: new CircleStyle({

            radius: 4,

            fill: new Fill({ color: "black" }),

            stroke: new Stroke({

              color: "white",

              width: 2

            })

          })

        }),

        geoMarker: new Style({

          image: new Icon({

            anchor: [0.5, 1],

            src: require("../../../../../assets/img/blue.png")

          })

        })

      };

      let animating = false;

      let speed, now;

      let startButton = window.document.getElementById("start-animation");

      _self["vectorLayer"] = new VectorLayer({

        source: new VectorSource({

          features: [routeFeature, geoMarker, startMarker, endMarker]

        }),

        style: function(feature) {

          if (animating && feature.get("type") === "geoMarker") {

            return null;

          }

          return _self["styles"][feature.get("type")];

        }

      });

      _self["map"].addLayer(_self["vectorLayer"]);

      _self['moveFeature'] = function(event) {

        var vectorContext = event.vectorContext;

        var frameState = event.frameState;

        if (animating) {

          var elapsedTime = frameState.time - now;

          // here the trick to increase speed is to jump some indexes

          // on lineString coordinates

          var index = Math.round((_self["speed"] * elapsedTime) / 1000);

          if (index >= routeLength) {

            _self["stopAnimation"](true);

            return;

          }

          var currentPoint = new Point(routeCoords[index]);

          var feature = new Feature(currentPoint);

          if (_self["styles"]) {

            vectorContext.drawFeature(feature, _self["styles"].geoMarker);

          }

        }

        // tell OpenLayers to continue the postrender animation

        _self.map.render();

      };

      _self["startAnimation"] = function() {

        if (animating) {

          _self["stopAnimation"](false);

        } else {

          animating = true;

          now = new Date().getTime();

          speed = _self["speed"];

          // hide geoMarker

          geoMarker.setStyle(null);

          // just in case you pan somewhere else

          _self.map.getView().setCenter(routeCoords[0]);

          _self.map.on("postcompose", _self['moveFeature']);

          _self.map.render();

        }

      };

      /**

       * @param {boolean} ended end of animation.

       */

      _self["stopAnimation"] = function(ended) {

        animating = false;

        // if animation cancelled set the marker at the beginning

        let coord = ended ? routeCoords[routeLength - 1] : routeCoords[0];

        geoMarker.getGeometry().setCoordinates(coord);

        //remove listener

        _self.map.un("postcompose", _self['moveFeature']);

      };

      startButton.addEventListener("click", _self["startAnimation"], false);

    },

    /*初始化map*/

    initMap() {

      var that = this;

      var raster = new TileLayer({

        source: new OSM()

      });

      var source = new VectorSource({ wrapX: false });

      var vector = new VectorLayer({

        source: source

      });

      that["center"] = [8208725.0, 3835304.0];

      that["map"] = new Map({

        layers: [raster, vector, new TileLayer({})],

        target: "map",

        view: new View({

          center: [8208725.0, 3835304.0],

          zoom: 9,

          minZoom: 2,

          maxZoom: 19

        })

      });

      that["draw"] = new Draw({

        source: source,

        type: "LineString"

      });

      that["draw"].on("drawend", function(evt) {

        var coordinate = evt.feature.getGeometry().getCoordinates();

        /*经纬度获取*/

        if (that.flag) {

          that.coordinate = [...that.coordinate, ...coordinate];

          //   { lat: 39.920313, lng: 116.329189 }

        }

        console.log(that.coordinate);

      });

    }


mounted



 mounted() {

    this.initMap();

  }


style



.map {

  width: 100%;

  height: 400px;

  position: absolute;

  left: 0;

  top: 0;

}

.ol-attribution.ol-unselectable.ol-control.ol-uncollapsible {

  display: none;

}

.lineString {

  width: 100%;

  height: 400px;

  position: relative;

}

.el-button {

  position: absolute;

  top: 10px;

}


结尾


最近在做室内轨迹,大量查阅关于openlayer的知识,还有百度地图天地图的一些内容。然后就整理了一下。

我这里肯定是可以运行的,不行的绝对不是我的问题。照抄改改,很简单的。-_-|||

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343