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

news2024/12/27 11:48:21

文章目录

  • 一、前言
  • 二、面生成墙方法示例


一、前言

当我们从室外放大到室内展示室内图层时,我们可能只有房间面的数据,这时要展示房间墙数据,就需要借助工具对房间面进行缓冲,但是数据变动时,我们还要再次进行一下缓冲区生成操作。下面是借助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.0005
  geoInput = {
    type: 'LineString',
    coordinates: line.geometry.coordinates
  };
  var geoReader = new jsts.io.GeoJSONReader()
  geoWriter = new jsts.io.GeoJSONWriter()
  let mybuffer = jsts.operation.buffer
  let 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 = buffetParam
  var geom = geoWriter.write(geoReader.read(geoInput))
  let myBufferOp = mybuffer.BufferOp
  myBufferOp._bufParams = buffetParam
  var 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.coloradmin.cn/o/1991603.html

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

相关文章

【算法专题】哈希表

哈希表是什么&#xff1f;有什么用&#xff1f;什么时候使用&#xff1f;怎么用&#xff1f; 哈希表是存储数据对的容器&#xff1b;作用在于快速查找某个元素&#xff1b;当我们需要频繁地查找元素时&#xff0c;会考虑使用哈希表&#xff1b;在算法题中&#xff0c;我们通常使…

基于el-table的表格点选和框选功能

开篇 本篇文章旨在实现一个基于el-table的表格点选和框选功能&#xff0c;除此之外&#xff0c;还支持多种模式的切换、自定义勾选日期等。且&#xff0c;该表格后续可能还会持续优化&#xff01; 功能介绍 表格点选和框选功能&#xff08;没有点击ctrl键的情况下&#xff09;…

AI安全新纪元:智能体驱动的网络安全新范式

近日&#xff0c;ISC.AI 2024第十二届互联网安全大会在北京盛大开幕。本次大会以"打造安全大模型&#xff0c;引领安全行业革命"为主题&#xff0c;旨在呼吁行业以大模型重塑安全体系&#xff0c;以保障数字经济的稳健发展。 在企业安全运营与策略实践论坛上&#x…

人工智能时代,数字化工厂如何改革?提升竞争力?

在人工智能时代&#xff0c;数字化工厂通过数据驱动的决策、智能制造、柔性生产、物联网整合以及人机协作&#xff0c;实现生产效率和产品质量的全面提升&#xff0c;并不断创新以保持竞争力。 --题记 在人工智能时代&#xff0c;数字化工厂的改革…

usb摄像头 按钮 静止按钮

usb摄像头 按钮 静止按钮 来分析一个UVC的摄像头的枚举信息 UVC学习&#xff1a;UVC中断端点介绍 https://www.eet-china.com/mp/a269529.html 输入命令lsusb -d 0c45:62f1 -v https://www.miaokee.com/705548.html >Video Class-Specific VS Video Input Header Descrip…

如何恢复未保存/删除的 WPS 文档文件

“如何恢复 WPS 文件&#xff1f;文件已损坏&#xff0c;似乎我之前没有保存过&#xff0c;软件退出&#xff0c;导致文件丢失。有什么方法可以恢复未保存的 WPS 文档吗&#xff1f;” WPS 办公套件是金山软件开发的一款很棒的套件。说实话&#xff0c;它更适合个人和办公室工…

GEE数据——全球固定宽带和移动(蜂窝)网络性能(网速)(2019-2024)

全球固定宽带和移动&#xff08;蜂窝&#xff09;网络性能 简介 全球固定宽带和移动&#xff08;蜂窝&#xff09;网络性能&#xff0c;分配给缩放级别 16 的网络 mercator 瓷砖&#xff08;赤道处约 610.8 米乘 610.8 米&#xff09;。 数据以 Shapefile 格式和 Apache Par…

在那曲,一场别开生面的盛会即将上演

当夏日的暖阳轻抚着那曲的广袤草原&#xff0c;一场展现高原之魂的盛会悄然临近。2024年8月8日&#xff0c;那曲市将举办一场独特的选美比赛——“最美牦牛”评选比赛&#xff0c;邀请各界人士、朋友共襄盛举。 牦牛&#xff0c;被誉为“高原之舟”&#xff0c;它们在这片古老的…

【nginx】解决k8s中部署nginx转发不会自动更新域名解析启动失败的问题

文章目录 1. 问题2.解决办法3.扩展说明3.1 DNS解析阶段划分3.2 问题说明3.2.1 先看/etc/resolv.conf说明3.2.2 针对第一个问题3.2.3 针对第二个问题 【后端】NginxluaOpenResty高性能实践 参考&#xff1a; https://blog.csdn.net/u010837612/article/details/123275026 1. 问…

【Java安全开发全流程解读】Ting-Write-Nuclei V1.0发布 【万户OA-SQL注入1Day-POC】

加微信即可加入WingBy交流群 不存在娱乐化 前言 nuclei-poc一键生成工具市面上很多也很全&#xff0c;比如burp插件生成POC projectdiscovery/nuclei-burp-plugin: Nuclei plugin for BurpSuite (github.com) GUI nuclei-plus/README_zh.md at main Yong-An-Dang/nuclei-p…

七夕情人节送什么礼物?看完这篇你就知道了

在这个充满爱意的时刻&#xff0c;送上一份精心挑选的礼物&#xff0c;不仅能表达你的爱意&#xff0c;更能加深彼此之间的情感联系。然而&#xff0c;选择一份合适的情人节礼物并非易事&#xff0c;因为每个人都有其独特的需求和喜好。如果你还在为情人节送什么礼物而纠结&…

1、.Net UI框架:Xamarin Forms - .Net宣传系列文章

Xamarin.Forms是一个跨平台移动应用开发框架&#xff0c;它允许开发者使用C#和.NET进行一次编码&#xff0c;然后在iOS、Android、macOS和Windows等多个平台上运行。Xamarin.Forms是Xamarin的一部分&#xff0c;而Xamarin是微软的.NET跨平台开发工具集&#xff0c;它提供了一套…

荟萃科技:海外调查问卷的核心在哪?

那就需要知道海外问卷调查是什么&#xff1f; 海外问卷调查是国外的企业为了收集消费者的意见反馈&#xff0c;在市场上发布付费问卷&#xff0c;从而进一步改善他们的产品或者服务。 我们就是回答这些付费问卷来赚取佣金。 核心来了&#xff0c;参与这些调查问卷需要有一定…

防近视台灯什么牌子好?刨析防近视台灯的详细效果

当代不管是学习还是工作&#xff0c;大家处于“卷”的状态&#xff0c;夜晚办公的上班族或是学生党都只多不少。普通的台灯只有最基础的照明作用&#xff0c;长时间下来对眼睛伤害大&#xff0c;严重还会产生眼部疾病。而在这一时刻防近视台灯——护眼灯的出现&#xff0c;成为…

ECCV2024,清华百度提出ReSyncer:可实现音频同步嘴唇动作视频生成。

清华&百度等联合提出了ReSyncer&#xff0c;可以实现更高稳定性和质量的口型同步&#xff0c;而且还支持创建虚拟表演者所必需的各种有趣属性&#xff0c;包括快速个性化微调、视频驱动的口型同步、说话风格的转换&#xff0c;甚至换脸。 ReSyncer的工作原理可以简单理解为…

暑假看这个,一个月英语水平突飞猛进

恭喜考研党们尘埃落定&#xff0c;静等9月1号入学。 闲暇之余&#xff0c;可以看看各个领域的书&#xff0c;看优秀老师的讲课视频&#xff0c;尝试学习一门新技能....不仅能学到很多知识&#xff0c;还能让生活更加丰富。 推荐几个适合大部分人提升能力的网站。 1、中国大学MO…

JVM知识总结(即时编译)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 即时编译 Java编译器经过解释执行&#xff0c;其执行速度必然会比…

【Linux】学习Linux,需要借助具象化的思维

指令与图形化界面 导读一、命令行与图形化界面二、命令行与图形化界面的发展历程1.2.1 打字机的起源1.2.2 肖尔斯和格利登型打字机1.2.3 鼠标的发明1.2.4 图形化界面&#xff08;GUI&#xff09;的发展 三、命令行与图形化之间的联系3.1 图形化界面的人机交互3.2 命令行界面的人…

SOLIDWORKS 机电协同设计:无缝集成,提升创新速度

在现代制造业中&#xff0c;产品的复杂性和多样性日益增加&#xff0c;这要求设计团队能够在更短的时间内交付高质量的产品。为了应对这一挑战&#xff0c;越来越多的企业开始采用机电一体化的设计方法&#xff0c;其中SOLIDWORKS成为了实现这一目标的理想工具。作为SOLIDWORKS…

趋动科技联合超聚变,让超融合彻底释放算力潜能

近日&#xff0c;趋动科技联合超聚变推出基于FusionOne HCI超融合的AI算力资源池化解决方案。该方案基于业内领先的AI算力资源池化技术&#xff0c;实现智能调度、异构算力融合管理等功能&#xff0c;让客户能够低成本获取AI算力&#xff0c;便捷使用AI算力&#xff0c;加速AI业…