arcgis api for js实现距离测量和面积测量(完整版本)

一、距离测量和面积测量是GIS必备的功能效果图如下:


二、量算函数(核心)

                //量算函数
                function mapClick(evt) {
                    if(disFun){
                        inputPoints.push(evt.mapPoint);
                        var  textSymbol;
                        if(inputPoints.length ===1){
                            textSymbol = new TextSymbol("起点",startFont,new Color([204,102,51]));
                            textSymbol.setOffset(0,-20);
                            map.graphics.add(new Graphic(evt.mapPoint,textSymbol));
                        }
                        map.graphics.add(new Graphic(evt.mapPoint,makerSymbol));
                        if(inputPoints.length >=2){
                            //    设置距离测量的参数
                            var  lengthParams = new LengthsParameters();
                            lengthParams.distanceUnit = GeometryService.UNIT_METER;
                            lengthParams.calculationType = "preserveShape";
                            var p1 = inputPoints[inputPoints.length-2];
                            var p2 = inputPoints[inputPoints.length-1];
                            if(p1.x ===p2.x &&p1.y===p2.y){
                                return;
                            }
                            //    z在两点之间划线将两点链接起来
                            var polyline = new Polyline(map.spatialReference);
                            polyline.addPath([p1,p2]);
                            lengthParams.polylines=[polyline];
                            // 根据参数,动态的计算长度
                            geometryService.lengths(lengthParams,function(distance){
                                var _distance = number.format(distance.lengths[0]/1000);
                                totleDistance+=parseFloat(_distance);//计算总长度
                                var beetwentDistances = _distance+"千米";
                                var tdistance = new TextSymbol(beetwentDistances,startFont,new Color([204,102,51]));
                                tdistance.setOffset(40,-3);
                                map.graphics.add(new Graphic(p2,tdistance));
                                if(totalGraphic){
                                    map.graphics.remove(totalGraphic);
                                }
                                var total=number.format(totleDistance,{
                                    pattern:"#.000"
                                });
                                //    设置总长度的显示样式,并添加到地图上
                                var totalSymbol=new TextSymbol("总长度:"+total+"千米",startFont,new Color([204,102,51]));
                                totalSymbol.setOffset(40,-15);
                                totalGraphic= map.graphics.add(new Graphic(p2,totalSymbol));
                            });
                        }
                    }
                }

三、注册事件

  //给按钮添加绑定事件
                $(".functionWrap").click(function () {
                    var value=$(this).attr("name")
                    switch (value) {
                        case "平移":
                            navToolbar.activate(Navigation.PAN);
                            break;
                        case "拉框缩小":
                            navToolbar.activate(Navigation.ZOOM_OUT);
                            break;
                        case "拉框放大":
                            navToolbar.activate(Navigation.ZOOM_IN);
                            break;
                        case "全图":
                            map.centerAndZoom(([110, 38.5]), 5);
                            break;
                        case "距离测量":
                            distanceMeasure();
                            break;
                        case "面积测量":
                            areaMeasure();
                            break;
                        case "清除标记":
                            clearAction();
                            break;
                    }
                });

四、添加图形函数

 // 添加图形函数
                function addToMap(evt) {
                    if(disFun||areaFun){
                        var geometry = evt.geometry;//绘制图形的geometry
                        //将绘制的图形添加到地图上去
                        var symbol = null;
                        switch (geometry.type){
                            case "point":
                                symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,10,
                                    new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),1),
                                    new Color([0,255,0,0.25]));
                                break;
                            case "polyline":
                                symbol  = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
                                    new Color([255,0,0,0.8]),2);
                                break;
                            case "polygon":
                                symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
                                    new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),2),
                                    new Color([255,255,0,0.25]));
                                break;
                            case "extent":
                                symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
                                    new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),2),
                                    new Color([255,255,0,0.25]));
                                break;
                        }
                        map.graphics.add(new Graphic(geometry,symbol));
                        if(disFun){
                            inputPoints.splice(0,inputPoints.length);//删除数组中的所有元素
                            totleDistance =0.0;
                            totalGraphic = null;
                        }
                        else if(areaFun){
                            //设置面积和长度的参数
                            var areasAndLengthsParameters =new AreasAndLengthsParameters();
                            areasAndLengthsParameters.lengthUnit = GeometryService.UNIT_METER;//设置距离单位
                            areasAndLengthsParameters.areaUnit = GeometryService.UNIT_SQUARE_KILOMETERS;//设置面积单位
                            geometryService.simplify([geometry],function (simplifiedGeometries) {
                                areasAndLengthsParameters.polygons = simplifiedGeometries;
                                geometryService.areasAndLengths(areasAndLengthsParameters,function (result) {
                                    var font =new Font("16px",Font.STYLE_NORMAL,Font.VARIANT_NORMAL,Font.WEIGHT_BOLDER);
                                    var areaResult = new TextSymbol(number.format(result.areas[0],{
                                        pattern:'#.000'
                                    })+"平方公里",font,new Color([204,102,51]));
                                    var spoint = new Point(geometry.getExtent().getCenter().x,geometry.getExtent().getCenter().y,map.spatialReference);
                                    map.graphics.add(new Graphic(spoint,areaResult));//在地图上显示测量的面积
                                });
                            });
                        }
                    }
                }

五、点击下载完整代码

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ArcGIS API for JavaScript是一个强大的JavaScript库,可用于创建动态和交互式地图应用程序。它提供了丰富的功能和工具,使开发者能够绘制各种地图元素。 使用ArcGIS API for JavaScript绘制地图非常简单。首先,你需要准备一个HTML页面,并引入API的库文件。然后,你可以创建一个地图对象,指定要显示的地图范围和初始缩放级别。 在地图上绘制点、线、面等要素非常容易。你可以使用API提供的图形类,如Point、Polyline和Polygon来创建要素对象。当你创建完要素对象后,只需将其添加到地图显示的图层中即可。 除了绘制基本要素,API还提供了丰富的绘图工具,如绘制圆、矩形、箭头等。你可以使用这些工具在地图上绘制复杂的形状。 此外,ArcGIS API for JavaScript还支持绘制标注、文本和图像等。你可以在地图上添加标签或图片来展示特定的信息。 绘制功能不仅限于地图要素,还可应用于其他地图操作,如测量距离面积等。API提供了测量工具来帮助你快速计算地图上的距离面积。 最后,ArcGIS API for JavaScript还支持与其他库和服务的集成。你可以将绘制的地图元素与数据库、GIS服务等进行交互,并在应用程序中展示或分析这些数据。 总而言之,ArcGIS API for JavaScript是一个功能强大的工具,可以帮助你绘制各种地图要素和操作。无论是简单的点线面,还是复杂的测量和分析,API都提供了丰富的功能和工具供你使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值