45 将gp服务的结果(栅格)展示到前端,以克里金插值为例

在arcmap中运行gp工具--克里金插值,输入数据为点图层,输出图层为栅格,想在前端调用该工具,并展示结果图层的图例

注:本篇只讲思路,故gp服务发布时用的都是固定的值,在实际的生产环境中需要用【用户自定义】,详见https://blog.csdn.net/weixin_44616652/article/details/90638977

发布gp过程略,在server中需要注意一点,需要勾选如图所示的功能

在前端代码中,调用getResultMapImageLayer和Legend即可。

效果图:

 

代码如下:

<!DOCTYPE html>
<html>

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

        #sidebar {
            position: absolute;
            top: 0;
            right: 0;
            height: 85%;
            width: 320px;
            overflow-y: auto;
        }

        .label {
            color: white;
        }

        #hotspotButton {
            border: none;
            background-color: rgba(229, 89, 52, 0.75);
            color: #fff;
            margin: 1px;
            width: 50%;
            padding: 10px;
            overflow: auto;
            text-align: center;
            cursor: pointer;
            font-size: 1em;
        }
    </style>

    <link rel="stylesheet" href="https://js.arcgisonline.cn/4.12/esri/themes/dark/main.css" />
    <script src="https://js.arcgisonline.cn/4.12/init.js"></script>

    <script>
        require([
            "esri/Map",
            "esri/views/MapView",
            "esri/tasks/Geoprocessor",
            "esri/widgets/Legend",
            "esri/layers/support/ImageParameters",
            "esri/layers/MapImageLayer",
        ], function (Map, MapView, Geoprocessor, Legend, ImageParameters, MapImageLayer) {
            document
                .getElementById("hotspotButton")
                .addEventListener("click", findHotspot);
            var message = document.getElementById("message");
            basemapurl = "https://aj.enterprise.cn/serverwa/rest/services/meiguodian/MapServer";
            var map = new Map();
            var view = new MapView({
                container: "viewDiv",
                map: map
            });
            var basemapLayer = new MapImageLayer(basemapurl);
            map.add(basemapLayer);
            var gpUrl2 = "https://aj.enterprise.cn/serverwa/rest/services/Kriging/GPServer/Kriging";
            var gp = new Geoprocessor(gpUrl2);
            gp.outSpatialReference = {
                wkid: 4326
            };

            function findHotspot() {
                var params = {
                    "Input point features": "meiguodian",
                    "Z value field": "OBJECTID",
                    "Semivariogram properties": "Spherical 0.047825",
                    "Output cell size": "4.78252480000001E-02",
                    "Search radius": "VARIABLE 12"
                }
                gp.submitJob(params).then(drawResultData, errBack, progTest);
            }

            function drawResultData(result) {
                var resultLayer = gp.getResultMapImageLayer(result.jobId);
                var ResultData = gp.getResultData(result.jobId, "hotSpotsResultLayer ");
                resultLayer.opacity = 1;
                map.add(resultLayer);
                resultLayer.on("layerview-create", function () {
                    message.innerText = "Job status: 'job-succeeded'";
                    var legend = new Legend({
                        view: view,
                        container: "legendDiv"
                    });
                });
            }

            function progTest(value) {
                message.innerText = "Job status: " + "'" + value.jobStatus + "'";
                console.log(value.jobStatus);
            }

            function errBack(error) {
                message.innerText = "";
                console.log("gp error: ", error);
            }
        });
    </script>
</head>

<body>
    <div id="viewDiv">
        <div id="sidebar" class="esri-widget">
            <div id="text">
                <div id="info">
                    <div align="center">
                        <br />
                        <button id="hotspotButton" class="esri-widget">
                            Analyze 911 Calls
                        </button>
                    </div>
                    <div style="padding-bottom:20px; padding-left:10px;">
                        <br /><br />
                        <label id="message" class="label"></label>
                    </div>
                    <div id="legendDiv" class="esri-widget"></div>
                </div>
            </div>
        </div>
    </div>
</body>

</html>

  

posted @ 2019-09-27 16:29  天然呆嘛  阅读(517)  评论(0编辑  收藏  举报