123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- import config from "@/api/config.js";
- import * as KMap from "@/utils/ol-map/KMap";
- import * as util from "@/common/ol_common.js";
- import Style from "ol/style/Style";
- import Icon from "ol/style/Icon";
- import VectorLayer from "ol/layer/Vector.js";
- import WKT from "ol/format/WKT.js";
- import { reactive } from "vue";
- import Point from "ol/geom/Point.js";
- import Feature from "ol/Feature";
- import { newPoint } from "@/utils/map.js";
- import { Fill, Text } from "ol/style";
- import { getArea } from "ol/sphere.js";
- import * as proj from "ol/proj";
- import proj4 from "proj4";
- import { register } from "ol/proj/proj4";
- import {DragPan, MouseWheelZoom} from "ol/interaction";
- let mapData = reactive({
- isEdit: false,
- isEditArea: false,
- curPointData: {},
- point: null,
- selectPointArr: [],
- isPointHide: false,
- });
- proj4.defs(
- "EPSG:38572",
- "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"
- );
- register(proj4);
- /**
- * @description 地图层对象
- */
- class PdfMap {
- constructor() {
- let that = this;
- let vectorStyle = new KMap.VectorStyle();
- this.vectorStyle = vectorStyle;
- // 位置图标
- this.clickPointLayer = new KMap.VectorLayer("clickPointLayer", 9999, {
- style: (f) => {
- const style1 = new Style({
- image: new Icon({
- src: require(`@/assets/images/map/${f.get("icon")}-icon.png`),
- scale: 0.45,
- }),
- });
- const style2 = new Style({
- text: new Text({
- font: "16px sans-serif",
- text: f.get("masterName"),
- offsetY: -40,
- padding: [4, 3, 2, 106],
- fill: new Fill({ color: "#fff" }), // 字体颜色
- }),
- });
- const style3 = new Style({
- image: new Icon({
- src: require(`@/assets/images/map/${f.get("iconBg")}.png`),
- scale: 0.45,
- displacement: [0, 90],
- }),
- });
- return [style1, style2, style3];
- },
- });
- this.locationLayer = new KMap.VectorLayer("locationLayer", 9999, {
- style: () => {
- return new Style({
- image: new Icon({
- src: require("@/assets/images/map/location.png"),
- scale: 0.45,
- }),
- });
- },
- });
- }
- initMap(data, target) {
- let level = 16;
- let coordinate = util.wktCastGeom(data.point).getFirstCoordinate();
- this.kmap = new KMap.Map(
- target,
- level,
- coordinate[0],
- coordinate[1],
- null,
- 6,
- 22
- );
- this.lock(false)
- this.kmap.setLayerWkt(data.geom, data, true, [50, 50, 50, 50] )
- this.kmap.addLayer(this.clickPointLayer.layer);
- this.kmap.addLayer(this.locationLayer.layer);
- this.addPoint(data)
- this.getSelectPointArr(data.id)
- }
- getSelectPointArr(id) {
- const arr = [];
- this.clickPointLayer.source.forEachFeature((feature) => {
- if (feature.get("id") === id) {
- // 修改当前点位高亮
- feature.set("icon", "point");
- feature.set("iconBg", "name-act-bg");
- mapData.point = feature;
- mapData.curPointData = feature.values_;
- }
- arr.push(feature);
- });
- const points = this.kmap.getLayerFeatures();
- points.forEach((feature) => {
- if (feature.get("id") === id) {
- feature.set("icon", "point-act");
- this.kmap.polygonStyle(feature);
- mapData.isPointHide = feature;
- }
- });
- mapData.selectPointArr = arr;
- }
- // 添加点位
- addPoint(point) {
- const arrPoints = [];
- arrPoints.push(
- newPoint({ ...point, icon: "point", iconBg: "name-bg" }, "point")
- );
- this.clickPointLayer.source.addFeatures(arrPoints);
- }
- lock(lockval) {
- let pan;
- let mousezoom;
- this.kmap.map.getInteractions().forEach(function (element) {
- if (element instanceof DragPan)//获取 控制能否使用鼠标,手指拖动地图的对象
- pan = element;
- if(element instanceof MouseWheelZoom)//获取 控制能否使用滚轮滚动放大缩小地图的对象
- mousezoom = element;
- if (pan) {
- if (lockval) {
- pan.setActive(true);//此对象的setActive方法用来设置是否可以拖动滚动查看
- }
- else {
- pan.setActive(false);
- }
- }
- if (mousezoom) {
- if (lockval) {
- mousezoom.setActive(true);
- }
- else {
- mousezoom.setActive(false);
- }
- }
- });
- }
- }
- export default PdfMap;
|