三维场景,加载kml文件后如何进行编辑操作?

0 投票
Layer3DKML layerPipeLine = this.m_sceneControl.Scene.Layers.Add(@"i:\1.kml", Layer3DType.KML,true) as Layer3DKML;
layerPipeLine.IsEditable = true;
layerPipeLine.IsSelectable = true;

kml文件中的内容能够加载到场景中

IsEditable设置后,kml图层的线段无任何变化,鼠标点击后也无法编辑,官方有demo吗?
2月 12 分类:  134次浏览 | 用户: lierisme 初出茅庐 (35 分)

1个回答

0 投票
您好,直接获取kml里的元素,然后修改里面的节点即可
2月 12 用户: 邬袁凯 名扬四海 (2,429 分)
不能直接在界面里操作吗?

“直接获取kml里的元素”是指什么?layerPipeLine.Features.GetFeatureArray(Feature3DSearchOption.AllFeatures)[0]

这个吗?
是不是不能象二维场景一般在界面里直接拖动节点进行线面的编辑?
三维里面数据集里的线开启可编辑可以像二维里的操作,kml,trackinglayer等需要获取线,然后改变节点,

kml里面获取几何要素是先获取kml的线的feature,然后获取feature里的geometry
"三维里面数据集里的线开启可编辑"—是指Layer3DKML里的feature中的geometry吗?没有找到类似IsEditable的设置用于开启线编辑?还是说“三维里面数据集”根本就不是Layer3DKML类,而是其他的什么类?

能否明确说下是哪个类的哪个方法吗?
不是指kml,是特指三维线数据集,数据源里的数据集,添加到场景里的,Layer3DDataset类
不知如何将Geometry3D数据导入到Layer3DDataset中,所以后来改用了Layer3DKML
新建一个dataset,类型为三维线数据集的,然后获取dataset里的recotdset,往recordset里面去新增geometry就行了,参考范例   安装目录\SampleCode\Data\RecordsetManage\RecordsetManage.csproj
Geometry3D geometry = e.Geometry;
                Layer3DSettingVector setting = new Layer3DSettingVector();
                setting.Style.AltitudeMode = AltitudeMode.ClampToGround;
                setting.Style.LineColor = Color.Yellow;
                setting.Style.LineWidth = 1.3;

Datasource ds = MapUtils.OpenDatasource(this.m_sceneControl.Scene.Workspace, "drawEdit");
                DatasetVectorInfo datasetVectorInfo = new DatasetVectorInfo();
                datasetVectorInfo.Type = DatasetType.Line3D;
                datasetVectorInfo.IsFileCache = true;
                datasetVectorInfo.Name = "line";
                DatasetVector datasetVector = ds.Datasets.Create(datasetVectorInfo);
                Recordset recordset = datasetVector.GetRecordset(true, CursorType.Dynamic);
                bool f = recordset.AddNew(geometry);
                recordset.Update();
                datasetVector.PrjCoordSys = PrjCoordSys.FromEPSG(3857);

                Layer3DDataset layerPipeLine = this.m_sceneControl.Scene.Layers.Add(datasetVector, setting, true, "pipeLine");
                layerPipeLine.IsVisible = true;
                layerPipeLine.IsEditable = true;
                layerPipeLine.IsSelectable = true;
                this.m_sceneControl.Scene.Refresh();
                this.m_sceneControl.Refresh();

请看看是哪里有问题,界面不显示线段,这段代码是放在 m_sceneControl.Tracked 事件里的
...