SuperMap如何实现测量距离(学习笔记)

SuperMap如何实现测量距离(学习笔记)

1.首先创建好标记图层和矢量图层,还有画线的控件

  var rangingLayer, polygonLayer, drawLine;

  //新建面标记图层
  rangingLayer = new SuperMap.Layer.Markers("Markers", { displayInLayerSwitcher: false });
  //新建面矢量图层
  polygonLayer = new SuperMap.Layer.Vector("polygonLayer");
  //创建画线控制,图层是lineLayer;这里DrawFeature(图层,类型,属性);multi:true在将要素放入图层之前是否现将其放入几何图层中
  drawLine = new SuperMap.Control.DrawFeature(polygonLayer, SuperMap.Handler.Path, { multi: true });
  drawLine.events.on({ "featureadded": drawCompletedLine });
     function Ranging() {
        clearLayer();
        //map上添加控件
         map.addControl(drawLine);
         //激活控件
         drawLine.activate();
      }

2. 调用函数

  function drawCompletedLine(drawGeometryArgs) {
            //停止画面控制
            drawLine.deactivate();
            //获得图层几何对象
            //console.log(drawGeometryArgs);
            var geometry = drawGeometryArgs.feature.geometry,
                    measureParam = new SuperMap.REST.MeasureParameters(geometry), /* MeasureParameters:量算参数类。 客户端要量算的地物间的距离或某个区域的面积*/
                    myMeasuerService = new SuperMap.REST.MeasureService(url); //量算服务类,该类负责将量算参数传递到服务端,并获取服务端返回的量算结果

            count = drawGeometryArgs.feature.geometry.components[0];
            for (var i = 0; i < drawGeometryArgs.feature.geometry.components[0].components.length; i++) {
                var x = count.components[i].x;//获取当前几何的界限上下左右除以2得到x轴,y同理
                var y = count.components[i].y;
                var size = new SuperMap.Size(25, 20),
                offset = new SuperMap.Pixel(-(size.w / 2), -size.h),
                icon = new SuperMap.Icon("/SuperMap/theme/images/marker.png", size, offset);
                marker = new SuperMap.Marker(new SuperMap.LonLat(x, y), icon);

                var centerPoint1 = new SuperMap.Geometry.Point(x, y);
                var circleVector1 = new SuperMap.Feature.Vector(centerPoint1);
                if (i == 0) {
                    circleVector1.style = {
                        strokeColor: "#CAFF70",
                        fillColor: "#DC143C",
                        strokeWidth: 2,
                        fillOpacity: 0,
                        label: "起点",
                        fontColor: "#000"
                    };
                }
                polygonLayer.addFeatures([circleVector1]);
                rangingLayer.addMarker(marker);

            }
            map.addLayers([rangingLayer, polygonLayer]);
            myMeasuerService.events.on({ "processCompleted": measureCompletedLine });

            //对MeasureService类型进行判断和赋值,当判断出是LineString时设置MeasureMode.DISTANCE,否则是MeasureMode.AREA

            myMeasuerService.measureMode = SuperMap.REST.MeasureMode.DISTANCE;

            myMeasuerService.processAsync(measureParam); //processAsync负责将客户端的量算参数传递到服务端。
        }

3.测量结束调用该事件

 function measureCompletedLine(measureEventArgs) {
            //console.log(measureEventArgs);
            var distance = measureEventArgs.result.distance;
            var unit = measureEventArgs.result.unit;
            var span = document.getElementById("result");
            span.innerHTML = parseInt(distance) + "米";
            $("#measure").attr('style', 'display:block');
            //layer.alert(span);
            for (var i = 0; i < count.components.length; i++) {
                if (i + 1 == count.components.length) {
                    o = 0;
                    DS = 0;
                }
                else {
                    var x = count.components[i].x;//获取当前几何的界限上下左右除以2得到x轴,y同理
                    var y = count.components[i].y;
                    var points = [new SuperMap.Geometry.Point(x, y),
                     new SuperMap.Geometry.Point(count.components[i + 1].x, count.components[i + 1].y)],
                      roadLine = new SuperMap.Geometry.LineString(points);
                    var measureParam = new SuperMap.REST.MeasureParameters(roadLine), /* MeasureParameters:量算参数类。 客户端要量算的地物间的距离或某个区域的面积*/
                     myMeasuerService = new SuperMap.REST.MeasureService(url); //量算服务类,该类负责将量算参数传递到服务端,并获取服务端返回的量算结果
                    myMeasuerService.events.on({ "processCompleted": measureCompletedLine1 });

                    //对MeasureService类型进行判断和赋值,当判断出是LineString时设置MeasureMode.DISTANCE,否则是MeasureMode.AREA

                    myMeasuerService.measureMode = SuperMap.REST.MeasureMode.DISTANCE;

                    myMeasuerService.processAsync(measureParam); //processAsync负责将客户端的量算参数传递到服务端。
                }
            }
        }
        var o = 0;
        var DS = 0;
        function measureCompletedLine1(measureEventArgs) {
            //console.log(measureEventArgs);
            o++;
            var distance = measureEventArgs.result.distance;
            DS += distance;
            var unit = measureEventArgs.result.unit;
            var x = count.components[o].x;//获取当前几何的界限上下左右除以2得到x轴,y同理
            var y = count.components[o].y;
            var centerPoint1 = new SuperMap.Geometry.Point(x, y);
            var circleVector1 = new SuperMap.Feature.Vector(centerPoint1);

            circleVector1.style = {
                strokeColor: "#CAFF70",
                fillColor: "#DC143C",
                strokeWidth: 15,
                fillOpacity: 0,
                label: "距离" + parseInt(DS) + "米",
                fontColor: "#FF3300",
                fontWidth: 20,
            };
            polygonLayer.addFeatures([circleVector1]);
        }

4.清除图层

 function clearLayer() {
            polygonLayer.removeAllFeatures();
            rangingLayer.clearMarkers();
            $("#measure").attr('style', 'display:none');
        }

5.代码运行效果图
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值