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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS+deck.gl矢量切片三维化表示建筑白模相关的知识,希望对你有一定的参考价值。

参考技术A deck.gl YYDS!

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

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

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

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

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

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

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

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

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

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

            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其实是不支持的。但他支持 GeoJSONLayer 使用extruded:true + getElevation:number的方式设置根据属性拉伸高度。

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

采用默认的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

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

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

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

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

设置最大可见比例15级。用来避免出现放大和平移时建筑物消失的现象。根据实际数据情况设置。

设置继承自TileLayer的属性extent : [minX, minY, maxX, maxY]。

效果如下:

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

在layer中加入pickable:true

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

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

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

5分钟,ArcGIS 简单几步从天地图中提取出建筑物轮廓的矢量数据


5分钟,ArcGIS

前言:利用 ArcGIS Pro 从天地图中提取时效性好、位置又准确的建筑物轮廓矢量数据。ArcMap 同理。

天地图应用越来越广泛,其中的数据是比较权威的,准确性都比较高。

另外大家的需求也越来越多,想要用好天地图,比如,想要获得某个地区的建筑物轮廓矢量,当然官方是不可能提供下载的,但是我们可以从天地图影像中提取建筑物轮廓矢量,效果还不错。

1.ArcGIS Pro 下载天地图影像

  1. ArcGIS Pro 可以打开自带的天地图-矢量(CGCS2000);

5分钟,ArcGIS

  1. 如果不显示(基本上大家第一次打开都不会显示),这时打开天地图-矢量(CGCS2000)图层的属性,打开自定义参数,右击 tk 列,移除行,只要把这个 tk 列移除就可以了。

5分钟,ArcGIS

  1. 缩放移动内容窗口到项目区,打开共享选项卡,选择导出地图
  • 不要忘了勾选写入坐标文件
  • 颜色深度选择8位深度

5分钟,ArcGIS

Note:如果,如果我使用的栅格数据是从其他地方下载好的呢,本身就是彩色的呢?那也没有关系,添加到 ArcGIS Pro 中再按照8位深度导出即可,如果使用栅格函数中的灰度转换方法也是可行的。

2.栅格二值化

上一步最后导出的图片如下,颜色深度以8位灰度导出就变成了这种黑白灰的图片,建筑物的轮廓一目了然,同时由于勾选上了写入坐标文件,也没有丢失坐标信息。

5分钟,ArcGIS

8位灰度表示2的八次方,即256,表示图像从0开始到255,表示图像的像元取值在这个范围内。

接下来我们需要让0-255的范围取值变成0-2,0表示非建筑物,1表示建筑物,2表示道路,基本上分类三种是极限了,8位灰度图想要再区分更多的地物就非常困难了。

  1. 打开符号系统,在图层右击菜单中找到符号系统并打开;

5分钟,ArcGIS

  1. 符号渲染系统使用分类,方法使用默认的自然间断点分级法,然后类数量选3。手动修改取值范围直到达到满意效果。
    黑色的为非建筑物、白色为建筑物、绿色为道路,如果不单独提取道路的话更加简单。

5分钟,ArcGIS

  1. 设置标注名称,按0表示非建筑物,1表示建筑物,2表示道路来设置名称。

5分钟,ArcGIS

  1. 渲染器导出。
    在设置好分类间隔和标注名称后,右击栅格图层并导出,在导出栅格界面中勾选使用渲染器。勾选后,导出的栅格数据就是在符号系统中分类好了的。

5分钟,ArcGIS

3.矢量化

栅格在勾选渲染器后导出结果如下,细心的朋友会发现,“建筑物都没有了”。

实际上是因为新添加的栅格数据的默认渲染方式都是拉伸,建筑物只是没有在这个软件中呈现出来,数据本身是正确的。

5分钟,ArcGIS

  1. 栅格转矢量。工具箱中找到栅格转面,将栅格数据转为面矢量

5分钟,ArcGIS

  1. 数据处理。构建的矢量面如下,打开属性表,其中默认创建的gridcode 字段存储了之前设置的标注名称,即:0表示非建筑物,1表示建筑物,2表示道路来设置名称;
  • 可使用按属性选择功能选取出需要的建筑物轮;
  • 根据面积排序,栅格掉细碎图斑,毕竟碎斑和一个建筑物要素的面积差异挺大的。

5分钟,ArcGIS

最后获得结果

5分钟,ArcGIS

4.轮廓优化

放大看单栋建筑物轮廓的矢量,有非常多的折点,歪歪扭扭,锯齿一样,这显然不符合建筑物轮廓的特征,不管是现实地物或者是矢量化的要求。

这需要优化,使用规则化建筑物覆盖区工具即可,英文名称:RegularizeBuildingFootprint。

5分钟,ArcGIS

左:优化前;右:优化后

下面是提取的建筑物矢量图斑。

5分钟,ArcGIS

ArcMap 提取的​​操作教程​​,他是使用了 ArcScan 来完成的,不过好像 ArcGIS Pro 没有 ArcScan,可以参考参考。

最后,存在的问题

还有一个说大不大,说小也不小的问题,天地图的矢量影像如何下载?

尽管文章演示了使用 ArcGIS Pro 来下载天地图,但这种方式下载的范围有限,想要下载大范围的、较高级别清晰度的影像就不可行了。

我听说水经注和 Bigemap 这些可以下载,我没有试过,我一直是使用的 QGIS 下载,稍后会有详细教程,心急的朋友可以网上搜一搜。

以上是关于ArcGIS+deck.gl矢量切片三维化表示建筑白模的主要内容,如果未能解决你的问题,请参考以下文章

arcgis上怎样将cad图二维化,然后三维?

ArcGIS Pro风暴ArcGIS Pro 2.5基于矢量数据制作拉伸三维地图案例

ArcGIS Pro风暴ArcGIS Pro 2.5基于矢量数据制作拉伸三维地图案例

Supermap关于分层单体化的操作过程说明

ArcGIS 切片与矢量图图层顺序问题

5分钟,ArcGIS 简单几步从天地图中提取出建筑物轮廓的矢量数据