利用geometry测面积,但是得到的结果与真实值相差很大。
api例子上的做法是:
function getAreaAndLength(geometry) {
map.graphics.clear();
console.log(geometry)
var graphic = map.graphics.add(new esri.Graphic(geometry, new esri.symbol.SimpleFillSymbol()));
var areasAndLengthParams = new esri.tasks.AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_FOOT;
areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_ACRES;
geometryService.simplify([geometry], function(simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
geometryService.areasAndLengths(areasAndLengthParams);
});
}
但是,这样所得到的结果是不正确的。
因为我们常用的是地理坐标系,即:SpatialReference({wkid: 4326}的地图。
所取得的geometry也是这个坐标系的。但是,地理服务是按照投影坐标系(即:
SpatialReference({wkid: 102113} 之类)来计算的。
解决:在进行利用geometry服务来计算时,先进行坐标转换。具体做法如下:
var areasAndLengthParams = new esri.tasks.AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_KILOMETERS;
this.outSR = new esri.SpatialReference({ wkid: 102113});
this.geometryService.project([geometry],this.outSR,function(geometry){
var m=me;
me.geometryService.simplify(geometry, function(simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
m.geometryService.areasAndLengths(areasAndLengthParams);
});
});
网上对于arcgis在javascript方面的应用的信息,确实不是很多。所以希望这个可以帮到大家。