|
本帖最后由 lichen 于 2020-4-29 09:59 编辑
就拿上次加载的WFS图层来进行图层单个要素选中效果实现。
实现方式是:1、绑定鼠标左击事件;2、获取鼠标点击位置;3、获取单个要素对象;4、设置颜色function geto() {
//1、绑定事件
SGWorld.AttachEvent('OnLButtonClicked', getFeasture);
}
function getFeasture(Flags, X, Y) {
//2、获取鼠标坐标
var mousePos = SGWorld.Window.PixelToWorld(X, Y);
if (mousePos) {
if (mousePos.ObjectID) {
//3、获取对象
let obj = SGWorld.ProjectTree.GetObject(mousePos.ObjectID);
if (obj.ObjectType == '33') {
//4、设置颜色
SetFeatureColor(obj.ID);
}
}
}
}
- let temID = null;
- function SetFeatureColor(id) {
- try {
- if (temID == null) {
- let obj = SGWorld.ProjectTree.GetObject(id);
- obj.Tint.FromHTMLColor("#ff0000");
- obj.Tint.SetAlpha(1);
- temID = id;
- }
- else {
- let temObj = SGWorld.ProjectTree.GetObject(temID);
- temObj.Tint.SetAlpha(0);
- let obj = SGWorld.ProjectTree.GetObject(id);
- obj.Tint.FromHTMLColor("#ff4400");
- obj.Tint.SetAlpha(1);
- temID = id;
- }
- } catch (e) {
- temID = id;
- }
- }
复制代码 实现的高亮如下:
还有另外一种方法,就是获取元素的geometry,再创建一个Polygon,这样再选中大面积元素的时候,会比Tint快一点,
let temID = null;
function setLine(id) {
let lineColor = SGWorld.Creator.CreateColor(255, 10, 0, 1);
let fillColor = SGWorld.Creator.CreateColor(255, 10, 0, 0);
if (temID == null) {
let obj = SGWorld.ProjectTree.GetObject(id);
let poly = SGWorld.Creator.CreatePolygon(obj.Geometry, lineColor, fillColor, 2, '', '');
poly.LineStyle.Width = -25;
temID = poly.ID;
} else {
SGWorld.ProjectTree.DeleteItem(temID);
let obj = SGWorld.ProjectTree.GetObject(id);
let poly = SGWorld.Creator.CreatePolygon(obj.Geometry, lineColor, fillColor, 2, '', '');
poly.LineStyle.Width = -25;
temID = poly.ID;
}
}
线宽设置为负值,会变成像素值,更明显一些。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|