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

来源:互联网 发布:js上传图片本地预览 编辑:程序博客网 时间:2024/06/05 15:11
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;
}
0 0
原创粉丝点击