var polygonSet = [];//等值線轉面后的要素集
for(i=0; i<featureSet.length; i++){//featureSet為等值線要素集
//繪制等值線
var graphic = new Graphic(featureSet[i].geometry, symbol, featureSet[i].attributes);
graphicLayer.add(graphic);
//標注等值線的值
var path = featureSet[i].geometry.paths[0]; //等值線拐點
var startPoint = new Point(path[0],new SpatialReference({ wkid:2363 }));//取第一個拐點坐標創建Point
var textSymbol = new TextSymbol(
number.format(featureSet[i].attributes.CONTOUR),
new Font("12px",Font.STYLE_NORMAL,Font.VARIANT_NORMAL, Font.WEIGHT_NORMAL, "Arial"),
new Color([0,2,59])
);
textSymbol.setOffset(11,-5);
textSymbol.setAlign(TextSymbol.ALIGN_START);
var textGraphic = new Graphic(startPoint, textSymbol); //創建標注的要素
map.graphics.add(textGraphic); //將線要素轉為面要素,計算面積
if(path.length >= 3){//將線要素轉為面要素
var polygonJson={};
polygonJson.rings = featureSet[i].geometry.paths;
(polygonJson.rings[0])[path.length] = path[0];
(polygonJson.rings[0]).reverse();//將坐標串順序反轉
polygonJson.spatialReference = featureSet[i].geometry.spatialReference;
var polygon = new Polygon(polygonJson);
//計算面積
var geo = webMercatorUtils.webMercatorToGeographic(polygon); //Converts geometry from Web Mercator units to geographic units.
var Area = geodesicUtils.geodesicAreas([geo], esri.Units.SQUARE_METERS);//Determine the area for the input polygons
var area=parseFloat(Area[0]);
var polygonFeat={}; //面要素對象
//將線要素屬性賦給面要素
polygonFeat.attributes=featureSet[i].attributes;
polygonFeat.geometry=polygon;
polygonFeat.attributes.F_AREA = area;
polygonSet.push(polygonFeat);
}
}
最近在做一個功能,將等值線轉成面並計算面積,再轉的過程中發現面積總是為負的,因為之前多次使用該計算方法,並未出現問題,因此很糾結。。。。
參考一個帖子,具體地址找不到了,有一個截圖:

因為的面要素不是直接從地圖服務里讀取出來的,是通過轉換方式獲取的,因此個人認為有可能是坐標串順序的問題,就把坐標串順序進行了反轉,bingo,OK了!!!
總結,計算面積出現負值可能是因為坐標串順序的問題,可以嘗試該方法;
polygonJson.rings[0]).reverse();//將坐標串順序反轉