面积和距离量算

0 投票
myMeasuerService.events.on({ "processCompleted": measureCompleted });,总是无法触发此事件
3月 22, 2017 分类:  882次浏览 | 用户: windDawn 初出茅庐 (58 分)

1个回答

0 投票
你好,请问你是没有进这个方法里面,还是返回的没有结果呢?

看一下网络请求是否有什么报错呢?

请问你是在地图上绘制的面还是你用点构成线线成面的?如果是用点去构成的面的话,你的点坐标要和你的地图坐标系一样,
3月 22, 2017 用户: 郑雅琳 名扬四海 (1,600 分)
修改于 3月 22, 2017 用户:郑雅琳
//线量算距离
    lineDistance = new SuperMap.Control.DrawFeature(lineDistanceLayer, SuperMap.Handler.Path, { multi: true });
    lineDistance.events.on({ "featureadded": drawLineDistanceCompleted });

    //面量算距离
    areaDistance = new SuperMap.Control.DrawFeature(areaDistanceLayer, SuperMap.Handler.Polygon, { multi: true });
    areaDistance.events.on({ "featureadded": drawLineDistanceCompleted });

//距离量算完成事件
function drawLineDistanceCompleted(eventArgsLineDistance) {
    lineDistance.deactivate();
    var geometry = eventArgsLineDistance.feature.geometry,
    measureParam = new SuperMap.REST.MeasureParameters(geometry), /* MeasureParameters:量算参数类。 客户端要量算的地物间的距离或某个区域的面积*/
    myMeasuerService = new SuperMap.REST.MeasureService(csm.serverUrl); //量算服务类,该类负责将量算参数传递到服务端,并获取服务端返回的量算结果
    myMeasuerService.events.on({ "processCompleted": measureCompleted });
    //对MeasureService类型进行判断和赋值,当判断出是LineString时设置MeasureMode.DISTANCE,否则是MeasureMode.AREA
    if (geometry.CLASS_NAME.indexOf("LineString") > -1) {
        myMeasuerService.measureMode = SuperMap.REST.MeasureMode.DISTANCE;
    } else {
        myMeasuerService.measureMode = SuperMap.REST.MeasureMode.AREA;
    }
    myMeasuerService.processAsync(measureParam); //processAsync负责将客户端的量算参数传递到服务端。

}

function measureCompleted(measureEventArgs) {
    var distance = measureEventArgs.result.distance;
    var area = measureEventArgs.result.area;
    var unit = measureEventArgs.result.unit;
    if (distance != -1) {
        distance = Math.round(distance * 100) / 100;
        alert("量算结果" + distance + "米");
    } else if (area != -1) {
        area = Math.round(area * 100) / 100;
        alert("量算结果" + area + "平方米");
    }
}
请问是直接无法进入measureCompleted这个方法吗?如果是直接没有进入的话,你可以在监听事件的地方多写一个processFailed事件,然后在这个事件的回调事件里面输出查看一下报错信息,例如function processFailed(e) {alert(e.error.errorMsg);}

F12看一下控制台有没有什么报错,或者网络请求有没有什么报错,

我这边测试了你的代码是没有问题的。
没有报错,processFailed直接弹出资源不存在
请你检查一下你的MeasureService里面写的url是否正确,如果url填写错误是会报这样的错误的
这个功能需不需要在iServer上开启什么服务
就地图服务就可以了
...