SuperMap GIS 三维方向矢量数据处理详解

一、矢量数据来源

矢量数据结构是通过记录空间对象的坐标及空间关系,尽可能精确地表现点、线、多边形等地理实体的空间位置。在矢量数据结构中,点数据可直接用坐标值描述;线数据可用均匀或不均匀间隔的顺序坐标链来描述;面数据可由多个弧段组成的封闭多边形表达。
矢量数据结构是利用欧几里得集合学中的点、线、面极其组合体来表示地理试题空间分布的一种数据组织方式。这种数据组织方式能最好的逼近地理实体的空间分布特征,数据精度高,数据存储的冗余度低,便于进行地理实体的网络分析,但对于多层空间数据的叠加分析比较困难。
矢量数据的来源很多,我这里大致把其来源归为三个分类,分别是: 外部导入,桌面生成和手动制作。

1. 外部导入

外部导入是目前大多数矢量数据所使用的方式,桌面导入矢量数据的功能如下:
【开始选项卡】->【数据处理】->【数据导入】->矢量…

这样看起来可能有点笼统,详情可以看一下矢量数据格式,里面有相关介绍。

2. 桌面生成

桌面生成就是指在SuperMap iDesktop中使用相关功能生成的矢量数据,下面列举几种三维常用的生成矢量数据的功能:

(1) 获取投影面

功能入口: 单击【三维地理设计】->【模型操作】->【截面与投影】->【投影面】,弹出“获取投影面”对话框。
结果: 获取到一个模型投影的二维面数据。
应用: 一般用于白膜数据的拉伸、分层分户数据的制作、前端配合空间查询查询模型信息。

(2) 提取等值面/线

功能入口: 【空间分析选项卡】->【栅格分析】->【表面分析】->【提取所有面/线】。
结果: 一个对应的二维面/线数据集
应用: 通过判读等高面/线来判断地形的种类(山地、盆谷、轮廓、山脊线、山谷线、陡崖)坡度的陡与缓,确定山脉的走向,选择水库大坝的位置、修筑公路线的走向选择、地形剖面图的绘制及工程土方的估计等.

(3) 叠加分析

功能入口: 【空间分析选项卡】->【叠加分析】。
结果: 计算后新的矢量(点、线、面)数据集。
应用: 一般用于需要通过矢量数据间的集合运算,得到相应矢量数据的时候。

(4) 其他功能

例如: 地图裁剪、栅格矢量化、碎多边形合并、模型转换等,这里就不详细介绍了,需要可以在SuperMap iDesktop帮助文档搜索相关功能,里面有详细介绍。

3. 桌面绘制

桌面制作这个使用的比较少,但是操作比较简单,一般用于部分少数矢量数据不对或者缺失用以修改或者增加数据的.
二维矢量数据制作: 新建一个二维矢量数据集或选择一个已有的二维矢量数据集右键添加到地图中,打开可编辑,然后进行绘制即可。
SuperMap GIS 三维方向矢量数据处理详解_第1张图片

三维矢量数据制作: 新建一个三维矢量数据集或选择一个已有的三维矢量数据集右键添加到场景中,打开可编辑,然后进行制作即可。
SuperMap GIS 三维方向矢量数据处理详解_第2张图片

二、矢量数据格式

1. SimpleJson

SimpleJson(.json) 是SuperMap 软件支持的特有数据格式,跟GeoJson 相类似,是一种键值对应的数据类型,支持的几何类型包含点、线、面等类型,SimpleJson里的特征包含几何对象和其属性信息。SimpleJson 数据包含两个文件:(.json) 和 (.meta)。(.meta )文件中存储数据的元数据信息,其中包含该文件的几何类型、投影信息以及所包含的字段信息;(.json)文件中存储数据中成员信息。对于一个单文件的SimpleJson(.json) ,同时包含一个(.json) 和一个 (.meta)。而一个SimpleJson文件夹数据,是一个文件夹对应一个(.meta)文件。在选择文件导入时,程序默认选择的是(.json)文件和文件夹来打开数据。
导入方式:
【开始选项卡】->【数据处理】->【数据导入】
在工作空间管理器中选中需导入到的数据源->单击鼠标右键->导入数据集…。

2. ArcGIS Shapefile

ArcGIS Shapefile(简称 Shp)是 ArcGIS 软件特有的数据格式,用于存储空间数据和属性数据,是常用的一种矢量数据格式。
导入方式:
【开始选项卡】->【数据处理】->【数据导入】。
在工作空间管理器中选中需导入到的数据源->单击鼠标右键->导入数据集。

3. AutoCAD

AutoCAD ,支持导入 AutoCAD 的2种格式,DWG 和 DXF。DXF,Drawing Interchange Format(图形交换格式)的缩写形式,是 Autodesk 公司开发的 AutoCAD 与其他软件格式数据交换的文件格式。这是图形文件的 ASCII 或二进制文件格式,用于向其他应用程序输出图形和从其他应用程序输入图形。DWG 是 AutoCAD 的图形文件,专门用于保存矢量图形的标准文件格式。
导入方式:
【开始选项卡】->【数据处理】->【数据导入】或下拉按钮
在工作空间管理器中选中需导入到的数据源->单击鼠标右键->导入数据集…。

4. 电子表格

电子表格(.csv、.xlsx),CSV(即 Comma Separate Values)是以文本形式记录数据的文件(通常以逗号为分隔符),这种格式经常用来作为不同程序之间的数据交互的格式;xlsx即Microsoft Excel 保存的文件格式。
导入方式:
【开始选项卡】->【数据处理】->【数据导入】。
在工作空间管理器中选中需导入到的数据源->单击鼠标右键->导入数据集。

5. MapInfo

MapInfo数据目前支持其中的 .mif、.wor、.tab 三种类型,其中MIF 格式是 MapInfo 用来对外交换数据的一种中间交换文件;WOR 文件(.wor)是 MapInfo 工作空间文件;TAB 文件(*.tab)是 MapInfo 属性数据的表结构文件,以表的形式存储信息,TAB 文件定义了地图属性数据的表结构。
导入方式:
【开始选项卡】->【数据处理】->【数据导入】。
在工作空间管理器中选中需导入到的数据源->单击鼠标右键->导入数据集。

6. 其他支持的数据类型

其他支持导入SuperMap iDesktop为矢量数据的数据类型有: ArcInfo Export文件(.e00)、)、ArcGIS Personal GeoDatabase 文件(.mdb)、MapGIS 交换格式(*.wat; .wal; .wap; .wan)、、dBASE 文件格式(.dbf)、DGN 文件(.dgn)、VCT 文件(.vct)等。更多支持的数据以及数据介绍可以参考SuperMap iDesktop帮助文档。文档搜索关键字”支持导入的矢量文件格式”,即可查看,如下图:
SuperMap GIS 三维方向矢量数据处理详解_第3张图片

三、如何在三维中加载

1. SuperMap iDesktop场景中加载

需要将矢量数据加载到场景中,需要将矢量数据的坐标系转为投影坐标系或者是地理坐标系。因为平面坐标系的数据只能加载到地图和平面场景中。无法加载到球面场景中进行浏览。更改坐标系后选中需要加载到场景的矢量数据右键添加到场景即可。

2. SuperMap iClient3D for Cesium中加载

一共分为三种方式: 地图服务加载、mvt加载、和三维缓存加载。

(1) 地图服务加载

在桌面将矢量数据添加到地图中,配好地图后,直接保存地图通过SuperMap iServer发布为地图服务或者是将保存的地图右键切成地图瓦片通过SuperMap iServer发布为地图服务。
注:在切地图瓦片的时候,瓦片类型为栅格瓦片的时候剖分方式建议剖分方式选择全球剖分。
发布为地图服务后在前端进行加载,加载代码如下:

//添加SuperMap iServer发布的影像服务
var layer = viewer.imageryLayers.addImageryProvider(new Cesium.SuperMapImageryProvider({
        url : "http://172.16.15.199:8090/iserver/services/map-Population/rest/maps/PopulationDistribution"
}));
(2) mvt方式加载

在桌面将矢量数据添加到地图中,配好地图后,保存地图后右键生成地图矢量瓦片,即切地图瓦片的时候瓦片类型选择矢量瓦片。然后使用切好的矢量瓦片在SuperMap iServer中选择UGCV5(MVT)瓦片发布为矢量瓦片服务。
发布为服务后在前端进行加载,加载代码如下:

var url = "http://www.supermapol.com/realspace/services/map-mvt-JingJinDiQuDiTu/restjsr/v1/vectortile/maps/%E4%BA%AC%E6%B4%A5%E5%9C%B0%E5%8C%BA%E5%9C%B0%E5%9B%BE";

var mvtMap = scene.addVectorTilesMap({
    url: url,
    canvasWidth: 512,
    name: 'testMVT',
    viewer: viewer
});
(3) 三维缓存加载

矢量数据切三维缓存的方式一般为以下两种:

① 面数据拉伸成白膜后缓存

主要用于城市白膜数据和分层分户数据的制作,拉伸方式有两种:1. 【三维数据】-> 【三维瓦片】->【生成缓存】->【面拉伸生成缓存】(推荐),2.【三维地理设计】->【规则建模】->【线型拉伸】拉伸为模型数据集,然后对模型数据集切缓存。切好缓存后在SuperMap iServer 直接通过三维切片缓存的方式去发布为三维服务或者是在桌面新建场景,将上面切好的白膜缓存添加到场景,保存场景,保存工作空间,将保存的工作空建通过SuperMap iServer发布为三维服务然后前端SuperMap iClient3D for Cesium进行加载。
前端加载关键代码如下:

// 方式1: 加载整个场景的数据
var promise = scene.open("http://www.supermapol.com/realspace/services/3D-suofeiya_church/rest/realspace");
// 方式2: 加载单个图层的数据
var buildPromise = scene.addS3MTilesLayerByScp("http://www.supermapol.com/realspace/services/3D-CBD/rest/realspace/datas/Building@CBD/config", {
            name: 'build'
});
Cesium.when.all([buildPromise], function (layers) { 
    ...
})

主要应用场景展示:
分层分户数据制作:https://blog.csdn.net/supermapsupport/article/details/103263569
分层分户使用效果:

示例地址:
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#individualInformation

城市白膜展示:

示例地址:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#wireframe

城市夜景特效:
SuperMap GIS 三维方向矢量数据处理详解_第4张图片

示例地址:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#emissionTexture

② 矢量数据加载到场景配图后切缓存

在桌面将矢量数据添加到场景中,在场景中通过专题图或者是直接设置图层风格之类的操作进行配图,配好图后保存场景,右键场景生成缓存此处需要注意的是如果是场景中存在点数据并且设置了自定义专题图显示图片,生成缓存的时候不能勾选“点外挂模型生成缓存”,使用生成的缓存及工作空间在SuperMap iServer中发布为三维服务。
发布服务后在前端进行加载,加载代码如下:

// 方式1: 加载整个场景的数据
var promise = scene.open("http://www.supermapol.com/realspace/services/3D-suofeiya_church/rest/realspace");
// 方式2: 加载单个图层的数据
var buildPromise = scene.addS3MTilesLayerByScp("http://www.supermapol.com/realspace/services/3D-CBD/rest/realspace/datas/Building@CBD/config", {
            name: 'build'
});
Cesium.when.all([buildPromise], function (layers) { 
    ...
})

四、可能遇到的问题及解决方案

问题一: 加载进桌面的矢量数据右键添加到球面场景是灰的.
问题分析:球面场景只支持将地理坐标系或者是投影坐标系的数据加入到其中,而有的矢量数据导入到桌面默认的坐标系是平面坐标系。
解决方案:合理的使用投影转换和重设坐标系功能将坐标系转为地理或者是投影的坐标系后再添加到场景。
问题二: 场景中对点数据做了自定义专题图,并设置了图片,切缓存后图片不见了
问题分析:点外挂模型是指具有相同材质、形状以及大小但仅空间位置和姿态不同的模型,采用模型只存一份,位置信息采用三维点数据集存储的方式存储多个模型数据集的模型统称,而点自定义专题图外挂的是图片并不是模型,导致外挂不上图片丢失。
解决方案:重新生成场景缓存,并且在对场景生成缓存的时候不要勾选点外挂模型生成缓存。
问题三: 面拉伸白膜生成的缓存前端设置线框模式无效
问题分析:目前的线框模式是需要模型数据本身带有线框才能正常进行设置,而不能给没有带有线框的数据在前端生成一个线框。
解决方案:生成缓存的时候勾选上带线框。

你可能感兴趣的:(SuperMap,3d,javascript)