早在2018年的时候,就遇到一个需求,实现矢量和倾斜摄影的叠加,但是当时采取的土办法,手动给矢量一个z值,然后通过手动去调整z值,实现矢量和倾斜摄影的叠加,如果是在倾斜摄影比较平整的区域,这个叠加还能接受,但是对于倾斜摄影起伏较多的区域,就束手无策了,所以其实这个问题一直没有个好的解决办法。
前不久arcgis js api4.15发布,解决了这个,可以实现矢量和倾斜摄影的完美叠加,参考:https://developers.arcgis.com/javascript/latest/sample-code/layers-integratedmeshlayer/index.html。可以看看效果
本篇博客就是在离线状态下实现整个过程:
(1)高程地形服务发布
(2)倾斜摄影模型及要素服务发布
(3)通过arcgis js api去调用,前端实现叠加
一、高程地形服务发布
在线环境中,可以调用自带的地形服务,实现起伏的效果,但是离线环境需要自己去发布相应的高程地形服务,不然是没有三维效果的,可以参考
https://blog.csdn.net/u012599377/article/details/105527909
二、倾斜摄影服务及二维要素服务发布
倾斜摄影模型发布服务,必须要求有ArcGIS Enterprise环境,即Portal+Server+Datastore+Web adaptor
1. 二维要素服务发布
可以直接通过portal上传shp的zip压缩包,实现二维要素服务的发布
2. 倾斜摄影模型发布
(1)如果是osgb格式,通过ArcGIS Pro自带的osgb转slpk工具转换成slpk,之后通过portal上传发布,Pro2.5中支持地方坐标系,也支持2000坐标系
(2)如果是cc等模型处理软件,也可以直接导出为slpk,通过portal上传发布
三、arcgis js api 调用
核心就是将要素服务的elevationInfo属性设置为on-the-ground模式,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>倾斜摄影叠加要素服务</title>
<style>
html, body, #viewDiv{
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://xxx/4.15/esri/themes/light/main.css">
<script src = "https://xxx/4.15/dojo/dojo.js"></script>
<script>
require([
"esri/Map",
"esri/views/SceneView",
"esri/WebScene",
"esri/layers/IntegratedMeshLayer",
"esri/layers/FeatureLayer",
], function(Map, SceneView, WebScene, IntegratedMeshLayer, FeatureLayer){
var mesh = new IntegratedMeshLayer({
url: "倾斜摄影模型服务地址"
});
var featurelayer = new FeatureLayer({
url: "要素服务地址"
});
featurelayer.elevationInfo = {
mode: "on-the-ground"
}
var map = new Map({
basemap: "topo-vector",
ground: "world-elevation" //可以设置为自己的地形服务
});
var view = new SceneView({
container: "viewDiv",
map: map,
camera: {
x: 106.984,
y: 29.07,
z: 5000,
spatialReference: {
wkid: 4326
},
},
});
map.add(mesh);
map.add(featurelayer);
})
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
四、贴合效果
类似于将倾斜摄影当成地势贴合,效果如下:
左上角是跨域问题,因为只是个测试,就没去管,跨域参考: https://developers.arcgis.com/javascript/latest/guide/proxies/index.html
【附录】
欢迎大家关注我的收费课程《ArcGIS Pro 2.6和ArcGIS Enterprise学习》,共8小时,有理论有实操:https://edu.csdn.net/course/detail/31690
课程主要包含:
- ArcGIS Pro2.6学习
①GIS中的数据
②GIS中的坐标系
③企业级地理数据库(SDE)设置
④数据编辑及拓扑检查
⑤简单制图
⑥空间分析
2.ArcGIS Enterprise学习
①环境部署
②二三维服务发布(矢量切片、要素服务、地图切片、地形服务、三维服务等)
③使用及运维(详细介绍如何确定enterprise部署架构,简单介绍相应的运维工具)
3.开发体系梳理