首页 > 其他分享 >vue+openlayers 绘制点

vue+openlayers 绘制点

时间:2023-09-18 10:57:15浏览次数:42  
标签:style vue const color stroke openlayers new 绘制 fill

绘制点使用point在绘制点的位置,使用Circle绘制点的样式

疑问:将style放在Feature上就绘制不出来样式?

 

<template>
    <div class="setting">
        <div class="title">设置</div>
        <ul>
            <li>
                <p>边框大小:</p>
                <el-input-number v-model="borderWidth" controls-position="right" size="mini" @change="changeVector"></el-input-number>
            </li>
            <li>
                <p>边框颜色:</p>
                <el-color-picker v-model="borderColor" show-alpha size="mini" @change="changeVector"></el-color-picker>
            </li>
            <li>
                <p>内部颜色:</p>
                <el-color-picker v-model="fillColor" show-alpha size="mini" @change="changeVector"></el-color-picker>
            </li>
            <li>
                <p>大小:</p>
                <el-input-number v-model="radius" controls-position="right" size="mini" @change="changeVector"></el-input-number>
            </li>
            
        </ul>
    </div>
</template>
<script>
import { Point } from 'ol/geom';
import Feature from 'ol/Feature';
import VectorLayer from 'ol/layer/Vector.js';
import VectorSource from 'ol/source/Vector.js';
import { Circle, Fill, Stroke, Style } from "ol/style";
export default {
    name: "pointPage",
    data() {
        return {
            // 边框大小
            borderWidth: 1,
            // 边框颜色
            borderColor: '#000',
            // 内部颜色
            fillColor: "#000",
            // 大小
            radius: 5,
            vector: null
        }
    },
    created() {
        this.drawPoint()
    },
    methods: {
        /**
         * 绘制点
         */
        drawPoint() {
            const map  = window._map
            const stroke = new Stroke({
                color: this.borderColor,
                width: this.borderWidth
            })
            const fill = new Fill({
                color: this.fillColor
            })
            const style = new Style({
                image: new Circle({
                    fill: fill,
                    stroke: stroke,
                    radius: this.radius,
                }),
            })
            const source = new VectorSource({});
            this.vector = new VectorLayer({
                style: style,
                source: source,
                id: 'point',
                className: 'point'
            });
            map.addLayer(this.vector)
            let coordinate = [108.885436, 30.054604]
            let point = new Point(coordinate);

            let feature = new Feature({
                geometry: point
            });
            // 把要素集合添加到源 addFeatures
            source.addFeature(feature);
        },
        /**修改样式
         * 
         * @param {*} value 
         * @param {*} type 
         */
        changeVector() {
            const stroke = new Stroke({
                color: this.borderColor,
                width: this.borderWidth
            })
            const fill = new Fill({
                color: this.fillColor
            })
            const style = new Style({
                image: new Circle({
                    fill: fill,
                    stroke: stroke,
                    radius: this.radius,
                }),
            })
            this.vector.setStyle(style)
        }
    }
}
</script>
<style scoped>
    .setting {
        position: absolute;
        left: 10px;
        top: 10px;
        width: 300px;
        background: #FFFFFF;
        box-shadow: 0px 0px 20px 0px rgba(51,79,124,0.25);
        z-index: 10;
    }
    .title {
        height: 30px;
        line-height: 30px;
        border-bottom: 1px solid rgba(0, 125, 255, .1);  
        font-size: 14px;
        padding: 0 10px;
        color: #1556C6;
        text-align: left;
        background: linear-gradient(177deg, #63B1FA 0%, #007DFF 100%);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent
    }
    ul {
       margin: 0;
       padding: 0; 
    }
    ul li {
        display: flex;
        justify-content: flex-start;
        padding: 10px 20px;
        font-size: 12px;

    }
    p {
        margin: 0;
        line-height: 28px;
    }
</style>

 

绘制出的样式:

 

标签:style,vue,const,color,stroke,openlayers,new,绘制,fill
From: https://www.cnblogs.com/yuNotes/p/17710996.html

相关文章

  • ggplot2箱线图绘制教程
    箱线图是什么?箱线图(Boxplot),也称为盒须图或盒式图,是一种用于展示数据分布的统计图表。它通过展示数据的五个关键统计量,即最小值、下四分位数(Q1)、中位数、上四分位数(Q3)和最大值,帮助我们了解数据的中心趋势、离散程度以及可能存在的异常值。箱线图如何看?箱线图由一个矩形框和两条延伸......
  • vue3项目rem自适应大小如何实现
    ❝rem自适应方案只是页面自适应的解决方案之一,本文主要讲解一下实现过程!本文演示的是Vue3语法!❞rem自适应随着现在互联网设备的日益更新,各大尺寸的屏幕参差不穷导致我们的布局在某些小屏或者大屏上与UI的表现并不一致所以,很多人寻求各种解决方案,我们现在的很多移动端框架都是支持......
  • uniapp中使用vue-i18n实现多语言
    一安装vue-i18nnpmivue-i18n@6二添加相关语言配置 如en.json:{"locale.auto":"System","locale.en":"English","locale.zh-hans":"简体中文","locale.zh-hant":"繁体中文","......
  • Vue js 框下制作登录页面的新方法
    ......
  • Vue mavon-editor 本地加载 – 关闭 CDN
    ​ 转载自Vuemavon-editor本地加载–关闭CDN-前端教程。仅自用。时间2022-03-3121:07:09前言在Vue里面使用Markdown编辑器的选择并不多。mavon-editor大概是GitHub上星星最多的VueMarkdown编辑器了,用起来也比较方便。但是由于mavon-editor默认使用Clo......
  • 如何在Vue组件中定义方法
    在Vue组件中定义方法,你可以按照以下步骤进行:在Vue组件的methods选项中定义方法。methods:{methodName(){//方法的具体逻辑},anotherMethod(){//另一个方法的逻辑}}在上述示例中,使用methods选项来定义了两个方法:methodName和anotherMethod。......
  • 关于vue2的模块级总结
    前阵子在赶一个项目的进度,一直没时间做总结,今日闲来无事,消化一下。背景vue2的项目,面向受众为g端内容1.项目原因,单路由下包含详情&列表两页面。根据v-if跳转,笔者这里用的是动态组件的方式2.同样由于项目原因,使用的模块级vuex,因而在使用时,也有了许多盲点:(如图:)使用createNa......
  • vue3中验证手机号的正则表达式
    在Vue3中,你可以使用正则表达式来验证手机号。以下是一个基本的手机号验证正则表达式示例,可以用于检查中国大陆地区的手机号码:constphoneNumberRegex=/^1[3456789]\d{9}$/;//示例用法constphoneNumber="13812345678";if(phoneNumberRegex.test(phoneNumber)){cons......
  • vue项目中的Tinymce富文本编辑器如何从word中粘贴图片上传到七牛云
    Tinymce富文本编辑器粘贴图片时需要上传到自己的空间中才能被打开。一、首先需要安装引入七牛云npminstallqiniu-jsvarqiniu=require('qiniu-js')//orimport*asqiniufrom'qiniu-js'二、同时引入客户端生成的tokenimport{qiniuTokenCreate}from"@/assets/js/qin......
  • Vue学习六:路由进阶
    一、路由的封装抽离目标:将路由模块抽离出来。好处:拆分模块,易于维护。第一步:在src目录下新建一个router目录,在创建一个index.js文件,将先前main.js中的路由代码转移到index.js文件中。(这里需要使用到vue所以需将vue包导入;需修改组件路径,@符号代表绝对路径src;需将路由实例导出)index......