首页 / 浏览问题 / 组件GIS / 问题详情
关于三维标绘
14EXP 2017年03月10日
请问怎么在场景里面标记添加点线或者其他的图形,并且保存

1个回答

请问是添加矢量的点、线?还是特指添加标绘符号?
5,985EXP 2017年03月10日
在相应的坐标上添加一个矢量点或者文字符号。请问你们有三维标绘的例子么,我添加了CAD图层后怎么保存工作空间呢,workspace.Save();我用这个方法保存不了
所以你只是要添加点和文字吗,不需要用三维标绘库里面的相关接口吗,然后你是把点和文字添加到跟踪图层还是数据集的?
我想要的效果是在场景里添加一个图标做为标记并且保存下来,下次打开工作空间之后标记还在,按照你们的方法,我已经添加了CAD数据集,并且把CAD数据集作为图层添加到了场景里面了,请问我怎么在这个CAD图层上面做标记并且保存下来?
如果你没有用到SuperMap.Plot 这个命名空间的话,那么你需要做的是把你要添加的点,线,文字等添加到CAD数据集中,再把你添加的对象显示到场景中,给相关对象风格,然后保存场景,保存工作空间

怎么保存场景呢,我怎么把点线文字等添加到数据集里?是我在场景中标记了之后再添加到CAD数据集么?工作空间用这个保存workspace.Save();场景用什么方法保存呢?

通过Scene.ToXML 方法把当前场景信息输出成XML,删除工作空间原来的场景,再通过WorkSpace.Scenes.Add方法将XML添加到工作空间中。获取CAD的Recordset,通过Recordset.AddNew方法将对象添加到CAD数据集中
能示范下在CAD图层上绘制点或线并且保存么?
稍等一下,我写好了给你
好的谢啦,我找不到删除当前场景的方法,workspace.Scenes.Clear()这个方法么?
Scenes.Remove 方法

这是将点添加到CAD数据集的示范代码

谢谢啦,我试试
请问画到图层上的东西怎么保存,需要保存到数据集里面么?还是保存到场景中就可以了?
如果你想再次打开场景的时候还存在你画的对象,那么就得把对象添加到数据集中,反之,可以将对象添加到场景的跟踪图层上。
如果是把对象存到数据集中的话,这个对象能设属性值类的东西么,比如说名字啊,备注啊这些
当然能,前提是你的数据集里有名字,备注等相关字段
这样啊,就像你上面的点对象一样,我能设这个点的名字么
我怎么给这个点对象设置这些字段呢?
能,你在数据集的属性表里索引到这个对象,再通过“名字”字段为其设置名字
你应该是在数据集里面添加“名字”这个字段,当然,如果你数据集里已经有了这个字段就不用再添加啦
就是说我添加完这个对象之后把这个对象找出来,然后通过字段名给这个字段设置值?是这样么?那我怎么添加字段呢,比如这个“名字”字段。
FieldInfo fieldinfo = new FieldInfo();
            fieldinfo.Name = "pic";
            fieldinfo.Caption = "pic";
            fieldinfo.Type = FieldType.Byte;
            fieldinfo.IsRequired = false;
            datasetvc.FieldInfos.Add(fieldinfo);//datasetvc是矢量数据集
这样啊,我知道怎么添加啦,谢啦
还有个疑问,我已经把那个店添加到数据集里面啦,为什么再次打开的时候没有我点的那几个标记了
你场景也保存了吗
保存了啊,我按照你上面的代码测试的,给那个3D点加了个样式
把你加样式和保存场景的代码贴出来看一下

我就是这样写的啦

这样试试,先string str=scene.toxml,再关闭场景,释放场景资源,移除场景,再workspace.scenes.add添加场景
不行啊,还是一样的
我看了一下你的代码,添加到跟踪图层里面的点,是不会被保存下来的,不能用scene.trackinglayer
那用什么呢
Layer3Ds.Add 方法 (Dataset, Layer3DSetting, Boolean),将添加点所在的数据集添加到场景中,对其进行风格设置
 Layer3DSettingVector layer3DSettingVector = new Layer3DSettingVector();
    GeoStyle3D geoStyle3D = new GeoStyle3D();
    geoStyle3D.AltitudeMode = AltitudeMode.RelativeToGround;
    geoStyle3D.FillMode = FillMode3D.LineAndFill;
    geoStyle3D.LineColor = Color.Red;
    geoStyle3D.LineWidth = 1;
    layer3DSettingVector.Style = geoStyle3D;
    layer3DSettingVector.BottomAltitudeField = "BottomAltitude";
    layer3DSettingVector.ExtendedHeightField = "ExtendedHeight";
    layer3DSettingVector.SideTextureField = "SideTexture";
    layer3DSettingVector.TopTextureField = "TopTexture";

    //将矢量数据集显示在三维地图场景中
    Layer3DDataset layer3DDataset=sceneObject.Layers.Add(targetDataset, layer3DSettingVector, true);
    layer3DDataset.UpdateData();
    sceneObject.Refresh();
这样就可以显示了?Layer3Ds.Add 方法 (Dataset, Layer3DSetting, Boolean)我用这方法添加进去也没显示啊
这样设置,然后保存场景肯定是能显示的
那我编辑的时候也是这样写??就是我绘制点的时候

我是建议你把点单独存到一个数据集,然后把这个数据集添加到场景中,设置

layer3DSettingVector,然后保存场景
请问怎么给自定义的字段添加值

根据你字段的类型,选择合适的方法,另外我准备写一个场景添加点线面,保存场景的demo,我两天我传上资源中心,你可以参考一下

好的,我试试
你好,我写了一个相关的demo,你可以参考一下http://support.supermap.com.cn/product/CodeLibrary.aspx?PRODUCT_TYPE=3
...