ArcGIS+deck.gl矢量切片三维化表示建筑白模

 01

背景介绍

很多ArcGIS API for JavaScript的用户想要ArcGIS的矢量切片技术体系实现Mapbox gl将城市建筑物footprint矢量切片三维化成建筑白模的效果。效果如图:截图来自mapbox studio1但目前仅靠ArcGIS VectorTileServer 和 ArcGIS API for JavaScript本身无法达到这样的效果。

mapbox gl的矢量切片地图三维效果

ArcGIS API for JavaScript先前与deck.gl已经可以通过多种方式很好的结合。参考:《ArcGIS API 场景添加 3D Tiles》2、《ArcGIS与deckgl结合的不同模式》3。那么我们可以去看一下deck.gl能不能利用mapbox gl矢量切片三维化的这个优势。

02

技术路线

deck.gl与Mapbox标准的矢量切片有两种结合模式。一个是采用Mapbox底图作为程序全局底图。如:示例程序一4

优点:

可以使用托管在Mapbox gl官网的样式,直接调用Mapbox studio中创作的三维化底图。方便、美观。

缺点:

1.web程序底图全局变为了mapbox底图,deck.gl被夺舍了,无法作为单一图层与ArcGIS的场景视图进行结合。

2.mapbox服务器在外网,并且商用要收费。已经采购了ArcGIS作为内网服务器的用户没有必要额外采购和修改地图制作技术路线。

Mapbox底图作为程序底图

另一个技术路线是添加MVTLayer作为一个业务图层。如:示例程序二5

MVTLayer作为业务图层

优点:

1.作为单图层,可以借助ArcGIS + deck.gl的官方结合方式在ArcGIS地图视图和场景视图去直接使用。

2.既支持开源生态常用的.mvt格式的矢量切片,也支持ArcGIS为代表的.pbf格式的矢量切片。直接支持ArcGIS发布的VectorTileServer。

缺点:

1.在渲染层面,MVTLayer不能加载完整矢量切片style.json样式文件。只能通过deck.gl继承的GeoJSONLayer和TileLayer以及Layer的一些属性进行很有限的前端渲染。不能支持完整的mapbox矢量切片样式标准6。

 2.在数据层面,只能一次性加载全部矢量切片服务下的子图层。在全部图层加载完毕之前,无法进行子图层的过滤。如果后端采用Mapbox世界地图https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/{z}/{x}/{y}.mvt?access_token=token,那么会造成大量数据冗余(Mapbox过滤图层的机制是style.json样式)。如果使用ArcGIS发布的矢量切片服务,我们只需把建筑物footprint单独发布为一个服务即可。

另外:关于type:fill-extrusion的mapbox标准样式,deck.gl其实是不支持的。但他支持GeoJSONLayer7使用extruded:true + getElevation:number的方式设置根据属性拉伸高度。

支持GeoJSONLayer全部属性

拉伸高度设置可以为Function,然后return Number

03

详细技术方案

1.属性字段高亮设置

服务发布前设置建筑footprint要素类的高度字段高亮。该属性才能被写入矢量切片中。

字段视图:设置建筑高度字段高亮

字段高亮设置完毕

2.发布矢量切片服务

采用默认的ArcGIS Online切片方案,将建筑物footprint图层发布矢量切片服务。

发布矢量切片

矢量切片切片方案设置

在REST点击start tile获得切片地址为:

https://dans.geoscene.cn/server/rest/services/Hosted/footprint/VectorTileServer/tile/0/0/0.pbf

改写为通用的:

https://dans.geoscene.cn/server/rest/services/Hosted/footprint/VectorTileServer/tile/{z}/{y}/{x}.pbf

3.deck.gl程序加载MVTLayer

以ArcGIS VectorTileServer为数据源。以示例程序二5为蓝本,改写地址,添加一些属性。

MVTLayer加载ArcGIS VectorTileServer

设置名为footprint的子图层颜色为[218,218,218]。还可以设置成RGBA透明效果,如[218,128,218,128]

设置拉伸生效extruded:true,设置拉伸高度值为矢量切片的属性字段Z_Max的值。

设置最小可见比例13级。用来减少产生无切片的404请求。根据实际数据设置。

设置最大可见比例15级。用来避免出现放大和平移时建筑物消失的现象。根据实际数据情况设置。设置继承自TileLayer的属性extent : [minX, minY, maxX, maxY]。

deck.gl加载矢量切片并根据高度拉伸效果

4.ArcGIS API + deck.gl结合的程序

ArcGIS API for JavaScript + deck.gl加载MVTLayer

效果如下:

设置透明以显示街道注记

设置草图渲染(边缘渲染)

5.意外收获:矢量切片获取属性

在DeckRenderer创建时设置参数getTooltip:info=>{ }

在layer中加入pickable:true

提示信息设置、图层可选取

ArcGIS API 矢量切片获得属性

05

总结

传统的ArcGIS API 场景视图表达三维需要使用建模转mutipatch发布SceneServer的方式 或 二维矢量面FeatureServer拉伸样式的方式。

ArcGIS+deck.gl矢量切片三维化表示建筑白模的技术路线为ArcGIS API场景视图表达三维白模增加了借助VectorTileServer的新的方式。

给ArcGIS 矢量切片增加了前端获得属性和几何的功能。

文内注释链接地址

1 mapbox studio:https://studio.mapbox.com/

2 《ArcGIS API 场景添加 3D Tiles》:https://www.jianshu.com/p/a0b64bdf965e

3 《ArcGIS与deckgl结合的不同模式》:https://www.jianshu.com/p/a8329cbd7f5a

4 示例程序一:https://codepen.io/dansdocker/pen/abqaPqp

5 示例程序二:https://codepen.io/dansdocker/pen/zYRJQOz?editors=001

6 mapbox矢量切片样式标准:https://docs.mapbox.com/mapbox-gl-js/style-spec/

7 GeoJSONLayer:https://deck.gl/docs/api-reference/layers/geojson-layer

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

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

相关文章

Windows下安装FreeSurfer教程

简介 FreeSurfer 是一个开源软件包,用于分析和可视化横断面和纵向研究的结构、功能和扩散神经成像数据。它由Athinoula A. Martinos 生物医学成像中心的计算神经成像实验室开发。 官网 功能 FreeSurfer 为结构 MRI 数据提供完整的处理流,包括&#xf…

RTMP协议

背景介绍 RTMP(Real Time Messaging Protocol) 是由 Adobe 公司基于 Flash Player 播放器对应的音视频 flv 封装格式提出的一种,基于TCP 的数据传输协议。本身具有稳定、兼容性强、高穿透的特点。常被应用于流媒体直播、点播等场景。常用于推…

计算机网络----基本概念

基本概念 在这一章从整体上介绍计算机网络的概况, 为后续的学习搭建起整体的框架; 介绍计算机网络中的基础术语和概念; 什么是因特网 『 因特网 』是一个世界范围内互联了数以亿计的计算设备的计算机网络; 因特网具体构成 因特网互联了数以亿计的计算设备, 这些设备被称为…

CKA认证 | Day4 K8s管理应用生命周期(下)

第四章 K8s管理应用程序生命周期(下) 1、Pod对象 1.1 Pod 的基本概念 Pod 是 Kubernetes 中最基本和最重要的概念之一,是一个逻辑抽象概念,Kubernetes创建和管理的最小单元, 一个Pod由一个容器或多个容器组成。它简…

【微服务】Nacos

一、安装 1、官网地址:https://nacos.io/download/nacos-server/ 2、启动:找到bin目录下的startup.cmd双击启动,或者打开一个命令窗口输入: startup.cmd -m standalone双击启动后如下:可以访问控制台地址 访问后的…

学习笔记032——Spring学习笔记

文章目录 一、Spring开发步骤二、Spring配置文件1、Bean标签基本配置2、Bean标签范围配置3、Bean生命周期配置4、Bean实例化三种方式5、Bean的依赖注入概念6、Bean的依赖注入方式【第一种:set方法注入】【第二种:构造方法注入】 7、Bean的依赖注入的数据…

某科技研发公司培训开发体系设计项目成功案例纪实

某科技研发公司培训开发体系设计项目成功案例纪实 ——建立分层分类的培训体系,加强培训跟踪考核,促进培训成果实现 【客户行业】科技研发行业 【问题类型】培训开发体系 【客户背景】 某智能科技研发公司是一家专注于智能科技、计算机软件技术开发与…

Elasticsearch:Retrievers 介绍

检索器(retrievers)是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减…

Python学习34天

import random class Game: peo0 rob0 # # def __init__(self,peo,rob): # self.peopeo # self.robrob def Play(self): """ 石头剪刀布游戏,0代表石头,1代见到,2代表石头 …

hive的存储格式

1) 四种存储格式 hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储。 Hive支持的存储数据的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET 第一类:纯文本文件存储 textfile: 纯文本文件存储格式…

solr 远程命令执行 (CVE-2019-17558)

目录 漏洞描述 执行漏洞py脚本,取得shell连接 EXP 漏洞描述 Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业…

uname -m(machine) 命令用于显示当前系统的机器硬件架构(Unix Name)

文章目录 关于 arm64 架构检查是否安装了 Rosetta 2其他相关信息解释:命令功能:示例: dgqdgqdeMac-mini / % uname -m arm64您运行的 uname -m 命令显示您的系统架构是 arm64。这意味着您的 Mac Mini 使用的是 Apple 的 M1 或更新的芯片&…

实现在两台宿主机下的docker container 中实现多机器通讯

基于我的实验背景 上位机:ubuntu 20.04 (docker humble 22.04) 下位机:ubuntu 22.04(docker noetic 20.04) 目标:实现在上位机中的docker container 容器的22.04环境去成功远程访问 非同网段的下位机的20.04的contai…

(计算机组成原理)期末复习

第一章 计算机的基本组成:硬件软件(程序)计算机系统 软件有系统软件(系统管理工具),应用软件 计算机硬件:包括主机和外设,主机包括CPU和内存,***CPU由运算器和控制器所组…

QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)

一、可能遇到的一些问题 Q1:如何禁用拖动? 在TableView下加一句代码即可: interactive: false 补充:这个属性并不专属于TableView,而是一个通用属性。很多Controls下的控件都可以使用,其主要作用就是控…

【vue3实现微信小程序】从轮播图到公告栏的前端开发之旅

快速跳转: 我的个人博客主页👉:Reuuse博客 新开专栏👉:Vue3专栏 参考文献👉:uniapp官网 免费图标👉:阿里巴巴矢量图标库 ❀ 感谢支持!☀ 前情提要 &#x…

【大数据学习 | Spark-Core】RDD的缓存(cache and checkpoint)

1. 单应用缓存:cache 1.1 cache算子 cache算子能够缓存中间结果数据到各个executor中,后续的任务如果需要这部分数据就可以直接使用避免大量的重复执行和运算。 rdd 存储级别中默认使用的算子cache算子,cache算子的底层调用的是persist算子…

网络安全风险评估

项目背景 随着信息化技术的快速发展,特别是面向社会、政府机构、企业等业务系统的投入使用,各组织机构对网络和信息系统安全防护都提出了新的要求。为满足安全需求,需对组织机构的网络和信息系统的安全进行一次系统全面的评估,以…

Selenium 自动化测试demo

场景描述: 模拟用户登录页面操作,包括输入用户名、密码、验证码。验证码为算数运算,如下: 使用到的工具和依赖: 1. Selenium:pip install selenium 2. 需要安装浏览器驱动:这里使用的是Edge 3…

架构-微服务架构

文章目录 前言一、系统架构演变1. 单体应用架构2. 垂直应用架构3. 分布式架构4. SOA 架构5. 微服务架构 二. 微服务架构介绍1. 微服务架构的常见问题2. 微服务架构的常见概念3. 微服务架构的常见解决方案4. 解决方案选型 三. Spring Cloud Alibaba介绍1. 主要功能2. 组件 前言 …