非常感謝UP主GIS小呲花和超圖的技術工程師,在SuperMap系列軟體這塊給了全部的方案,
我的客戶有19w條地名地址資料需要在Cesium前端展示,經過測驗如果用傳統的添加Label根本是不可行的,在這塊天地圖的三維標注方案是最好的解決方案,因為客戶用的是超圖平臺,于是咨詢超圖的工程師最終得到了答案,下面將解決步驟記錄如下,便于大家使用參考,
技術路線
使用SuperMap IDesktop切三維快取,使用SuperMap IServer發布服務,使用SuperMap IClient加載
操作步驟
1. IDesktop切三維快取
注意的是三維場景和資料的坐標必須一致,不然會閃退,還有軟體也要是最新的,技術支持給的版本請在下面鏈接下載
鏈接:https://pan.baidu.com/s/12L_xUwi6ZSx6JTj6VsiWzw
提取碼:tdp6
(1)構建三維資料集,二維資料集有不貼地的問題

(2)將三維資料集添加至新球面場景

(3)然后制作標簽專題圖


(4)保存場景,生成快取



2. IServer發布服務
如果發布了不能預覽,請將第三步的iClient包復制到iServer下
(1) 將檔案拷貝至服務器




(2)問題記錄,名字里不要出現#,將其重命名


3. IClient加載
一定要下載之后的版本
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>三維標注</title>
<link href="/SuperMapCesium/Widgets/widgets.css" rel="stylesheet">
<!-- <script src="http://support.supermap.com.cn:8090/webgl/Build/Cesium/Cesium.js"></script> -->
<script src="/SuperMapCesium/Cesium.js"></script>
<style>
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer">
</div>
<div style="position: absolute;top:10px;left:10px;z-index: 1000;">
<div id="add" style="background:#fff;cursor:pointer;">添加</div>
<div id="remove" style="background:#fff;cursor:pointer;">移除</div>
</div>
<script>
const viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider: new Cesium.ArcGisMapServerImageryProvider({ url: "https://elevation3d.arcgis.com/arcgis/rest/services/World_Imagery/MapServer" }),
terrainProvider: new Cesium.CesiumTerrainProvider({
url: 'https://data.marsgis.cn/terrain',
isSct: false,
}),
})
viewer.scene.globe.depthTestAgainstTerrain = true
const name = "base"
const add = (name) => {
const promise = viewer.scene.addS3MTilesLayerByScp("/iserver/services/3D-local3DCache-POIshanice/rest/realspace/datas/POI_shan@ice/config", { name });
promise.then((layer) => {
viewer.zoomTo(layer)
})
}
add(name);
document.getElementById("add").onclick = () => {
add(name);
}
document.getElementById("remove").onclick = () => {
viewer.scene.layers.remove(name, true)
}
</script>
</body>
</html>


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390607.html
標籤:其他
上一篇:JAVA中級面試題
下一篇:RabbitMQ——安裝
