SuperMap GIS基础产品三维GIS FAQ集锦(4)

SuperMap GIS基础产品三维GIS FAQ集锦(4)

【WebGL】三维场景加载iServer发布的高斯坐标系的REST地图服务无效果,怎么办?

【解决办法】cesium不支持高斯投影的坐标系,建议转为墨卡托投影。

【WebGL】前端在添加完S3MTilesLayer后,能否根据点的经纬度,查询出该点的模型高度?

【解决办法】可以通过viewer.scene.sampleHeight()传入模型的经纬度计算高度,例如:

let  height =  viewer.scene.sampleHeight(
    new Cesium.Cartographic(
      Cesium.Math.toRadians(longitude),//转换成弧度
      Cesium.Math.toRadians(latitude),//弧度
    )
)

【WebGL】使用scene.addVectorTilesMap加载矢量瓦片后,如何获取mvt矢量瓦片样式?

【解决办法】获取瓦片风格需要在瓦片加载完成成后才能获取,通过过以下代码,在cesium.when()的回调函数中获得

var layerReadyPromise = mvtLayer.readyPromise;
            Cesium.when(layerReadyPromise, function (data) {console.log(mvtMap.mapboxStyle);}

【WebGL】如何计算几何面的中心点?

【解决办法】使用:var pCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;

【WebGL】官网引用的Echarts版本是多少?根据示例,在yAxis中设置min属性不起作用,如何解决?

【解决办法】官网示例所用的echarts版本是4.0.4,通过console.log(echarts.version)获取查看。根据echarts官方API显示,只设置了min,没有max,max不设置时会自动计算最大值保证坐标轴刻度的均匀分布,所以需要再设置max值即可。

【WebGL】在iserver中预览时,或者webgl中通过scene.open打开场景时,标签专题图有避让遮盖聚合的效果。如何才能完整的显示标签呢?

【问题原因】iserver预览内置的webgl默认设置了避让,通过前端是可以调整的。通过scene.open打开场景,默认也是开启了避让。

【解决办法】需要通过设置layer.isOverlapDisplayed =true,设为true时,重叠的部分依然显示,即不参与避让。

【WebGL】怎么查询一个点1公里范围内的其余点?

【解决办法】有以下三种方法:
1、空间查询,构建geometry的圆进行查询。
2、使用距离查询,“queryParams”:[{…}]”为查询数据集的参数集合,通过name 指定的是查询的目标图层的名称。
3、使用缓冲区分析

【WebGL】初始化cesiumcontainer的时候偶发性就会报错,加载官网的示例也会报错,怎么回事?使用的是AMD显卡。

【解决办法】参考博客进行三维显示配置:https://blog.csdn.net/supermapsupport/article/details/128440798
建议换成英伟达独立显卡。

【WebGL】对地形进行坡度分析后,想要获取某个点的坡度值该如何实现?

【解决方案】WebGL无法直接获取到坡度分析的结果,建议使用桌面进行坡度分析,得到坡度分析的结果,然后发布为数据服务,通过该数据服务去获取某个坐标点的栅格值,该栅格值即为该点的坡度值。

【WebGL】如何让Mvt地图不可选中?

【解决办法】属性:selectEnabled。将地图是否可选中属性设置为false。示例代码:

mvtMap.selectEnabled= false

【WebGL】为什么设置地形图层隐藏viewer.terrainProvider.visible = false没有效果?

【问题原因】设置地形图层显隐,需要开启参数:invisibility

【解决办法】在加载地形的时候,设置参数:invisibility:true,之后即可通过visible参数控制显隐。示例代码:

terrainProvider : new Cesium.CesiumTerrainProvider({
    url : URL_CONFIG.SiChuan_TERRAIN,
    isSct : true,//地形服务源自SuperMap iServer发布时需设置isSct为true
    invisibility:true  //是否开启设置地形显隐的功能,默认为false。
}),

【WebGL】如何实现服务的权限管理?

【解决办法】1、在SuperMap iServer服务管理页面中将服务设置权限,改为指定用户可访问
2、在SuperMap iServer用户中心中申请token密钥
3、在iClient for Cesium中设置token密钥,实现加载服务,详情请参考文章:https://blog.csdn.net/supermapsupport/article/details/121210572

【WebGL】哪些图层可以设置多子域,多子域该如何配置?

【解决办法】1、地形、影像、MVT、S3M图层都可以设置多子域
2、利用nginx客户端,映射不同的端口地址来对iServer进行访问,搭建子域环境,提升性能,多子域的配置请参考文章:http://support.supermap.com.cn:8090/webgl/examples/TopicDOC/subdomains.html。

【WebGL】被修饰成单栋楼的倾斜摄影,该如何处理?

【问题原因】被修饰过的倾斜摄影,它的贴图会比较碎,并且会存在4096*4096及以上的大纹理,按常规方法做倾斜入库会导致文件大,加载慢

【解决办法】建议导入为模型数据集,再适当的优化纹理大小,对模型数据集生成缓存,详情请参考文章:
https://blog.csdn.net/supermapsupport/article/details/130404872

【WebGL】三维水面图层,如何更改水流速度和方向?

【解决办法】可以通过S3MTilesLayer类中的waterSpeed参数来更改,传入一个二维的量,用数值的大小表示速度大小,用其x,y的正负来表示水流的方向。示例代码:WaterLayer.waterSpeed = new Cesium.Cartesian2(-2,2)

【WebGL】三维水面图层,是否可以在前端修改水面颜色与波纹强度?

【解决办法】可以,通过S3MTilesLayer类中的waterColor 参数来更改水面颜色;waterWaveScale 来修改波纹大小

【WebGL】如何实现相机绕自身旋转,顺时针观察四周?

【解决办法】有两个方法,
1、使用camera.flyCircle(center)方法,传入的坐标为相机当前的位置坐标;
2、使用setInterval()循环方法,规定每间隔多少时间,修改相机的roll参数使其旋转

【WebGL】如何获取BIM模型的所有id?

【解决办法】使用datasetInfo()方法获取图层的startid和endid。拿到id范围后自己构造整个id数组。范例代码:

layer.datasetInfo().then(function(result){
	console.log(result)
}

【WebGL】如何将模型设置为线框模式?

【解决办法】1、将图层的填充风格设置为”填充与轮廓“:layer.style3D.fillStyle = Cesium.FillStyle.Fill_And_WireFrame;
2、设置线框模式:Cesium.WireFrameType.EffectOutline;
线框模式分为特效边框线、四边形边框模式、三角形边框模式、草图边框模式

【WebGL】激光点云模型在iDesktop中通过分层设色设置了颜色,发布后颜色丢失了?

【问题原因】由于渲染机制不同,无法保存桌面的分层设色效果

【解决办法】使用前端代码,对激光点云缓存设置颜色,详细范例请参考:
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#S3MTiles_pointCloud

【WebGL】绘制一个面同时倾斜摄影和地形开挖,报错“height is not defined”?

【解决办法】地形开挖接口有height深度参数,决定地形向下开挖深度,s3m图层没有height参数,而是将整个绘制区域进行开挖,所以对s3m图层开挖时,不能填写height参数

【WebGL】如何实现管线流动效果?

【解决办法】有两种方式:1、使用尾迹线材质,2、制作数据时贴上带箭头的图片,前端设置纹理流动。详细步骤请参考文章:
https://blog.csdn.net/supermapsupport/article/details/102775780

【WebGL】MVT地图,鼠标选中高亮对象后,需要手动点击其它空白区域释放,是否有接口可以释放选中状态?

【解决办法】有的,在VectorTilesMap类中有releaseSelection()释放选择集方法

【WebGL】目前有几种方式可以实现物体的轨迹移动动画?

【解决办法】有3种。
1、动态图层(适用于拥有多个实例、多个对象沿不同路径移动,例如城市交通网络的情况下)。
2、kml节点动画(适用于单个模型对象沿指定路径移动,由于节点坐标和时间都以文件方式记录,修改不方便)。
3、SampledPositionProperty类(适用于单个模型对象沿指定路径移动,方便修改时间、节点坐标、运行速度)

【iDesktop】倾斜摄影数据入库之后只显示一小部分数据怎么办?

【问题原因】倾斜摄影数据的tile文件夹中有除了osgb文件之外的其他后缀的数据

【解决办法】将倾斜摄影数据的tile文件夹中除osgbosgb文件之外的其他后缀的数据删除,然后再生成配置文件与倾斜入库

【iDesktop】三维面生成缓存后,在场景中缩放移动视角时,面会闪烁

【问题原因】存在重叠面,移动与缩放场景视角时就会有闪面的情况

【解决办法】在场景属性中开启场景的深度优化即可

【iDesktop】为什么iDesktop的三维地理设计功能卡没有显示出来

【解决办法】需要在iDesktop中打开场景;如果还是没有的话,该功能模块被隐藏了,可以在环境设计里面开启功能模块

【WebGL】可以直接加载shp与geojson格式的数据在场景中使用吗?

【解决办法】加载GeoJSON数据可以使用Cesium原生接口GeoJsonDataSource,具体使用方法可以参考api文档http://support.supermap.com.cn:8090/webgl/web/apis/3dwebgl.html ,搜索GeoJsonDataSource即可。shp文件的话不能直接加载,但是可以使用使用开源工具如:GDAL等将其转换为GeoJSON数据进行加载。

【WebGL】可以动态修改通视分析中观察点的位置吗?

【解决办法】可以在前端动态修改sightline.viewPosition即可实现

【WebGL】在距离较远的情况下管线图层只显示线,不显示模型是为什么?

【问题原因】lod影响了,在远处显示的是粗糙层

【解决办法】设置图层lod,layer.lodRangeScale = 100

【WebGL】添加geojson的线数据铺满全球

【问题原因】geojson里面的线数据节点坐标是投影坐标系下的

【解决办法】将数据换成经纬度坐标即可

【WebGL】添加相机定位之后图层不加载了是为什么?

【问题原因】相机定位代码书写错误,导致后续代码未执行

【解决办法】正确的相机定位代码:

scene.camera.setView({
    destination: new Cesium.Cartesian3.fromDegrees(116.4566, 39.9149, 5323.445971240632),
    orientation: {
        heading: 3.1612,
        pitch: -1.5188,
        roll: 6.283185307179563
    }
})

【WebGL】如何设置相机可以进入地下?

【解决办法】

viewer.scene.undergroundMode = true; //设置开启地下场景
viewer.scene.screenSpaceCameraController.minimumZoomDistance = -1000; //设置相机最小缩放距离,距离地表-1000米

【WebGL】vue项目中使用handler监听之后会变得很卡是为什么?

【问题原因】handler以及viewer等属性定义在data里面会被vue劫持造成卡顿

【解决办法】不要将handler以及viewer等属性定义在data里面,拿到外部即可

【WebGL】球体加上一个自定义的背景图片

【解决办法】SingleTileImageryProvider只支持经纬度,全球范围覆盖的话图片的宽高比保持为2:1,若设置了rectangle,可按照rectangle来设置图片的宽高比,避免图片拉伸,影响显示效果。代码如下:

viewer.imageryLayers.addImageryProvider(new Cesium.SingleTileImageryProvider({
    url : './images/worldimage.jpg'
}));

【WebGL】高亮设置被图层设置覆盖了,如何设置不被模型遮挡?

【解决办法】可以将选中对象模式设置为不会被遮挡的轮廓线模型,选择选取对象的显示风格,代码如下:

layer.selectColorType = Cesium.SelectColorType.ALWAYS_SHOW_SILHOUETTE;
layer.selectedColor = Cesium.Color.DEEPSKYBLUE;

具体效果如图:

在这里插入图片描述

【WebGL】广告牌被地球挡住了怎么办?

【解决办法】
1.可以设置disableDepthTestDistance值来解决

viewer.entities.add({
	id: "test",
	position: Cesium.Cartesian3.fromDegrees(longitude, latitude,height),
	billboard: {
		image: './images/xxxxxx.jpg',
		disableDepthTestDistance:Number.POSITIVE_INFINITY//返回正无穷大
	}
});

2.设置viewer.scene.globe.depthTestAgainstTerrain=false取消深度测试

【WebGL】修改球体上默认的影像图片

【解决方法】在for Cesium包下将文件夹(SuperMap iClient3D 11i (2022) SP1 for Cesium_CH\Build\Cesium\Assets\Textures\NaturalEarthII)路径下的图片替换为自己想要的影像即可。

【WebGL】初始化球踢的canvas或者img标签和div一块显示的时候中间会有几像素的缝隙

【解决方法】给canvas/img标签添加display:block

【WebGL】在加载天地图的时候出现了同一个项目win能加载 mac上访问加载不出天地图, 请求是返回了图片的

【解决方法】注释掉viewer.scene.terrainProvider.isCreateSkirt = false; 即可正常显示

【WebGL】本地部署的WebGL查看某些示例的时候地球渲染不出来只有星空,但官网示例可以正常渲染

【解决方法】影像图层没有加载出来,注释掉影像部分加载代码,或者更换本地能正常访问加载的地图影像.

【WebGL】在iClient for Cesium中相机定位方法setView与flyTo的区别是什么?

【解决办法】在iClient for Cesium中setView的可以直接定位到指定的空间位置,而flyTo则是从当前视角飞行至新的空间位置。

【WebGL】在iClient for Cesium中相机定位方法flyTo如何调整飞行的时长?

【解决办法】在iClient for Cesium中可以通过调整flyTo中duration的参数控制飞行的时间长度。

【WebGL】在iClient for Cesium中相机定位方法flyTo如何飞行至某矩形范围框范围内?

【解决办法】在iClient for Cesium中可以通过Cesium.Rectangle.fromDegrees(west, south, east, north)的方法设置指定矩形范围框。在定位时使用该范围即可实现定位。使用方法如下

viewer.camera.flyTo({
	destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});

【WebGL】在iClient for Cesium中加载带Bin的GLTF模型时出现浏览器下载Bin的情况应该如何解决?

【解决办法】在iClient for Cesium中加载GLTF模型出现浏览器下载Bin的情况时,主要由于GLTF版本过新导致,需要通过第三方插件转换GLTF模型。
可以使用Blender软件,将gltf导入在导出为gltf2.0的单文件格式后进行加载。

【WebGL】如何在iClient for Cesium中通过loadjson方法加载geojson数据?

【解决办法】在iClient for Cesium中通过load方法加载json数据,是读取了json中的feature在通过entity进行绘制。使用方法可以参考下面代码

Cesium.loadJson('./data/json/test.json').then(function(jsonData) {
    for (let i = 0; i < jsonData.features.length; i++) {
        let pts = [];
        var ifeature = jsonData.features[i];
        var datapoints = ifeature.geometry.coordinates;
        for (let j = 0; j < datapoints.length; j++) {
            var longitude = datapoints[j][0];
            var latitude = datapoints[j][1];
            pts.push(longitude, latitude)
        }
        var cc = viewer.entities.add({
            id: i,
            polyline: {
                positions: Cesium.Cartesian3.fromDegreesArray(pts),
                width: 10,
                material: new Cesium.PolylineOutlineMaterialProperty({
                    color: Cesium.Color.ORANGE,
                    outlineWidth: 2,
                    outlineColor: Cesium.Color.BLACK,
                }),
            }
        });
    }
});

【WebGL】在iClient for Cesium中如何修改椭球体参数?

【解决办法】在iClient for Cesium中默认使用的是圆球初始化场景的,如需修改为椭球体,则可以在初始化球体前修改椭球体。实现代码参考下面代码

var obj = [6378137.0, 6378137.0, 6356752.3142451793];
Cesium.Ellipsoid.WGS84 = Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));
var viewer = new Cesium.Viewer('cesiumContainer');

【WebGL】在iClient for Cesium中如何修改矢量瓦片中标签的高度?

【解决办法】在iClient for Cesium中修改矢量瓦片标签的高度,可以使用style3D的方法对其bottomAltitude进行设置。该方法仅对标签生效,对线、面图层不生效。

var style3D = new Cesium.Style3D();
//设置底部高程。
style3D.bottomAltitude = 10;
//获取底部高程值。
var altitude = style3D.bottomAltitude;

【WebGL】在使用iClient for Cesium 11i 中加载模型后,如果出现地上视角看到地下模型应该如何解决?

【解决办法】在iClient for Cesium 11i版本中,默认关闭了场景的深度检测,在加载模型时,可能会出现地下模型跑到地上的情况。开启深度检测即可解决。
viewer.scene.globe.depthTestAgainstTerrain = true

【WebGL】在使用iClient for Cesium中通过pickPosition()方法点击,出现拾取坐标不准的情况该如何解决?

【解决办法】在iClient for Cesium 中,viewer.scene.pickPosition()拾取对应位置的Cartesian3,适用于模型表面位置的选取,拾取三维物体的坐标等。但在拾取时一定要开启深度检测(viewer.scene.globe.depthTestAgainstTerrain = true),否则会出现拾取坐标不准的情况。

【WebGL】开发系统,在现实时间晚上打开就全黑了,如何变成把白天正常?

【问题原因】数据本身是没有变的,而是预览加载的场景随着系统时间会变化。

【解决办法】
在前端加载时可以使用代码设置固定场景时间:

// 改变时间设置光照效果
var utc=Cesium.JulianDate.fromDate(new Date("2021/07/04 04:00:00"));
//北京时间=UTC+8=GMT+8
viewer.clockViewModel.currentTime = Cesium.JulianDate.addHours(utc,8,new Cesium.JulianDate());
this.viewer.scene.light = new Cesium.DirectionalLight({ //去除时间原因影响模型颜色
    direction: new Cesium.Cartesian3(0.35492591601301104, -0.8909182691839401, -0.2833588392420772)
})

【WebGL】是否可以加载4528投影坐标系的mvt瓦片?

【问题原因】WebGL球面场景是地理坐标系球,只能加载地理坐标系数据或者3857全球墨卡托投影坐标系。

【解决办法】1.使用平面场景进行加载4528投影坐标系或任意投影坐标系均可;
2.将原始数据投影转换成地理坐标系(如4326)后,再进行前片给前端使用。

【WebGL】如何更换地球的底图?

【解决办法】加载一个图片影像图层,Cesium.SingleTileImageryProvider

【WebGL】文本文件的点云去和在WebGL前端加载使用。

【解决办法】使用iDesktop或iDesktopX的三维数据-生成点云缓存功能,将点云数据生成缓存,对缓存发布三维服务工前端WebGL使用。

【WebGL】用viewer.scene.open()将一个场景打开两次,只有一次生效一套图层,希望产生多套图层怎么办?

【问题原因】如果是同一份数据scene.open是没有办法打开多个的,不同的数据scene.oepn可以打开多个。

【解决办法】同一份数据您如果想要打开多个,建议使用scene.addS3MTilesLayerByScp,需要注意同一份数据想要加载多个的话,add时要给不同的图层名称。
http://support.supermap.com.cn:8090/webgl/docs/Documentation/Scene.html

【WebGL】区域面数据集边框,如何实现类似类似 earthsdk 的自定义图元-动态轮廓效果?

【解决办法】使用自发光纹理或纹理流动或泛光(可加定时器配合)等多种方法调整实现你想要的具体效果,实现路线很多:
https://blog.csdn.net/THEDEAMON/article/details/112967860
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#scanLine
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#airlinesTrailLines
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#emissionTexture
http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#tx_lightSource
建议比较简单的实现方式就是直接使用线框线数据而不是面数据,直接做线数据的特效(比如泛光、自发光)

【WebGL】如何使非贴地的动态线数据贴地加载?

【解决办法】思路:
new一个DataSource,把entity加到DataSource里的,把DataSource加到viewr.datasources.add()时,给贴地属性clampToGround : true。
http://support.supermap.com.cn:8090/webgl/docs/Documentation/Viewer.html
http://support.supermap.com.cn:8090/webgl/docs/Documentation/DataSourceCollection.html
http://support.supermap.com.cn:8090/webgl/docs/Documentation/DataSource.html
贴地:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#KML_route

【WebGL】为什么三维管线只有放大到非常近的时候才会显示管道,其他情况都是矢量线。

【问题原因】造成这个情况有两种原因:
1.是LOD层级造成的, 设置layer.lodRangeScale =100
2.线为0的绝对高度导致的,可以在前端关闭深度检测, viewer.scene.globe.depthTestAgainstTerrain = true; 以及设置贴地

【WebGL】三维面数据在场景中,有地形的情况下,拉近后不显示面。如果不加地形就会一直显示面,不知道是什么原因?(在桌面打开是正常的)

【解决方法】三维面生成三维缓存时,选择的是S3M3.0格式的缓存,该缓存默认为椭球加载,修改为2.0之后可以正常加载

【WebGL】球面场景中通过S3MTilesLabelStyle加载的标签专题图的标签,在拉近之后会陷入地面之下,如何设置可以让它一直在前端正常显示?

【解决方法】这个接口下有一个heightReference方法,通过设置不同的高度模式,比如贴模型。同时关闭深度检测

【WebGL】用ellipse这个属性画圆,可以设置圆的外边框线宽度么?

【解决方法】ellipse的outlinewidth在原生Cesium中属性设置也是无效的。
目前entity的多边形设置outlineWidth属性也是没有效果的。
建议使用polygon以实体线去代替边线实现轮廓效果。

【WebGL】地形隐藏接口viewer.terrainProvider.visible = false;不生效

【解决方法】地形显隐,需要在地形添加的时候设置invisibility:true。
也可以使用地形替换的方法去隐藏地形:https://www.jianshu.com/p/42b2457fa0b7

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SuperMap GIS 10i是一种新一代的三维GIS技术。该白皮书详细介绍了SuperMap GIS 10i的特点和优势,以及其在实际应用中的价值。 首先,SuperMap GIS 10i具有强大的三维可视化能力。它可以以真实的地理坐标为基础,将地理数据三维的方式呈现出来。用户可以通过旋转、缩放和倾斜等操作,实现对地图的多角度观察,更加直观地了解地理信息。 其次,SuperMap GIS 10i支持全球范围内的三维数据展示和分析。它可以处理大规模的地理数据,包括DEM(Digital Elevation Model)、地形、建筑物、水流等等。这使得用户能够在不同的地理环境下进行精确的三维分析和决策。 此外,SuperMap GIS 10i还具有强大的三维分析功能。它提供了一系列的三维分析工具,如可视域分析、路径分析和遮挡分析等,用于帮助用户更好地理解和解决实际问题。例如,在城市规划中,可以利用SuperMap GIS 10i进行建筑物的分析和评估,提供合理的规划建议。 最后,SuperMap GIS 10i支持多平台的开发和部署。它可以在不同的操作系统上运行,并能够与其他GIS软件无缝集成。这为用户在不同的环境下开展工作提供了方便,并且可以更好地与其他GIS系统进行数据交换和共享。 综上所述,SuperMap GIS 10i作为一种新一代的三维GIS技术,通过其强大的可视化、数据处理和分析功能,为用户提供了更加先进和全面的三维GIS解决方案。它具有广泛的应用景,可以广泛应用于城市规划、资源管理、环境保护等领域,并为用户在空间数据分析和决策支持方面带来更多的价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值