通过arcgis js api 4.9实现调用buffer的gp服务

1.构建模型

2.发布服务,将执行模式设置为同步

3.arcgis js前端调用gp服务

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
    <title>gp_buffer</title>

    <link rel="stylesheet" href="http://localhost:8080/arcgis_js_api/library/4.9/esri/css/main.css">
    <script src="http://localhost:8080/arcgis_js_api/library/4.9/init.js"></script>
    <style>
        html,
        body,
        #viewDiv {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
    <script>
        require([
            "esri/Map",
            "esri/views/MapView",
            "esri/layers/GraphicsLayer",
            "esri/geometry/Point",
            "esri/Graphic",
            "esri/tasks/Geoprocessor",
            "esri/tasks/support/FeatureSet",
            "esri/tasks/support/LinearUnit",
            "esri/geometry/SpatialReference",
            "esri/geometry/geometryEngine"
        ], function(
            Map, MapView,GraphicsLayer,Point, Graphic,Geoprocessor, FeatureSet,LinearUnit,SpatialReference,geometryEngine
        ) {
            var gpUrl=
                "http://localhost:6080/arcgis/rest/services/Buffer/GPServer/Buffer";

            const map = new Map({
                basemap: "topo"
            });

            const view = new MapView({
                container: "viewDiv",
                map: map,
                zoom: 6,
                spatialReference:{ wkid: 3857},
                center:[0,0]
            });
            //创建矢量图层并加入到地图上
            var graphicsLayer = new GraphicsLayer();
            map.add(graphicsLayer);
            //设置点样式
            var markerSymbol = {
                type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
                color: [255, 0, 0],
                outline: { // autocasts as new SimpleLineSymbol()
                    color: [255, 255, 255],
                    width: 1
                }
            };
            //设置面(缓冲区)样式
            var fillSymbol = {
                type: "simple-fill", // autocasts as new SimpleFillSymbol()
                color: [1, 2, 224, 0.75],
                outline: { // autocasts as new SimpleLineSymbol()
                    color: [255, 255, 159],
                    width: 1
                }
            };
            //创建爱你gp服务矢量并设置输出的坐标参考
            var gp=new Geoprocessor({
                url:gpUrl
            });
            gp.outSpatialReference = { // autocasts as new SpatialReference()
                wkid: 3857
            };

            //将buffer回调函数注册到单击视图事件上
            view.on("click",buffer);

            function buffer(event){
                var point=event.mapPoint;
                //构建矢量数据源,包含几何和样式
                var inputGraphic = new Graphic({
                    geometry: point,
                    symbol: markerSymbol
                });
                //将矢量数据源添加到矢量图层中
                graphicsLayer.add(inputGraphic);

                var inputGraphicContainer = [];
                inputGraphicContainer.push(inputGraphic);
                //创建要素集实例,它的features位graphic数组
                var featureSet = new FeatureSet();
                featureSet.features = inputGraphicContainer;
                var bufferDistance = new LinearUnit();
                bufferDistance.distance = 150000;
                bufferDistance.units = "meters";
                //参数名input、dis要与gp服务的参数名保持一致,否则无效
                var params = {
                    input : featureSet,
                    dis:bufferDistance
                };
                //同步执行地理处理任务,返回位Promise<Object>类型
                gp.execute(params).then(result);
            }


            function result(data) {
                console.log(data);
                //data.results[0].value即返回结果为feature-record-set-layer类型对应的是js中的FeatureSet类型
                var resultFeatures=data.results[0].value.features;
                // 对每个矢量图形进行符号化
                var bufferGraphics = resultFeatures.map(function(feature) {
                    feature.symbol = fillSymbol;
                    return feature;
                });
                //将结果加到graphicsLayer图层中
               graphicsLayer.addMany(bufferGraphics);
            }
        })
    </script>
<body>
<div id="viewDiv"></div>
</body>
</html>

4.结果

发布了48 篇原创文章 · 获赞 24 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/xlp789/article/details/86538470