skyline画多边形
2019-11-20 本文已影响0人
MaJiT
1.HTML
<input type="button" value="绘制多边形" id="btnDrawPolygon" />
2. JAVASCRIPT
//绘制多边形
var pPolygon = null;//多边形对象
$("#btnDrawPolygon").bind("click", function () {
//注册地图事件
SGWorld66.Window.SetInputMode(1);//鼠标样式修改
SGWorld66.AttachEvent("OnLButtonDown", StartDrawPolygon);
SGWorld66.AttachEvent("OnFrame", DrawPolygonOnFrame);
SGWorld66.AttachEvent("OnRButtonUp", StopDrawPolygon)
})
//绘制多边形
var tPolyLine = null;
function StartDrawPolygon(flags, x, y) {
//定义渲染样式
var lineColor, lineWidth = 1, lineOpacity = 1, fillColor, fillOpacity = 0.5;
lineColor = SGWorld66.Creator.CreateColor(255, 100, 0, 125);//定义线样式
fillColor = SGWorld66.Creator.CreateColor(100, 255, 0, 125);//定义面样式
//将屏幕坐标转换为地理坐标
var pWorldPointInfo = SGWorld66.Window.PixelToWorld(x, y, -1);
if (null == pWorldPointInfo) {
return false;
}
try {
if (null == pPolygon) {
if (!tPolyLine) {
var lineGeometry = SGWorld66.Creator.GeometryCreator.CreateLineStringGeometry([pWorldPointInfo.Position, pWorldPointInfo.Position]);
tPolyLine = SGWorld66.Creator.CreatePolyline(lineGeometry, lineColor, 2, SGWorld66.ProjectTree.RootID, "线");
tPolyLine.Geometry.StartEdit();
}
else if (tPolyLine.Geometry.Points.Count < 3) {
tPolyLine.Geometry.Points.AddPoint(pWorldPointInfo.Position.X, pWorldPointInfo.Position.Y, pWorldPointInfo.Position.Altitude);
}
else {
var points = tPolyLine.Geometry.Points;
var ring = SGWorld66.Creator.GeometryCreator.CreateLinearRingGeometry([
points.Item(0).X, points.Item(0).Y, points.Item(0).Z,
points.Item(1).X, points.Item(1).Y, points.Item(1).Z,
points.Item(2).X, points.Item(2).Y, points.Item(2).Z,
pWorldPointInfo.Position.X, pWorldPointInfo.Position.Y, pWorldPointInfo.Position.Altitude
]);
var polygonGeometry = SGWorld66.Creator.GeometryCreator.CreatePolygonGeometry(ring, null);
pPolygon = SGWorld66.Creator.CreatePolygon(polygonGeometry, lineColor, fillColor, 2, SGWorld66.ProjectTree.RootID, "多边形");
pPolygon.LineStyle.Width = lineWidth;
pPolygon.LineStyle.Color.SetAlpha(lineOpacity);
pPolygon.TreeItem.ShowInViewerTree = true;
pPolygon.Geometry.StartEdit();
//删除临时的线对象
SGWorld66.ProjectTree.DeleteItem(tPolyLine.ID);
tPolyLine = null;
}
} else {
pPolygon.Geometry.ExteriorRing.Points.AddPoint(pWorldPointInfo.Position.X, pWorldPointInfo.Position.Y, pWorldPointInfo.Position.Altitude);
}
} catch (ex) {
alert(ex.description);
}
}
function DrawPolygonOnFrame() {
//鼠标移动时渲染
var teWindow, mouseInfo, mouseInfo, point, lastPoint;
teWindow = SGWorld66.Window;
mouseInfo = teWindow.GetMouseInfo();
point = teWindow.PixelToWorld(mouseInfo.X, mouseInfo.Y, 0);
if (null != tPolyLine) {
lastPoint = tPolyLine.Geometry.Points.Item(tPolyLine.Geometry.Points.Count - 1);
lastPoint.X = point.Position.X;
lastPoint.Y = point.Position.Y;
lastPoint.Z = point.Position.Altitude;
return;
}
if (null == pPolygon) {
return;
}
lastPoint = pPolygon.Geometry.ExteriorRing.Points.Item(pPolygon.Geometry.ExteriorRing.Points.Count - 1);
lastPoint.X = point.Position.X;
lastPoint.Y = point.Position.Y;
lastPoint.Z = point.Position.Altitude;
}
function StopDrawPolygon(flags, x, y) {
//结束多边形编辑功能
SGWorld66.DetachEvent("OnLButtonDown", StartDrawPolygon);
SGWorld66.DetachEvent("OnRButtonUp", StopDrawPolygon);
SGWorld66.DetachEvent("OnFrame", DrawPolygonOnFrame);
pPolygon = null;
SGWorld66.Window.SetInputMode(0);//鼠标恢复效果
}
Javascript Code