首页 > 其他分享 >前端学习openLayers配合vue3(面的绘制,至少三个点)

前端学习openLayers配合vue3(面的绘制,至少三个点)

时间:2025-01-08 10:51:51浏览次数:1  
标签:ol let center vue3 source openLayers new import 绘制

我们学习了点和线的绘制,当然我们也可以绘制一个面

关键代码,需要注意的一点就是面的绘制需要三维数组,线的绘制是个二维数组

 const polygonLayer = new VectorLayer({
    source: new VectorSource(),
  });
  map.addLayer(polygonLayer);
  let feature = new Feature({
    //北京到上海武汉的经纬度 (三维数组)center是定义的以武汉为中心的变量
    geometry: new Polygon([[[...center], [116.46, 39.92], [121.47, 31.22]]]),
  });
  feature.setStyle(
    new Style({
      stroke: new Stroke({
        color: "green",
        width: 5,
      }),
      fill: new Fill({
        color: "rgba(255, 255, 0, 0.5)",
      }),
    })
  );
  polygonLayer.getSource().addFeature(feature);

效果展示

 完整代码

<script setup>
import { onMounted, reactive, ref } from "vue";
import { Feature, Map, View } from "ol";
import TileLayer from "ol/layer/Tile";
import { OSM, XYZ } from "ol/source";
import { fromLonLat } from "ol/proj";
import VectorLayer from "ol/layer/Vector";
import VectorSource from "ol/source/Vector";
import GeoJSON from "ol/format/GeoJSON";
import Style from "ol/style/Style";
import Fill from "ol/style/Fill";
import Stroke from "ol/style/Stroke";
import Icon from "ol/style/Icon";
import { LineString, Point, Polygon } from "ol/geom";
import { Circle } from "ol/style";

defineProps({
  msg: String,
});
let map = reactive({});
let view = reactive({});
// let count=ref(0)
// let center=[114.305469, 30.592876];
let center = reactive([114.305469, 30.592876]);
onMounted(() => {
  initMap();
});
let initMap = () => {
  (view = new View({
    center,
    zoom: 5,
    projection: "EPSG:4326",
  })),
    (map = new Map({
      target: "map", //挂载视图的容器
      layers: [
        //瓦片图层source第三方,或者自带的,地图的底层
        new TileLayer({
          // source: new OSM(),//内置的国外地址,需要代理
          source: new XYZ({
            url: "http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7",
          }), //国内第三方数据源
        }),
        // 矢量图层
        new VectorLayer({
          source: new VectorSource({
            url: "https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json",
            format: new GeoJSON(),
          }),
          //填充颜色
          style: new Style({
            fill: new Fill({
              color: "rgba(255, 0, 0, 0.5)",
            }),
            stroke: new Stroke({
              color: "black",
              width: 1,
            }),
          }),
        }),
      ],

      //视图
      view: view,
    }));

  const polygonLayer = new VectorLayer({
    source: new VectorSource(),
  });
  map.addLayer(polygonLayer);
  let feature = new Feature({
    //北京到上海武汉的经纬度 (三维数组)
    geometry: new Polygon([[[...center], [116.46, 39.92], [121.47, 31.22]]]),
  });
  feature.setStyle(
    new Style({
      stroke: new Stroke({
        color: "green",
        width: 5,
      }),
      fill: new Fill({
        color: "rgba(255, 255, 0, 0.5)",
      }),
    })
  );
  polygonLayer.getSource().addFeature(feature);
};
</script>

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

<style scoped>
.btns {
  display: flex;
  position: fixed;
  left: 20px;
  bottom: 20px;

  z-index: 999;
}
.btns div {
  width: 100px;
  height: 40px;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}
.read-the-docs {
  color: #888;
}
#map {
  margin: 0;
  width: 100vw;
  height: 100vh;
}
</style>

 

标签:ol,let,center,vue3,source,openLayers,new,import,绘制
From: https://www.cnblogs.com/wcq520/p/18659188

相关文章

  • 深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器
    一、ScottPlot.WPF简介ScottPlot.WPF是基于ScottPlot绘图库专门为WindowsPresentationFoundation(WPF)框架量身定制的强大绘图组件。它无缝集成到WPF应用程序中,为开发者提供了一种简洁、高效的方式来可视化数据,无论是科学研究中的实验数据展示、金融领域的行情走势......
  • 前端学习openLayers配合vue3(两个坐标之间线的绘制)
    上节我们学了点的绘制,今天我们来学习一下线的绘制关键代码constlineLayer=newVectorLayer({source:newVectorSource(),});map.addLayer(lineLayer);letfeature=newFeature({//北京到上海的经纬度geometry:newLineString([[116.46,39.92],......
  • Easy.Admin:基于 .NET 8 和 Vue3 的后台管理系统,支持多种数据库和服务端渲染(SSR)
     ......
  • 高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图
    目录高效工作流:用Mermaid绘制你的专属流程图一、流程图的使用场景1.1、流程图flowChart1.2、使用场景二、如何使用mermaid画出优雅的流程图2.1、流程图添加图名2.2、定义图类型与方向2.3、节点形状定义2.3.1、规定语法2.3.2、不同节点案例2.4、节点连线2.5、子图与......
  • vue3的element-plus侧边菜单栏测试案例
    未正确集成element-plus的先看前面的随笔集成后没问题,下面案例才能正常运行展示<scriptlang="ts"setup>import{Document,MenuasIconMenu,Location,Setting,}from'@element-plus/icons-vue'consthandleOpen=(key:string,keyPath:string[])=>{......
  • 使用 WebGL 绘制一个简单的点和原理解析
    使用WebGL绘制一个简单的点,我们需要通过WebGL的管线来进行一系列的步骤。以下是实现的详细步骤和原理解析:WebGL绘制点的基本步骤初始化WebGL上下文首先,我们需要获取WebGL上下文,这样才能进行所有的绘图操作。通常,WebGL上下文是通过<canvas>元素获取的。编......
  • 前端学习openLayers配合vue3(圆形形状的绘制)
    上节课我们学了加载了矢量图片,这节我们来学绘制圆形关键代码,第一段呢是设置圆点的操作,第二步是点击地图获取地图位置来设置圆点,ol还有很多类,各种形状的//设置圆点//letanchorLayer=newVectorLayer({//source:newVectorSource(),//});//letanchorFeat......
  • VUE - VUE3使用tsx
    VUE-VUE3使用tsx Vue官方提供了一个插件@vitejs/plugin-vue-jsx来支持JSX语法。以下是使用该插件的具体步骤: 安装插件:使用npm或yarn安装 @vitejs/plugin-vue-jsx。 npminstall@vitejs/plugin-vue-jsx--save-dev  配置Vite:在 vite.config......
  • BUG:SWM32开机绘制lvgl框架下的某个自定义控件死机
    一.BUG描述现象1.画了一个关于"模式"的自定义控件,结果开机绘制总是死机。现象2.用keil进行仿真调试全速运行同样死机,但是如果在异常处加断点,然后单步调试就正常。(注:仿真调试比直接运行的速度要慢)现象3.把这个异常对象的创建代码删除,再后面加四个打印追踪,还是死机;但是删除两个......
  • 前端学习openLayers配合vue3(加载矢量图标)
    今天我们来进行矢量图标的加载关键代码有一个比较注意的点就是,图片路径必须引入不能直接写路径,我找半天也没发现问题所在letanchorLayer=newVectorLayer({source:newVectorSource(),});letanchorFeatures=newFeature({geometry:newPoint(cen......