【问题原因】提供的 GeoJSON 数据中包含多个重复的地物,measureService无法正确处理
【解决办法】先计算geojson中的单个feature 最后再合并计算总面积即可,代码可参考:
// 转换成geojson数据后添加到地图
var geojsonLayer = L.geoJSON(JSON.parse(json), { color: "red" }).addTo(map);
// 计算单个feature的面积
function calculateFeatureArea(feature, callback) {
var measureParam = new L.supermap.MeasureParameters(L.geoJSON(feature));
new L.supermap.MeasureService(url)
.measureArea(measureParam)
.then(function (serviceResult) {
callback(serviceResult.result.area);
});
}
// 计算总的feature的面积
var features = JSON.parse(json).features;
var totalArea = 0;
var completedRequests = 0;
features.forEach(function (feature, index) {
calculateFeatureArea(feature, function (area) {
totalArea += area;
completedRequests++;
if (completedRequests === features.length) {
// 展示
widgets.alert.showAlert(
"总面积: " + totalArea.toFixed(2) + " 米",
true
);
}
});
});