测面积类似于测距离,只是测面积需要传入的参数对象是面对象
上代码:
// 面积
function getArea() {
//绑定事件
sgworld.Window.SetInputMode(1); //鼠标样式修改
sgworld.AttachEvent("OnLButtonDown", StartDrawPolygon1);
sgworld.AttachEvent("OnFrame", DrawPolygonOnFrame);
sgworld.AttachEvent("OnRButtonUp", StopArea)
}
function StartDrawPolygon1(flags, x, y) {
//flags:虚拟键按下的标记;x、y为屏幕坐标
var CursorCoord = sgworld.Window.pixelToWorld(x, y);
var pos = CursorCoord.Position
var lineColor = sgworld.Creator.CreateColor(255, 100, 0, 125); //定义线渲染样式
var pWorldPointInfo = sgworld.Window.PixelToWorld(x, y, -1); //将屏幕坐标转换为地理坐标
if (null == pWorldPointInfo) {
return false;
}
var pos = pWorldPointInfo.Position;
if (polygon == null) {
var geometry = sgworld.Creator.GeometryCreator.CreateLineStringGeometry([pos.X, pos.Y, 0, pos.X, pos.Y, 0]);
polygon = sgworld.Creator.CreatePolyline(geometry, lineColor, 2, "", "线");
polygon.Terrain.GroundObject = true;
polygon.Geometry.StartEdit(); //开始编辑线
} else {
if (polygon.ObjectType == 1) {
var x = polygon.Geometry.Points.Item(0).X;
var y = polygon.Geometry.Points.Item(0).Y;
// polygon.Geometry.EndEdit()
// alert(polygon.ID + " id")
sgworld.Creator.DeleteObject(polygon.ID)
var geometry = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry(
[x, y, 0,
pos.X, pos.Y, 0,
pos.X, pos.Y, 0,
]);
// alert(22)
polygon = sgworld.Creator.CreatePolygon(geometry);
//alert(polygon.Geometry.Points)
polygon.Terrain.GroundObject = true;
polygon.Geometry.StartEdit(); //开始编辑线
} else {
//将最后一个点换成鼠标的坐标
var pPoints = polygon.Geometry;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).X = pos.X;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).Y = pos.Y;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).Z = 0;
polygon.Geometry.Rings(0).Points.AddPoint(pos.X, pos.Y, 0);
// alert(2222)
// cLabelStyle = sgworld.Creator.CreateLabelStyle();
// var area = sgworld.Analysis.MeasureTerrainArea(polygon.Geometry)
// Area = sgworld.Creator.CreateTextLabel(pos, area, cLabelStyle, "");
}
}
}
function StopArea(flags, x, y) {
// alert("***")
// alert(polygon.Geometry.Rings(0).Points.count)
if (polygon == null || polygon.Geometry.Rings(0).Points.count <= 3) {
return false;
}
// alert("5555")
// polygon.Geometry.EndEdit();
// 删除最后一个点
polygon.Geometry.Rings(0).Points.DeletePoint(polygon.Geometry.Rings(0).Points.count - 1);
// 解除绑定事件
sgworld.DetachEvent("OnLButtonDown", StartDrawPolygon1);
sgworld.DetachEvent("OnFrame", DrawPolygonOnFrame);
sgworld.DetachEvent("OnRButtonUp", StopArea);
// 结束面编辑功能
polygon.Geometry.EndEdit();
// p = polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1)
var area = sgworld.Analysis.MeasureTerrainArea(polygon.Geometry)
// alert("所测面积为" + area)
cLabelStyle = sgworld.Creator.CreateLabelStyle();
console.dir(area)
var CursorCoord = sgworld.Window.pixelToWorld(x, y);
var pos = CursorCoord.Position
Area = sgworld.Creator.CreateTextLabel(pos, area, cLabelStyle, "");
Area = null
polygon = null
sgworld.Window.SetInputMode(0); //鼠标恢复效果
ScanTree()
}