ArcGIS前端修改编辑倾斜摄影模型

一、方法介绍

之前的博客介绍了如何在Pro中编辑倾斜摄影模型,参考博文:

ArcGIS Pro 2.7编辑倾斜摄影模型

在JS版本4.16版本之后,其实也支持在前端对发布的Scene Layer服务进行在线的编辑。通过 IntegratedMeshLayer 的modifications属性进行控制。
在这里插入图片描述
在这里插入图片描述

官网示例为交互式绘制GraphicLayer进行剪裁、掩膜及压平操作,具体可以参考官网DEMO示例:

https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-IntegratedMeshLayer.html#modifications

二、根据发布的要素服务编辑模型

这里从一个Feature Layer要素服务读取面要素信息:

var polygonLayerUrl ='https://xxx.com/arcgisserver/rest/services/Hosted/polygon1/FeatureServer/0'; 
                    var queryTask = new QueryTask({
                        url: polygonLayerUrl,
                    });

然后通过 IntegratedMeshLayer属性修改modification属性,增加clip编辑效果:

queryTask.execute(query).then(function (results) {
                        const geometry = results.features[0].geometry;
                        console.log(geometry);

                        const modificaiton = new SceneModification({
                            geometry,
                            type: 'clip',
                        });
                        const modificaitons = new SceneModifications([modificaiton]);

                        debugger;
                        const sr1 = new SpatialReference({ wkid: 4326 });
                        const meshLayer = new IntegratedMeshLayer({
                            url: 'https://xxx.com/arcgisserver/rest/services/Hosted/Scenetest_WSL1/SceneServer',
                            spatialReference: sr1
                        });

                        meshLayer.modifications = modificaitons;
                        map.add(meshLayer);
                    });

具体效果:
(这里使用的模型数据和面数据都是WGS1984坐标系)
在这里插入图片描述
完整示例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
        <title>Sameple</title>
        <style>
            html,
            body,
            #viewDiv {
                padding: 0;
                margin: 0;
                height: 100%;
                width: 100%;
            }
        </style>

        <link rel="stylesheet" href="https://js.arcgis.com/4.18/esri/themes/light/main.css" />
        <script src="https://js.arcgis.com/4.18/"></script>

        <script>
            require([
                'esri/tasks/QueryTask',
                'esri/tasks/support/Query',
                'esri/layers/IntegratedMeshLayer',
                'esri/Map',
                'esri/views/SceneView',
                'esri/layers/SceneLayer',
                'esri/config',
                'esri/layers/support/SceneModifications',
                'esri/layers/support/SceneModification',
                'esri/geometry/Polygon',
                'esri/geometry/SpatialReference',
            ], function (
                QueryTask,
                Query,
                IntegratedMeshLayer,
                Map,
                SceneView,
                SceneLayer,
                esriConfig,
                SceneModifications,
                SceneModification,
                Polygon,
                SpatialReference,
            ) {

                esriConfig.portalUrl = 'https://xxx.com/arcgisportal/';
                // Create Map
                var map = new Map({
                    ground: 'world-elevation'
                });

                // Create the SceneView
                var view = new SceneView({
                    container: 'viewDiv',
                    map: map,
                    camera: {
                        position: [106.9289321, 29.7183102, 800],
                        tilt: 81,
                        heading: 50,
                    },
                });

                view.when(function () {
                    var polygonLayerUrl =
                        ' https://xxx.com/arcgisserver/rest/services/Hosted/polygon1/FeatureServer/0';
                    var queryTask = new QueryTask({
                        url: polygonLayerUrl,
                    });

                    var query = new Query();
                    query.returnGeometry = true;
                    query.outFields = ['*'];
                    query.where = 'OBJECTID= 1';

                    queryTask.execute(query).then(function (results) {
                        const geometry = results.features[0].geometry;
                        console.log(geometry);

                        const modificaiton = new SceneModification({
                            geometry,
                            type: 'clip',
                        });
                        const modificaitons = new SceneModifications([modificaiton]);

                        debugger;
                        const sr1 = new SpatialReference({ wkid: 4326 });
                        const meshLayer = new IntegratedMeshLayer({
                            url: 'https://xxx.com/arcgisserver/rest/services/Hosted/Scenetest_WSL1/SceneServer',
                            spatialReference: sr1
                        });

                        meshLayer.modifications = modificaitons;
                        map.add(meshLayer);
                    });
                });

            });
        </script>
    </head>

    <body>
        <div id="viewDiv"></div>
    </body>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙同学的一个笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值