mapbox-gl 实现房间面生成墙(借助jsts)

文章目录

  • 一、前言


一、前言

当我们从室外放大到室内展示室内图层时,我们可能只有房间面的数据,这时要展示房间墙数据,就需要借助工具对房间面进行缓冲,但是数据变动时,我们还要再次进行一下缓冲区生成操作。下面是借助jsts纯前端方式实现面缓冲,快速房间面生成墙,面数据变动时,调取方法即可获取墙数据。
在这里插入图片描述

二、面生成墙方法示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>面生成墙</title><script src="lib/jquery-3.4.1.js"></script><link href="lib/mapbox-gl/mapbox-gl.css" rel="stylesheet"><script src="lib/mapbox-gl/mapbox-gl.js"></script><script src="lib/lodash/lodash.min.js"></script><script src="lib/plugins/mapbox-gl-utils/0.39.0/mapbox-gl-utils.js"></script><script src='lib/plugins/turf/6.3.0/turf.min.js'></script><!--<script src='https://lib.baomitu.com/jsts/1.6.2/jsts.min.js'></script>--><script src='lib/plugins/jsts/jsts.min.js'></script>
</head>
<style>html, body {height: 100%;margin: 0px;}li, ul {list-style: none;}#map {width: 100%;height: 100%;}
</style>
<body>
<div id="map">
</div>
</body>
<script type="text/javascript">mapboxgl.accessToken = 'pk.eyJ1IjoibWF4aWFvZmVpIiwiYSI6ImNrNDluNGl1dzA2a2YzdHBjbWZjZms3eHIifQ.c2QLQt5ZrUbOavbZUdRXMA';var map = new mapboxgl.Map({container: 'map',zoom: 12,minZoom: 4,center: [113.53033743016164, 34.81470384732482],style: 'mapbox://styles/mapbox/light-v11',antialias: true})U.init(map)const line = turf.lineString([[113.52687054416015, 34.82807637568719], //中长末有弧度[113.53969111255441, 34.828349111077715],[113.53965640118996, 34.80933920954946],[113.52687054416015, 34.80889004156351],[113.52687054416015, 34.82807637568719]])let isbh = turf.booleanClockwise(line)var distance = 0.0005geoInput = {type: 'LineString',coordinates: line.geometry.coordinates};var geoReader = new jsts.io.GeoJSONReader()geoWriter = new jsts.io.GeoJSONWriter()let mybuffer = jsts.operation.bufferlet buffetParam = new jsts.operation.buffer.BufferParameters()buffetParam.setEndCapStyle(jsts.operation.buffer.BufferParameters.CAP_SQUARE)buffetParam.setJoinStyle(jsts.operation.buffer.BufferParameters.JOIN_MITRE)// 生成单边缓冲区,末端不闭合// buffetParam.setSingleSided(true)let geoInputRead =  geoReader.read(geoInput)mybuffer.BufferParameters = buffetParamvar geom = geoWriter.write(geoReader.read(geoInput))let myBufferOp = mybuffer.BufferOpmyBufferOp._bufParams = buffetParamvar bufferOp = myBufferOp.bufferOp(geoInputRead, distance, buffetParam)var geoBuffer = geoWriter.write(bufferOp)let Polys = []map.on('load', () => {Polys.push({geometry: geoBuffer,'type': 'Feature'})map.U.addGeoJSON('buffer', {'type': 'FeatureCollection','features': Polys})// map.U.addGeoJSON('buffer', intersection)map.U.addFill('buffer', 'buffer', {'fill-color': 'blue'})let nbgeometry = JSON.parse(JSON.stringify(geoBuffer))nbgeometry.coordinates = _.slice(nbgeometry.coordinates, 1, 2)// 内环为房间map.U.addGeoJSON('buffer-nb', {'type': 'FeatureCollection','features': [{geometry: nbgeometry,'type': 'Feature'}]})// map.U.addGeoJSON('buffer', intersection)map.U.addFill('buffer-nb', 'buffer-nb', {'fill-color': 'red'})map.U.addGeoJSON('route', {'type': 'FeatureCollection','features': [line]})map.U.addLine('route', 'route', {'line-color': 'red','line-width': 1,'line-opacity': 1,// 'line-dasharray': [4, 2],'line-join': 'round','line-cap': 'round'})})
</script></html>

运行后结果如下:
在这里插入图片描述
设置单边缓冲区会存在不闭合问题,获取内部缓冲区、外部缓冲区需要进一步研究
在这里插入图片描述
希望对您有帮助,发财的小手点点赞,点点关注~感谢

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Copy as cURL 字段含义

当前端在开发过程中&#xff0c;遇到接口错误反馈给后端人员时&#xff0c;一般在此接口处右键复制为cURL。 格式如下&#xff1a; curl https://xxx.xxx.cn/xxx/xxx/management/record/list \-H accept: application/json, text/plain, */* \-H accept-language: zh-CN,zh;q0…

1.4 C 程序的编译过程与 CLion 调试技巧

目录 1 程序的编译过程 1.1 编写源代码 1.2 预处理&#xff08;Preprocessing&#xff09; 1.3 编译&#xff08;Compilation&#xff09; 1.4 汇编&#xff08;Assembly&#xff09; 1.5 链接&#xff08;Linking&#xff09; 1.6 执行 2 编译过程的输入输出文件概览 …

谷粒商城实战笔记-140-商城业务-nginx-搭建域名访问环境二(负载均衡到网关)

文章目录 一&#xff0c;通过域名访问商城架构设计1&#xff0c;为什么nginx要将请求转发给网关2&#xff0c;架构设计 二&#xff0c;配置1&#xff0c;nginx配置1.1 nginx.conf1.2 gulimall.conf1.3 配置原理 2&#xff0c;网关配置 三&#xff0c;记录2个问题1&#xff0c;网…

【C++】初识面向对象:类与对象详解

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性 本章将介绍C中一个重要的概念——类。通过类&#xff0c;我们可以类中定义成员变量和成员函数&#xff0c;实现模块化封装&#xff0c;从而构建更加抽象和复杂的工程。 &…

基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MSER 4.2 HOG特征提取 4.3 SVM 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2017b 3.部分核心程序 &#xff08;完整版代码包含中…

CMU15445 (Fall 2023) Project 1 - Buffer Pool 思路分享

文章目录 写在前面Task 1 - LRU-K Replacement PolicyTask 2 - Disk SchedulerTask 3 - Buffer Pool ManagerNewPageFetchPageUnpinPageDeletePageFlushPage 写在最后 写在前面 操作系统为应用程序提供了默认的缓存机制&#xff0c;DBMS作为应用程序&#xff0c;为什么不使用默…

LSLM论文

解决的问题 现在的语音模型&#xff08;SLM&#xff09;增强了语音对话的能力&#xff0c;但都局限于回合制对话&#xff0c;在实时对话的情境下与用户交互的能力有所欠缺&#xff0c;例如&#xff1a;当生成的对话不满意时被打断。所以&#xff0c;这篇论文在实时的的语音语言…

ShardingSphere自定义分布式主键生成策略、自定义分片规则

文章目录 主键生成策略源码KeyGenerateAlgorithm源码入口实现扩展 自定义分布式主键生成策略 分片算法ShardingAlgorithm实现扩展 自定义分片算法踩的坑 主键生成策略源码 开发者手册 KeyGenerateAlgorithm 全限定类名org.apache.shardingsphere.sharding.spi.KeyGenerateAl…

QT界面设计开发(Visual Studio 2019)—学习记录一

一、控件升级 简要介绍&#xff1a; 简单来说&#xff0c;控件提升就是将一个基础控件&#xff08;Base Widget&#xff09;转换为一个更特定、更复杂的自定义控件&#xff08;Custom Widget&#xff09;。这样做的目的是为了在设计界面时能够使用更多高级功能&#xff0c;而不…

环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)

环境搭建&#xff1a;全面详尽的 MongoDB Shell & MongoDB Server介绍、安装、验证与配置指南&#xff08;以 Windows 系统为主&#xff09; MongoDB 是一个基于文档的 NoSQL 数据库&#xff0c;以其高性能、灵活性和可扩展性而受到广泛欢迎。本文将带您完成 MongoDB 的安装…

bpmn简单使用(制作流程图)

1、先下载依赖&#xff0c;下面是我下载的版本 "bpmn-io/properties-panel": "^3.23.0", "bpmn-js": "^17.9.1", "bpmn-js-properties-panel": "^5.6.1", "camunda-bpmn-moddle": "^7.0.1",…

CTFHUB-web-RCE-eval执行

开启题目 查看源码发现直接用蚁剑连接就可以&#xff0c;连接之后发现成功了

计算机网络408考研 2020

2020 湖科大教书匠的个人空间-湖科大教书匠个人主页-哔哩哔哩视频 计算机网络408考研 历年真题解析&#xff08;有字幕无背景音乐版&#xff09;_哔哩哔哩_bilibili 计算机网络408考研2020年真题解析_哔哩哔哩_bilibili 1 2 3 41 11 1

乡村振兴农村煤改气建设规划设计方案

1. 方案目标与背景 《乡村振兴农村煤改气建设规划设计方案》旨在响应国家乡村振兴战略&#xff0c;通过建设规划推动农村能源结构转型&#xff0c;减少燃煤造成的环境污染&#xff0c;促进农村可持续发展。 2. 农村能源消耗现状 根据2006至2007年的全国性调研&#xff0c;农…

从一个服务预热不生效问题谈微服务无损上线

作者&#xff1a;凡问、启淮 前言 本文基于阿里云技术服务团队和产研团队&#xff0c;在解决易易互联使用 MSE&#xff08;微服务引擎&#xff09;产品无损上线功能所遇到问题的过程总结而成。本文将从问题和解决方法谈起&#xff0c;再介绍相关原理&#xff0c;后进一步拓展…

4.11.seq2seq 序列到序列学习

序列到序列学习(seq2seq) ​ 使用两个循环神经网络的编码器和解码器&#xff0c;应用于序列到薛烈类的学习任务。 ​ ​ 在图中&#xff0c;特定的"<eos>"表示序列结束词元。一旦输出序列生成此词元&#xff0c;模型就会停止预测。在循环神经网络解码器的初…

JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)

今天,我给大家分享一个原创的CSS菜单,整个菜单全由CSS写成,仅在切换布局时使用JS。合不合意,先看看效果图。 本例图片 接下来,我来详细给大家分享它的制作方法。 文件夹结构 因为涉及到了样式表切换,所以,你需要借鉴一下我的文件夹结构。 CSS文件夹: reset.css 用于…

维吉尼亚密码加解密实现(python)

维吉尼亚密码 原理 维吉尼亚密码&#xff08;Vigenere&#xff09;是使用一系列凯撒密码组成密码字母表的加密算法&#xff0c;属于多表密码的一种简单形式。 下面给出一个例子 明文&#xff1a;come greatwall 密钥&#xff1a;crypto首先&#xff0c;对密钥进行填充使其长…

【算法】普里姆算法解决修路问题

应用场景——修路问题 1.某地有 7 个村庄&#xff08;A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;E&#xff0c;F&#xff0c;G&#xff09;&#xff0c;现在需要修路把 7 个村庄连通 2.各个村庄的距离用边线表示&#xff08;权&#xff09;&#xff0c;比如 A - …

ORM工具之SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;使用MIT许可证发行。 SQLAlchemy“采用简单的Python语言&#xff0c;为高效和高性能的数据库访问设计&#xff0c;实现了完整的企业级持久模型”。SQL…