您的位置:首页 > Web前端 > JavaScript

gis api for js 框选区域取面积 以及 取重叠区域面积

2016-07-08 11:23 846 查看
function queryBySpatial(querySign, qrylyrname, outFields, queryTaskErrorHandler, isUseBuffer, distance) {

    var TotalArea = 0;//总面积

    var graphic_fw; //选择的区域

    var intersecthic = map.extent; //选择的区域与同一组元素交集的区域

    clearQueryInfos();

    queryTask = new esri.tasks.QueryTask(getQueryUrl(qrylyrname));

    queryTask.on("complete", function (queryResult) {

        var features = queryResult.featureSet.features;

        rExtent = null;

        dojo.forEach(features, function (feature) {

            intersecthic = graphic_fw.getExtent().intersects(feature.geometry.getExtent());//取交叉的extent

            var selectionPolygon = esri.geometry.Polygon.fromExtent(intersecthic);//将交叉的extent转换成polygon

                

            //拿到交叉区域-计算交叉的面积

            try {

                var areaParams = new esri.tasks.AreasAndLengthsParameters();

                areaParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;

                areaParams.areaUnit = esri.tasks.GeometryService.UNIT_SQ_METERS;

                geometrySvc.simplify([selectionPolygon], function (simplifiedGeometries) {

                    areaParams.polygons = simplifiedGeometries;

                    geometrySvc.areasAndLengths(areaParams, function(result1) {

                        alert(result1.areas[0] + "sss");

                    }, function(err) {

                        alert(err);

                    }

                    );

                }, function(err1) {

                    alert(err1);

                });

                ////////////////////////////////////

                

            } catch(e) {

                alert(e.name + ": " + e.message);

            }

            //、、、、、、、、、、、、、、、、、、、、、、、、

        });

        alert(TotalArea);

        MyLoading(false);

        map.setExtent(rExtent);

    });

    queryTask.on("error", queryTaskErrorHandler);

    //测量面积

    if (tempArea == 1) {

       

        macHandler = dojo.connect(geometrySvc, "onAreasAndLengthsComplete", function (result) {

            TotalArea = result.areas[0];

            //alert(TotalArea);

            clearEvents();

        });

        maDrawCompletedHandler = dojo.connect(drawToolbar, "onDrawEnd", function (geometry) {

            graphic = measureGraphicLyr.add(new esri.Graphic(geometry, new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 2), new
dojo.Color([255, 255, 0, 0.25]))));

            var areaParams = new esri.tasks.AreasAndLengthsParameters();

            areaParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;

            areaParams.areaUnit = esri.tasks.GeometryService.UNIT_SQ_METERS;

            geometrySvc.simplify([geometry], function (simplifiedGeometries) {

                areaParams.polygons = simplifiedGeometries;

                geometrySvc.areasAndLengths(areaParams);

            });

        });

    }

    drawToolbar.activate(esri.toolbars.Draw.POLYGON);

    tempArea++;

    /////////////

    

    queryDrawCompletedHandler = dojo.connect(drawToolbar, "onDrawEnd", function (geometry) {

        //closeqPopup();

        clearQueryGraphics();

        if (!isUseBuffer) {

            graphic_fw = geometry;//拿到选择的范围

            var spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;

            var symbol = getSymbol(geometry.type);

            var graphic = new esri.Graphic(geometry, symbol);

            addGraphic(queryGraphicLyr, graphic);//空间查询绘制完成后不绘制框选范围

            var query = buildQueryGraphicParameters(graphic, spatialRelationship, outFields);

            MyLoading(true);

            queryTask.execute(query);

            return;

        } else {

            var params = buildBufferParameters(distance, geometry);

            geometrySvc.buffer(params, bufferSuc);

        }

    });

    drawToolbar.deactivate();

    switch (querySign) {

        case "dx": //点选

            drawToolbar.activate(esri.toolbars.Draw.POINT);

            break;

        case "jxx": //矩形选

            drawToolbar.activate(esri.toolbars.Draw.RECTANGLE);

            break;

        case "yxx": //圆形选

            drawToolbar.activate(esri.toolbars.Draw.CIRCLE);

            break;

        case "dbxx": //多边形选

            drawToolbar.activate(esri.toolbars.Draw.POLYGON);

            break;

        default:

            break;

    }

    return true;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: