123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import Overlay from 'ol/Overlay'
- import KBaseObject from './KBaseObject';
- import * as proj from 'ol/proj'
- class Popup extends KBaseObject{
- constructor(lng,lat,url,offsetX,offsetY,width,height,mapInstance = null){
- super(mapInstance)
- const vm = this;
- vm.position = [lng,lat];
- vm.initPopup(lng,lat,url,offsetX,offsetY,width,height);
- }
- initPopup(lng,lat,url,offsetX,offsetY,width,height){
- //创建popup的容器
- const vm = this;
- vm.popupContainer = document.createElement("div");
- vm.popupContainer.style.position = "absolute";
- vm.popupContainer.style.width = width + "px";
- vm.popupContainer.style.height = height + "px";
- vm.popupContainer.style.top = "0px";
- vm.popupContainer.style.left = "0px";
- vm.popupContainer.style.zIndex = 1;
- // vm.popupContainer.style.display = "none";
- vm.popupContainer.style.background = "url(" + url + ") no-repeat";
- vm.popupContainer.style.backgroundSize = "100% 100%";
- // vm.popupContainer.innerHTML = "点击查看";
- //创建popup
- vm.popup = new Overlay({
- element: vm.popupContainer,
- positioning: 'center-center',
- stopEvent: false,
- position: proj.fromLonLat([lng,lat]),
- offset: [offsetX,offsetY]
- });
- vm.mapInstance.map.addOverlay(vm.popup);
- }
- setPostionAnimate(lng,lat,duration = 1000){
- const vm = this;
- let curLng = vm.position[0];
- let curLat = vm.position[1];
- let nextLng = lng;
- let nextLat = lat;
- // 计算经纬度的中间值差距
- let latDiff = (nextLng - curLng) / 100;
- let lngDiff = (nextLat - curLat) / 100;
- let j = 0;
- // 在当前坐标和下一个坐标之间插入 100 个中间值的经纬度
- let timer = setInterval(function (){
- let x = curLng + j * latDiff;
- let y = curLat + j * lngDiff;
- vm.popup.setPosition(proj.fromLonLat([x,y]));
- j++;
- if(j == 100){
- clearInterval(timer)
- }
- }, duration / 100)
- }
- setPosition(x,y){
- this.popup.setPosition(proj.fromLonLat([x,y]));
- }
- insertMiddleValues(coordinates) {
- // 初始化一个新的数组
- let result = [];
- // 循环遍历所有的坐标
- for (let i = 0; i < coordinates.length - 1; i++) {
- // 获取当前坐标和下一个坐标
- let current = coordinates[i];
- let next = coordinates[i + 1];
- // 计算经纬度的中间值差距
- let latDiff = (next[0] - current[0]) / 200;
- let lngDiff = (next[1] - current[1]) / 200;
- // 将当前坐标添加到结果数组
- result.push(current);
- // 在当前坐标和下一个坐标之间插入 200 个中间值的经纬度
- for (let j = 1; j < 200; j++) {
- let lat = current[0] + j * latDiff;
- let lng = current[1] + j * lngDiff;
- result.push([lat, lng]);
- }
- }
- // 添加最后一个坐标到结果数组
- result.push(coordinates[coordinates.length - 1]);
- return result;
- }
- remove(){
- const vm = this;
- if(vm.popup){
- vm.mapInstance.map.removeOverlay(vm.popup);
- vm.popup = null;
- }
- }
- }
- export default Popup;
|