<template>
|
<div id="mapView" class="projectBox">
|
<div class="Tools">
|
<el-button
|
type="success"
|
icon="el-icon-plus"
|
@click="drowPoint"
|
></el-button>
|
<el-button
|
type="danger"
|
icon="el-icon-delete"
|
@click="clearDrawPoint"
|
></el-button>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import TileLayer from 'ol/layer/Tile';
|
import XYZ from 'ol/source/XYZ';
|
import Map from 'ol/Map';
|
import View from 'ol/View';
|
import { transform } from 'ol/proj';
|
import VectorSource from 'ol/source/Vector';
|
import { Vector as VectorLayer, Tile } from 'ol/layer';
|
import { Draw } from 'ol/interaction';
|
import Feature from 'ol/Feature';
|
import { Circle as CircleStyle, Style, Fill, Stroke } from 'ol/style';
|
import { Point } from 'ol/geom';
|
export default {
|
data() {
|
return {
|
mapol: null,
|
drawLayer: null,
|
draw: null,
|
};
|
},
|
methods: {
|
initOlMap() {
|
var vectorLayer = new TileLayer({
|
source: new XYZ({
|
url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
|
}),
|
});
|
this.mapol = new Map({
|
target: 'mapView',
|
layers: [vectorLayer],
|
view: new View({
|
center: transform([105.02, 34.9], 'EPSG:4326', 'EPSG:3857'),
|
zoom: 4,
|
projection: 'EPSG:3857',
|
}),
|
});
|
if (this.$store.state.projeOl != null) {
|
this.showPointInMap();
|
}
|
},
|
showPointInMap() {
|
var value = this.$store.state.projeOl
|
.replace('POINT(', '')
|
.replace(')', '');
|
var a1 = value.split(' ');
|
console.log(a1);
|
var a2 = transform(
|
[parseFloat(a1[0]), parseFloat(a1[1])],
|
'EPSG:4326',
|
'EPSG:3857'
|
);
|
var feature = new Feature({
|
geometry: new Point(a2),
|
});
|
feature.setStyle(
|
new Style({
|
image: new CircleStyle({
|
fill: new Fill({
|
color: 'blue',
|
}),
|
radius: 4,
|
}),
|
})
|
);
|
let source = new VectorSource();
|
source.addFeature(feature);
|
this.drawLayer = new VectorLayer();
|
this.drawLayer.setSource(source);
|
this.mapol.addLayer(this.drawLayer);
|
},
|
clearDrawPoint() {
|
if (this.drawLayer) {
|
this.mapol.removeLayer(this.drawLayer);
|
this.drawLayer = null;
|
this.$store.state.projeOl = null;
|
}
|
},
|
|
drowPoint() {
|
const source = new VectorSource({ wrapX: false });
|
if (this.drawLayer) {
|
this.mapol.removeLayer(this.drawLayer);
|
}
|
this.drawLayer = new VectorLayer({
|
source: source,
|
});
|
this.mapol.addLayer(this.drawLayer);
|
this.draw = new Draw({
|
source: source, // 和图层使用同一个source,画的图形在图层上,图层在地图上即可展示
|
type: 'Point', // 可选择三角形,多边形,圆形等具体见官网demo
|
freehand: false, // 画选还是点选
|
});
|
// 添加交互
|
this.mapol.addInteraction(this.draw);
|
this.draw.on('drawend', (e) => {
|
let feature = e.feature;
|
let geom = feature.getGeometry();
|
var extent = geom.flatCoordinates;
|
var a1 = transform([extent[0], extent[1]], 'EPSG:3857', 'EPSG:4326');
|
|
this.$store.state.projeOl =
|
'POINT(' + a1[0].toFixed(6) + ' ' + a1[1].toFixed(6) + ')';
|
this.mapol.removeInteraction(this.draw);
|
});
|
},
|
},
|
mounted() {
|
this.initOlMap();
|
},
|
};
|
</script>
|
|
<style>
|
.projectBox {
|
width: 100%;
|
height: 100%;
|
overflow: hidden;
|
margin: 0;
|
padding: 0;
|
}
|
.Tools {
|
position: absolute;
|
background: #303030;
|
opacity: 0.9;
|
z-index: 40;
|
padding: 10px;
|
width: 95%;
|
}
|
.primary {
|
background: #409eff;
|
border: #409eff;
|
color: white;
|
}
|
</style>
|