五十、openlayers官网示例JSTS Integration解析——使用JSTS 库来处理几何缓冲区并在地图上显示结果

news2024/10/16 15:20:00

官网demo地址:

JSTS Integration 

这篇讲了如何在地图上添加缓冲图形

什么叫做缓冲几何?

几何缓冲(Geometric Buffering)是指在 GIS(地理信息系统)和计算几何中,围绕一个几何对象创建一个具有特定距离的区域。这种操作通常用于表示影响区域、保护区、可视范围等。例如,创建一个道路中心线的缓冲区,可以用于表示道路的影响范围。

缓冲几何的具体应用包括:

  1. 道路缓冲区:表示道路的影响范围,如交通噪音或安全距离。
  2. 河流缓冲区:用于表示河流两侧的生态保护区或防洪区。
  3. 设施缓冲区:用于表示设施(如学校、医院、加油站等)的服务范围或安全区。

 首先,初始化地图

const rasterLayer = new TileLayer({
      source: new OSM(),
    });

    const map = new Map({
      layers: [rasterLayer, vectorLayer],
      target: document.getElementById("map"),
      view: new View({
        center: fromLonLat([126.979293, 37.528787]),
        zoom: 15,
      }),
    });

 使用fetch请求json数据并创建一个矢量图层展示数据。

 const source = new VectorSource();
    fetch(
      "https://openlayers.org/en/latest/examples/data/geojson/roads-seoul.geojson"
    )
      .then(function (response) {
        return response.json();
      })
      .then(function (json) {
        const format = new GeoJSON();
        const features = format.readFeatures(json, {
          featureProjection: "EPSG:3857",
        })
        source.addFeatures(features);
      });


  const vectorLayer = new VectorLayer({
      source: source,
      style: {
        "fill-color": "rgba(255,255,255,0.5)",
        "stroke-color": "#000",
        "stroke-width": 2,
      },
    });

先来看没有添加缓冲区的图层,是这样的:

接下来添加缓冲区

先下载依赖

npm i jsts@2.3.0   
import * as jsts from "jsts";

 注入 OpenLayers 的几何类型到 JSTS 的解析器中

 const parser = new jsts.io.OL3Parser();
        parser.inject(
          Point,
          LineString,
          LinearRing,
          Polygon,
          MultiPoint,
          MultiLineString,
          MultiPolygon
        );

将每一个数据进行处理 

for (let i = 0; i < features.length; i++) {
          const feature = features[i];
          // 将OpenLayers的几何形状转换为JSTS的几何形状
          const jstsGeom = parser.read(feature.getGeometry());

          //在每条线周围留出40米的缓冲区
          const buffered = jstsGeom.buffer(40);

          //从JSTS转换回来并替换特性上的几何图形
          feature.setGeometry(parser.write(buffered));
        }

 完整代码:

<template>
  <div class="box">
    <h1>JSTS Integration</h1>
    <div id="map" class="map"></div>
  </div>
</template>

<script>
import GeoJSON from "ol/format/GeoJSON.js";
import LinearRing from "ol/geom/LinearRing.js";
import Map from "ol/Map.js";
import OSM from "ol/source/OSM.js";
import VectorSource from "ol/source/Vector.js";
import View from "ol/View.js";
import {
  LineString,
  MultiLineString,
  MultiPoint,
  MultiPolygon,
  Point,
  Polygon,
} from "ol/geom.js";
import { Tile as TileLayer, Vector as VectorLayer } from "ol/layer.js";
import { fromLonLat } from "ol/proj.js";
import * as jsts from "jsts";
export default {
  name: "",
  components: {},
  data() {
    return {
      map: null,
    };
  },
  computed: {},
  created() {},
  mounted() {
    const source = new VectorSource();
    fetch(
      "https://openlayers.org/en/latest/examples/data/geojson/roads-seoul.geojson"
    )
      .then(function (response) {
        return response.json();
      })
      .then(function (json) {
        const format = new GeoJSON();
        const features = format.readFeatures(json, {
          featureProjection: "EPSG:3857",
        });

        const parser = new jsts.io.OL3Parser();
        parser.inject(
          Point,
          LineString,
          LinearRing,
          Polygon,
          MultiPoint,
          MultiLineString,
          MultiPolygon
        );

        for (let i = 0; i < features.length; i++) {
          const feature = features[i];
          // 将OpenLayers的几何形状转换为JSTS的几何形状
          const jstsGeom = parser.read(feature.getGeometry());

          //在每条线周围留出40米的缓冲区
          const buffered = jstsGeom.buffer(40);

          //从JSTS转换回来并替换特性上的几何图形
          feature.setGeometry(parser.write(buffered));
        }

        source.addFeatures(features);
      });
    const vectorLayer = new VectorLayer({
      source: source,
      style: {
        "fill-color": "rgba(255,255,255,0.5)",
        "stroke-color": "#000",
        "stroke-width": 2,
      },
    });

    const rasterLayer = new TileLayer({
      source: new OSM(),
    });

    const map = new Map({
      layers: [rasterLayer, vectorLayer],
      target: document.getElementById("map"),
      view: new View({
        center: fromLonLat([126.979293, 37.528787]),
        zoom: 15,
      }),
    });
  },
  methods: {},
};
</script>

<style lang="scss" scoped>
#map {
  width: 100%;
  height: 500px;
}
.box {
  height: 100%;
}

</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时空预测 | 基于深度学习的碳排放时空预测模型

时空预测 模型描述 数据收集和准备&#xff1a;收集与碳排放相关的数据&#xff0c;包括历史碳排放数据、气象数据、人口密度数据等。确保数据的质量和完整性&#xff0c;并进行必要的数据清洗和预处理。 特征工程&#xff1a;根据问题的需求和领域知识&#xff0c;对数据进行…

Walrus:去中心化存储和DA协议,可以基于Sui构建L2和大型存储

Walrus是为区块链应用和自主代理提供的创新去中心化存储网络。Walrus存储系统今天以开发者预览版的形式发布&#xff0c;面向Sui开发者征求反馈意见&#xff0c;并预计很快会向其他Web3社区广泛推广。 通过采用纠删编码创新技术&#xff0c;Walrus能够快速且稳健地将非结构化数…

5款堪称变态的AI神器,焊死在电脑上永不删除!

一 、AI视频合成工具——Runway&#xff1a; 第一款RunWay&#xff0c;你只需要轻轻一抹&#xff0c;视频中的元素就会被擦除&#xff0c;再来轻轻一抹&#xff0c;直接擦除&#xff0c;不喜欢这个人直接擦除&#xff0c;一点痕迹都看不出来。 除了视频擦除功能外&#xff0c;…

第一个Neety程序

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Netty ⛺️稳中求进&#xff0c;晒太阳 加入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.39.F…

【Spine学习10】之 创建新骨骼时,自动绑定图片和插槽的快捷方式

两天没更新了。 遇到一些难解的难题 用的版本是破解版 不知道为啥现在的教程非常地快 明明有些细节很重要还略过讲 所以创建骨骼这里 基本创建是都会 可是骨骼一多 实际工作中的重命名也太麻烦了 。 这就需要学习快捷创建方式&#xff1a; <将对应图片自动绑定到新骨骼上并…

哔哩哔哩视频URL解析原理

哔哩哔哩视频URL解析原理 视频网址解析视频的原理通常涉及以下几个步骤&#xff1a; 1、获取视频页面源代码&#xff1a;通过HTTP请求获取视频所在网页的HTML源代码。这一步通常需要处理反爬虫机制&#xff0c;如验证码或用户登录。 2、解析页面源代码&#xff1a;分析HTML源代…

【上海交大】博士生年度进展报告模板

上海交通大学 博士生年度进展报告模板 比较不好找&#xff0c;在交我办中发起申请流程后才能看到链接&#xff0c;链接如下&#xff1a; https://www.gs.sjtu.edu.cn/xzzx/pygl/15

byte[]转MultipartFile、byte[]转File一次看个够

目录 需求背景 当你需要将byte[]、MultipartFile、File实现互转时&#xff0c;无外乎以下场景&#xff1a; 保存第三方接口返回二进制流前/后端文件流上传微服务间调用文件格式转换 正如你所需要的&#xff0c;通过搜索引擎筛选到我的本篇文章是因为你在开发中需要将byte[]转…

剑指offer 算法题(数组中重复的数据)

剑指offer 第一题 去力扣里测试算法 思路一&#xff1a; 排序后&#xff0c;前一个与后一个相比是否相同。 class Solution { public:vector<int> findDuplicates(vector<int>& nums) {sort(nums.begin(), nums.end());int n 0;int len nums.size();vect…

如何设计一个点赞系统

首先我们定义出一个点赞系统需要对外提供哪些接口&#xff1a; 1.用户对特定的消息进行点赞&#xff1b; 2.用户查看自己发布的某条消息点赞数量以及被哪些人赞过&#xff1b; 3.用户查看自己给哪些消息点赞过&#xff1b; 这里假设每条消息都有一个message_id, 每一个用户都…

文件防篡改监控工具 - WGCLOUD全面介绍

WGCLOUD是一款优秀的运维监控软件&#xff0c;免费、轻量、高效&#xff0c;部署容易&#xff0c;上手简单&#xff0c;对新手非常友好 WGCLOUD部署完成后&#xff0c;点击菜单【文件防篡改】&#xff0c;可以看到如下页面 我们点击【添加】按钮&#xff0c;输入监控文件的信息…

python之Bible快速检索器

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! python之Bible快速检索器 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; 助力快…

【网络安全的神秘世界】已解决Failed to start proxy service on 127.0.0.1:8080

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 解决burpsuite无法在 127.0.0.1&#xff1a;8080 上启动代理服务端口被占用以及抓不到本地包的问题 Burpsuite无法启动proxy…

ISSN和CN到底有什么不同呢?

在学术出版领域&#xff0c;我们常常会遇到各种标识码&#xff0c;其中ISSN和CN无疑是两个最为常见的。尽管它们都是用于标识出版物的重要信息&#xff0c;但两者在定义、功能和应用上却有着显著的区别。那么&#xff0c;ISSN和CN到底有什么不同呢&#xff1f;接下来&#xff0…

深度解析RocketMq源码-持久化组件(四) CommitLog

1.绪论 commitLog是rocketmq存储的核心&#xff0c;前面我们介绍了mappedfile、mappedfilequeue、刷盘策略&#xff0c;其实commitlog的核心组件我们基本上已经介绍完成。 2.commitLog的组成 commitLog的核心其实就是MqppedFilequeue&#xff0c;它本质上就是多个mappedFile…

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是&#xff1a;",px) &#xff08;1&#xff09;RGB色彩空间 R通道&#xff1a;红色通道 G通道&…

LVS(Linux Virtual Server)集群,(1)NAT模式

Cluster&#xff1a;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 集群分为三种类型&#xff1a; LB(Load Balancing)&#xff0c;负载均衡&#xff0c;多个主机组成&#xff0c;每个主机只承担一部分访问请求 HA(High Availiablity)&#xf…

网工内推 | H3C工程师,大专可投,无责底薪加提成

01 内蒙古华贸信息科技有限公司 &#x1f537;招聘岗位&#xff1a;H3C工程师 &#x1f537;岗位职责&#xff1a; 1、负责核心网络的7*24小时网络运维&#xff0c;可持续对网络进行优化&#xff0c;提供高质量的网络服务&#xff1b; 2、能够独立运维高端核心设备和楼层接入网…

Premiere Pro 关键帧的运用(光盘滚入盘盒)

制作“光盘滚入盘盒”效果&#xff0c;步骤如下&#xff1a; 1.新建项目>新建序列&#xff0c;项目名称为“光盘滚入盘盒”&#xff0c;序列设置如下图所示。 2.导入素材到项目面板中。 3.新建“颜色遮罩 ”。在项目面板中&#xff0c;右键【新建项目】-【颜色遮罩】-【视…

idea2023开发插件入门

idea2023开发插件入门 创建工程 通过 idea plugin 来创建工程 修改 开发语言 默认创建的工程是用scala开发的&#xff0c;但是我不会&#xff0c;就会java,所以改成java创建 build.gradle.kt 为 build.gradlesettings.gradle.kt 为 settings.gradle build.gradle修改为以…