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

OpenLayers.js 入门教程:打造互动地图的入门指南 theme: smartblue 本文简介 戴尬猴,我是德育处主任 本文介绍如何使用 OpenLayers.js (后面简称 ol)。ol 是一个开源 JavaScript 库,可用于在Web页面上创建交互式地图。 ol能帮助我们在浏览器轻松地使用地图功能,例如地图缩放、地图拖动、地图标记和地图交互等。 本文适合想有JS基础,又想了解 ol 的工友。 OpenLayers简介 ⚡️... 阅读详情

官网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>

 

openlayers:实现展示JSTS与OpenLayers集成 (附完整源码) 阅读详情

相关推荐

从零搭建IoT数据中台:STM32+WebSocket实现边缘设备与Web端实时双向通信

本文详细介绍了如何从零搭建基于STM32和WebSocket协议的IoT数据中台,实现边缘设备与Web端的实时双向通信。通过硬件选型、协议设计、服务器搭建及安全优化,提供了一套低延迟、高并发的企业级解决方案,适用于智能农业和工业监控等场景。

tea88的博客 749

Openlayers实例详解

本课程选取了OpenLayers一些具有典型代表性的实例进行详解。讲解实例过程中对涉及到的相关知识点进行穿插分析介绍,适合初学者对OpenLayers形成整体认识、树立学习信心。课程涉及到map、view、projection、layer、source、feature、style、overlay、control等组件的实例分析。

【超详细】安装了anaconda后,Ubuntu18+COLMAP配置疯狂踩坑踩至魔怔的记录

本博客收集了博主在Ubuntu18系统中编译COLMAP所遇到的困难,提供了解决方法,也收集了目前网上大多数的坑,除此之外,也为Ubuntu18系统下COLMAP的安装提供了一种新的路径。

Stay_Foo_lish的博客 3509

如何基于openlayers绘制点、线、面各类要素缓冲区

然而官方demo对于如何绘制缓冲区未详细说明。

HeyLoong的博客 1639

图像评价之计算PSNR、SSIM、MSE、LPIPS和NIQE评价指标

如果代码对你的研究有所帮助,请为该仓库点上小星星。

书山有路,学海无涯! 2645

一文介绍Linux EAS

EAS只在系统负载不重时,即系统中每个CPU的利用率都低于其算力的80%时才被启用,而且选出的最节能CPU只有比线程当前运行的CPU节约能量大于6%时,线程才会迁移到该CPU运行。因此EAS为线程选择最节约能量的CPU来运行的前提条件是很苛刻的,针对重载场景(比如游戏),EAS的功能应该很少被使用起来,针对重载场景的功耗优化,这里可能是一个值得尝试的点。算力(capacity)是CPU调度中的一个基础概念,它反映的是一个CPU的计算能力,是个规格化的值,可以通过读取Android手机的文件节点。

youzhangjing_的博客 1234

openlayers+vue实现缓冲区

缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面)按设定的距离条件,围绕其要素而形成一定缓冲区多边形实体,从而实现数据在二维空间得以扩展,后续也可以生成栅格进行叠加分析等。

Yu_Jian_Qt的博客 1507

【Agent】多智能体框架MetaGPT入门教程

创建一个 Action 类的子类 SimpleWriteCode,子类中定义好 prompt,并解析返回结果。在 MetaGPT 中,

酒酿小圆子呀~ 3137

JSTS学习(一) - 简介

JSTS是一个符合OGC规范的简单要素空间位置判定函数JavaScript库,JSTS也是Java类库JTS的一个接口,且与OpenLayer3具有互操作性。 目前原生的OpenLayers3并不支持空间拓扑关系查询,此类库可以作为重要的补充。通过此类库,可以判断多种空间几何的位置关系,最初建立这个工程的目的是为web地图应用提供一套完整的类库来处理和分析简单几何体,但jsts也可以作为

zy332719794的专栏 1万+

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2202

OpenLayers6(8):引入Turf.js做缓冲区分析

1 版本 OpenLayers:6.14.1 2 相关配置 //前端的地理空间分析库,处理各种地图算法 npm i @turf/turf 3 Openlayers图形与图形Turf之间的互相转换 使用策略模式进行实现: /** * 策略模式,不同类型返回不同的Turf几何图形 */ export const mCoords2TurfGeom = { Point: function (coords) { return turf.point(coords);

碰碰的博客 2309

Spring AI Alibaba实战训练营-14基于A2A协议智能体应用开发指南

本文介绍了基于A2A协议的智能体应用开发流程,主要包括客户端和服务端两个模块的实现。关键技术包括A2A通信协议、Nacos服务发现、Spring AI Alibaba框架和DashScope通义千问API。开发步骤涵盖环境准备(JDK17、Maven、Nacos)、项目创建、依赖配置(重点引入spring-ai-alibaba相关组件)以及Nacos和DashScope的核心配置。整个系统架构采用客户端通过Nacos发现服务端Agent,再调用阿里云AI服务的模式,实现了AI能力的解耦与复用。

program哲学 505

openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)

之前在网上搜到的方式实现,主要思路就是获取行政区的所有点,然后获取行政区以外的范围加遮罩,这种方式对于地区是一个完整的可以,但是如果像上面这种,还有很多小区域的就不太友好,结果就成下面的效果图。先抛效果图,该区域有很多个小面。然后我就自己找了一种方式去实现。其实加遮罩的思路很简单,

冰雪为融的博客 2073

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

openlayers3之jsts空间分析完整例子

接着上一篇,把上一篇相关的完整代码写出来。 <!DOCTYPE html> <html> <head> <title>jsts sample</title> <meta charset="utf-8"> <link rel="stylesheet" href="ol3/ol.css" ty...

兰小莫的博客 869

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

开源的前端GIS空间分析库介绍 (二)jsts与ol结合

openlayers是一个偏重量型的前端GIS可视化类库,但是它基本上不具备空间分析运算的能力。举个例子,比如: 1、判断线与线是否交叉 2、线是否穿过多边形 当然,它还是具备了一些简单的空间运算能力,比如geometry对象 ...

此爱如少年 1465

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

openlayers3之jsts笔记

jsts是jts的js库的实现,官方找到的帮助都是jts Javadoc帮助文档,其实完全可以参照jts的帮助。一般地,我们只需要在前端读取格式转成geometry即可,那么很多来自于jts的API都是一样的。附上jts的链接http://locationtech.github.io/jts/javadoc/。下面举一个jsts与ol geometry互转以及使用jts api的例子,如此链接下...

兰小莫的博客 1118

openlayers——(一)缓冲区分析

缓冲区分析(一)turf坐标转换1. 问:2. 答:3. 最后实现:(二)查询和缓冲面相交的点1. 问:2. 答:3. 最后实现:(三)获取相交点(点集)中的坐标 (一)turf坐标转换 1. 问: turf.lineString(), turf.length() 必须是地理坐标系吗?? 我用的是 3857坐标系,好像不行。 我想转换坐标系试一下,但是 坐标数据太多,转换出错了,代码没写对 怎么批量转换坐标系啊?? 我只能搜到 transform() 这种方法 2. 答

xing_1209的博客 3764

JSTS介绍和功能简单示例

JSTS是一个符合OGC标准的,包含空间拓扑功能的JavaScript类库。和turf类似,区别在于,JSTS是通过原始JTS Java 源代码翻译来的,保留了JTSAPI;而turf来自MapBox。个人感觉JSTS的文档不如turf明了(一些网址还404了),但是可以直接适用OpenLayers(以下简称OL)的几何对象,对JTS API熟悉的话在OL工程里可能会更方便。 JSTS的参考文档比较分散,GitHub库里有比较全面的简介,这个地址里有一些简单的示例,JTS API直接用的JavaAPI,.

GIS小虫的博客 5919

openlayers+turf实现自定义缓冲区绘制(vue)

openlayers+turf实现自定义缓冲区绘制

m0_73548338的博客 570

使用openlayers进行空间分析的方法——JSTS库的应用

查看openlayers文档可以发现,openlayers中进行缓冲区分析的方法只有一个,这个方法只适合扩展矩形缓冲区,如果想扩展任意形状的缓冲区则需要用到JSTS。 ol.extent.buffer(extent, value, opt_extent) 例如下面的例子实现了对点【0,0】扩展缓冲区 var pointFeature = new ol.Feature(new ol.ge...

chaoyang89111的博客 4823

openlayers浅入(了解框架逻辑以及简单使用)

项目需求,使用openlayer替换天地图api开发,记录openlayer的学习

weixin_42508580的博客 4856

jsts + openLayer 解决几何自相交报错问题

jsts + openLayer 解决几何自相交报错问题报错:TopologyException: found non-noded intersection between LINESTRING ( 13022630.89845247 5279155.061076987, 13022019.402226187 5278543.81202375 ) and LINESTRING ( 13022546.663871666 5273866.515213738, 13022019.402226187 5286795

Vvaans的博客 2044

js绘制环形缓冲区- JavaScript JSTS Buffer polyline

一,JS缓冲区绘制 参考链接: https: //coderwall.com/p/zb_zdw/buffered-polyline https://coderwall.com/p/-7eojg/jsts-buffered-polyline-in-route-service-google -maps-v3 https://bjornharrtell.github.io/jsts/doc/...

fuyou@的博客 3890

TS学习看这一篇就足够啦~(内含vue3+ts示例)

typescript基础

零凌林的博客 1731

【GIS开发】OpenLayers入门学习(JavaScript库)

文章目录1、简介2、快速入门2.1 在线库快速入门2.2 本地库快速入门2.3 nodejs快速入门3、控件后记 1、简介 官网地址: https://openlayers.org/ 源码地址: https://github.com/openlayers/openlayers OpenLayers是一个高性能、功能丰富的库,用于在 Web 上创建交互式地图。它可以在任何网页上显示从任何来源加载的地图瓦片、矢量数据和标记。OpenLayers 的开发旨在进一步使用各种地理信息。它是完全免费的开源 JavaSc

爱看书的小沐 8358
上一篇: 四十九、openlayers官网示例Immediate Rendering (Geographic)——在地图上绘制星空动画效果
下一篇: 五十一、openlayers官网示例Layer Min/Max Resolution解析——设置图层最大分辨率,超过最大值换另一个图层显示
卷新心菜
博客等级 码龄4年 720粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值