com.supermap.realspace
类 Feature3Ds

java.lang.Object
  继承者 com.supermap.realspace.Feature3Ds

public class Feature3Ds
extends java.lang.Object

三维要素集合类。

该类对象是三维要素对象的集合。三维要素集合类比较特殊,它不单纯是三维要素对象的集合,它是树状结构,也就是说三维要素集合对象还可以包含子对象,子对象也是三维要素集合类的对象。因此,一个三维要素集合对象可以包括零个或多个子对象和零个或多个三维要素对象。 下图是一个简单的例子,可以帮助进一步理解树状三维要素集合:图中的 Feature3Ds object 是三维要素集合对象,Feature3D object 是三维要素对象,每个三维要素集合对象可以包含零个或多个三维要素对象或者包含零个或多个三维要素对象,或者什么也没有,即一个空的集合。


构造方法摘要
Feature3Ds()
          构造一个新的 Feature3Ds 对象。
 
方法摘要
 Feature3D add(Feature3D feature)
          向该三维要素集合中添加三维要素对象。
 Feature3Ds add(Feature3Ds features)
          向该三维要素集合中添加三维要素集合对象。
 Feature3D add(Geometry3D geometry)
          向三维要素集合中添加三维几何对象,使其成为集合中的三维要素对象,返回三维要素对象。
 Feature3Ds add(java.lang.String kmlFile)
          通过 KML 文件,向该三维要素集合中添加树状三维要素对象集合对象。
 void clear()
          清空三维要素集合中的所有子集合对象和所有三维要素对象。
 void dispose()
          释放该对象所占用的资源。
 void exchange(int index1, int index2)
          交换指定索引处的对象。
 Feature3D findFeature(int id, Feature3DSearchOption option)
          根据给定的三维要素对象ID以及指定的查询选项,查找并返回三维要素对象。
 Feature3D[] findFeature(java.lang.String name, Feature3DSearchOption option)
          根据给定的三维要素对象的名称以及指定的查询选项,查找并返回名称为指定名称的所有三维要素对象。
 Feature3Ds[] findFeatures(java.lang.String name, Feature3DSearchOption option)
          根据给定的三维要素集合对象的名称以及指定的查询选项,查找并返回名称为指定名称的所有三维要素集合对象。
 boolean fromKML(java.lang.String kml)
          从 KML 字符串中导入三维要素集合对象。
 boolean fromKMLFile(java.lang.String kmlFile)
          从 KML 文件导入三维要素集合对象。
 java.lang.Object get(int index)
          返回指定索引处的项。
 Camera getCamera()
          返回相机对象。
 int getCount()
          返回该对象所包含项的个数。
 java.lang.String getDescription()
          返回三维要素对象集合的描述信息。
 Feature3D[] getFeatureArray(Feature3DSearchOption option)
          返回该三维要素集合对象中的三维要素对象数组,查询选项用于设置是只返回顶层叶子结点(三维要素对象)数组还是返回所有的叶子结点(三维要素对象)数组。
 Feature3Ds[] getFeaturesArray(Feature3DSearchOption option)
          返回该三维要素集合对象中子对象的数组,子对象也是三维要素集合对象。
 java.lang.String getName()
          返回三维要素对象集合的名称。
 Feature3Ds getParent()
          返回三维要素集合的父对象(也是三维要素对象集合对象)。
 Feature3D insert(int index, Feature3D feature)
          在指定的索引处插入三维要素对象。
 Feature3Ds insert(int index, Feature3Ds features)
          在指定的索引处插入三维要素集合对象。
 boolean isVisible()
          返回三维要素集合是否可见,即三维要素集合中的所有三维要素对象是否可见。
 void remove(Feature3D feature)
          删除三维要素集合对象中的三维要素对象。
 void remove(Feature3Ds features)
          删除三维要素集合对象中的三维要素集合子对象。
 void remove(int id)
          根据三维要素对象的 ID 删除三维要素集合对象中的三维要素对象。
 void removeAt(int index)
          删除指定索引处的项。
 void setCamera(Camera camera)
          设置相机对象。
 void setDescription(java.lang.String value)
          设置三维要素对象集合的描述信息。
 void setName(java.lang.String value)
          设置三维要素对象集合的名称。
 void setVisible(boolean value)
          设置三维要素集合是否可见,即三维要素集合中的所有三维要素对象是否可见。
 java.lang.String toKML()
          返回三维要素集合对象的描述信息的 KML 字符串。
 void toKMLFile(java.lang.String kmlFile)
          将三维要素集合对象输出成 KML 文件。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

Feature3Ds

public Feature3Ds()
构造一个新的 Feature3Ds 对象。

方法详细信息

getName

public java.lang.String getName()
返回三维要素对象集合的名称。

返回:
三维要素对象集合的名称。
默认值:
默认值为 "UntitledFeature3Ds"。

setName

public void setName(java.lang.String value)
设置三维要素对象集合的名称。

参数:
value - 三维要素对象集合的名称。

getDescription

public java.lang.String getDescription()
返回三维要素对象集合的描述信息。

返回:
三维要素对象集合的描述信息。
默认值:
默认值为一个空的字符串。

setDescription

public void setDescription(java.lang.String value)
设置三维要素对象集合的描述信息。

参数:
value - 三维要素对象集合的描述信息。

getParent

public Feature3Ds getParent()
返回三维要素集合的父对象(也是三维要素对象集合对象)。

三维要素集合类是树状结构的,如下图,假设一个三维要素集合对象的树状结构如下图,如果被操作的三维要素集合对象是红色框里的对象,那么通过本方法返回的其父对象就是蓝色框里的对象。

返回:
三维要素集合的父对象。
默认值:
默认值为空。

isVisible

public boolean isVisible()
返回三维要素集合是否可见,即三维要素集合中的所有三维要素对象是否可见。

返回:
如果三维要素集合可见,返回 true;否则返回 false。
默认值:
默认值为 true。

setVisible

public void setVisible(boolean value)
设置三维要素集合是否可见,即三维要素集合中的所有三维要素对象是否可见。

参数:
value - 一个布尔值指定三维要素集合是否可见。

getCamera

public Camera getCamera()
返回相机对象。

返回:
相机对象。
默认值:
默认值为{Altitude=-1.79769313486232E+308,Heading=-1.79769313486232E+308,Latitude=-1.79769313486232E+308,Longitude=-1.79769313486232E+308,Tilt=-1.79769313486232E+308,AltitudeMode=CLAMP_TO_GROUND}

setCamera

public void setCamera(Camera camera)
设置相机对象。

参数:
camera - 相机对象。

get

public java.lang.Object get(int index)
返回指定索引处的项。

参数:
index - 指定的索引值。
返回:
指定索引处的项。

getCount

public int getCount()
返回该对象所包含项的个数。

返回:
该对象所包含项的个数。

getFeatureArray

public Feature3D[] getFeatureArray(Feature3DSearchOption option)
返回该三维要素集合对象中的三维要素对象数组,查询选项用于设置是只返回顶层叶子结点(三维要素对象)数组还是返回所有的叶子结点(三维要素对象)数组。

参数:
option - 查询选项。有关查询选项的详细信息,请参见 Feature3DSearchOption 枚举类。
返回:
三维要素对象数组。
示例:
以下代码示例了向三维要素集合中添加要素,三维几何对象和要素集合对象,并通过getFeatureArray() 方法返回该三维要素集合对象中的三维要素对象数组,再通过 findFeatures() 方法返回三维要素集合对象。
     public void GetFeatureAndFeaturesArray()
    {
        //构造任意几个三维几何对象geo1、geo2、geo3、geo4、geo5
        GeoPoint3D geo1 = new GeoPoint3D(10.0, 20.0, 30.0);
        GeoPoint3D geo2 = new GeoPoint3D(10.0, 200.0, 30.0);
        GeoPoint3D geo3 = new GeoPoint3D(10.0, 20.0, 300.0);
        GeoPoint3D geo4 = new GeoPoint3D(100.0, 20.0, 30.0);
        GeoPoint3D geo5 = new GeoPoint3D(115.0, 38.0, 30.0);

        //构造三个三维要素集合features1、features2、features3
        Feature3Ds feature3Ds1 = new Feature3Ds();
        feature3Ds1.setName("Feature3Ds1");
        Feature3Ds feature3Ds2 = new Feature3Ds();
        feature3Ds2.setName("Feature3Ds2");
        Feature3Ds feature3Ds3 = new Feature3Ds();
        feature3Ds3.setName("Feature3Ds3");

        //构造三维要素集合的树状结构
        //1 在features2中添加geo1、geo2
        Feature3D feature3D1 = feature3Ds2.add(geo1);
        Feature3D feature3D2 = feature3Ds2.add(geo2);
        //2 在features2的子节点下面再添加一个features3
        feature3Ds2.add(feature3Ds3);

        //3 在features3中添加geo3、geo4
        Feature3D feature3D3 = feature3Ds3.add(geo3);
        Feature3D feature3D4 = feature3Ds3.add(geo4);

        //4 在features1子对象中添加features2和geo5
        feature3Ds1.add(feature3Ds2);
        feature3Ds1.add(geo5);

        //通过GetFeatureArray接口查找features1树形的顶层三维要素集合得到featureArray1
        Feature3D[] featureArray1 = feature3Ds1.getFeatureArray
               (Feature3DSearchOption.TOPFEATURESONLY);

        //通过GetFeaturesArray接口查找整个features1树形要素集合得到featuresArray1
        Feature3Ds[] featuresArray1 = feature3Ds1.getFeaturesArray
               (Feature3DSearchOption.ALLFEATURES);

        //通过Find接口在顶层查找ID为0的三维要素
        Feature3D result = feature3Ds1.findFeature(0, Feature3DSearchOption.ALLFEATURES);

        //通过Find接口在顶层查找三维要素集合
        Feature3Ds[] results = feature3Ds1.findFeatures("feature3Ds2", Feature3DSearchOption.TOPFEATURESONLY);

        }

getFeaturesArray

public Feature3Ds[] getFeaturesArray(Feature3DSearchOption option)
返回该三维要素集合对象中子对象的数组,子对象也是三维要素集合对象。查询选项用于设置是只返回顶层的子对象还是返回所有层的子对象。有关查询选项的详细信息,请参见 Feature3DSearchOption 枚举类。

参数:
option - 查询选项。有关查询选项的详细信息,请参见 Feature3DSearchOption 枚举类。
返回:
三维要素集合对象的数组。
示例:
请参见 getFeatureArray() 方法示例。

findFeature

public Feature3D findFeature(int id,
                             Feature3DSearchOption option)
根据给定的三维要素对象ID以及指定的查询选项,查找并返回三维要素对象。

参数:
id - 三维要素对象的ID。
option - 查询选项。
返回:
三维要素对象。
示例:
以下代码示例了如何在三维要素集合查找给定ID的三维要素.
     public boolean Feature3DsFindFeature()
    {
        //假设已存在名字为kml.kml的KML字符串
        String fileName = "D:\\SampleData\\kml.kml";
        int id = 2;

        //用给定的KML字符串来填充该三维要素集合对象
        Feature3Ds features = new Feature3Ds();
        features.fromKMLFile(fileName);

        //按照给定的ID和查找模式查找三维要素
        Feature3D feature = features.findFeature(id, Feature3DSearchOption.TOPFEATURESONLY);

        //判断给定id与查找得到的三维要素的ID是否相等,从而判断查找的正确性
        if (id == feature.getID())
        {
            return true;
        }
        else return false;

    }

findFeature

public Feature3D[] findFeature(java.lang.String name,
                               Feature3DSearchOption option)
根据给定的三维要素对象的名称以及指定的查询选项,查找并返回名称为指定名称的所有三维要素对象。

参数:
name - 三维要素对象的名称。
option - 查询选项。
返回:
三维要素对象数组。

findFeatures

public Feature3Ds[] findFeatures(java.lang.String name,
                                 Feature3DSearchOption option)
根据给定的三维要素集合对象的名称以及指定的查询选项,查找并返回名称为指定名称的所有三维要素集合对象。

参数:
name - 三维要素集合对象的名称。
option - 查询选项。
返回:
三维要素集合对象的数组。
示例:
请参见 getFeatureArray() 方法示例。

add

public Feature3D add(Feature3D feature)
向该三维要素集合中添加三维要素对象。

参数:
feature - 待添加的三维要素对象。
返回:
三维要素对象。
示例:
以下代码示例了如何向该三维要素集合中添加三维要素对象
     public boolean AddFeature3D()
    {
        //构造一个三维几何点对象
        GeoPoint3D point = new GeoPoint3D(45, 90, 50);

        //构造一个三维要素对象
        Feature3D feature = new Feature3D();

        //设置三维要素对象所对应的几何对象
        feature.setGeometry(point);

        //构造一个三维要素集合
        Feature3Ds features = new Feature3Ds();

        //将得到的三维要素添加到三维要素集合中
        Feature3D resultFeature = features.add(feature);

        //判断新添加的三维要素父对象的名称与该三维要素集合对象的名称是否相等,以此来判断添加是否成功
        if (features.getName() == resultFeature.getParent().getName())
        {
            return true;
        }
        else return false;

    }

add

public Feature3Ds add(Feature3Ds features)
向该三维要素集合中添加三维要素集合对象。

参数:
features - 待添加的三维要素对象集合。
返回:
三维要素对象集合。
示例:
请参见 getFeatureArray() 方法示例。

add

public Feature3D add(Geometry3D geometry)
向三维要素集合中添加三维几何对象,使其成为集合中的三维要素对象,返回三维要素对象。

参数:
geometry - 待添加的三维几何对象。
返回:
三维要素对象。
示例:
以下代码示范了如何向三维场景中添加三维模型对象,并且通过Camera转到给定位置查看
 public void Feature3DsAddGeometry3D()
    {
        //构造一个默认的三维场景
        SceneControl sceneControl = new SceneControl();
        Scene scene = sceneControl.getScene();

        //向三维图层中添加给定的kml文件,得到三维图层layer
        Layer3D layer3D = scene.getLayers().add("D:\\SampleData\\kml.kml", true);

        //构造一个圆锥体几何对象
        Point3D point3D = new Point3D(102, 31, 0);
        GeoCone geoCone = new GeoCone(point3D, 800, 800);

        // 实例化一个三维模型几何对象,将其输出为 sgm 格式的文件
        //geoCone.getGeoModel接口引用其父类GeoMetry3D的getGeoModel,不影响使用。
        GeoModel geoModel = geoCone.getGeoModel(80, 80);
        geoModel.toSGM("D:\\SampleData\\Model.sgm");

        //向三维图层中给定的位置处添加给定的模型
        Point3D position = new Point3D(116, 39, 10000);
        geoModel.fromFile("D:\\SampleData\\Model.sgm", position);
        GeoPlacemark geoPlaceMark = new GeoPlacemark();
        geoPlaceMark.setGeometry(geoModel);
        Feature3D feature3D = layer3D.getFeatures().add(geoPlaceMark);
        feature3D.setVisible(true);

        //用相机转到给定的位置
        Camera camera = scene.getCamera();
        camera.setLongitude(position.getX());
        camera.setLatitude(position.getY());
        camera.setAltitude(5000);
        camera.setTilt(60);
        scene.setCamera(camera);
    }

add

public Feature3Ds add(java.lang.String kmlFile)
通过 KML 文件,向该三维要素集合中添加树状三维要素对象集合对象。

KML支持的图层类型为:几何对象(点、线、面)、图片、模型。

参数:
kmlFile - KML 文件全路径。
返回:
三维要素对象集合。
示例:
以下代码示范了如何向三维要素集合添加 KML 为子对象
     public void Feature3DsAddKML()
    {
        //构造三维点对象,再构造三维地标几何对象
        GeoPoint3D geometry = new GeoPoint3D(116, 39, 300);
        GeoPlacemark geoPlacemark = new GeoPlacemark("三维点", geometry);
        //GeoPlacemark geoPlacemark = new GeoPlacemark("GeoPoint3D", geometry);

        //构造一个三维要素对象并输出kml字符串
        Feature3D feature3D = new Feature3D();
        feature3D.setGeometry(geoPlacemark);
        String kml = feature3D.toKML();

        //向三维要素集合对象添加kml
        Feature3Ds feature3Ds = new Feature3Ds();
        feature3Ds.add(kml);
    }

remove

public void remove(int id)
根据三维要素对象的 ID 删除三维要素集合对象中的三维要素对象。

参数:
id - 待删除的三维要素对象的 ID。

remove

public void remove(Feature3D feature)
删除三维要素集合对象中的三维要素对象。

参数:
feature - 待删除的三维要素对象。

remove

public void remove(Feature3Ds features)
删除三维要素集合对象中的三维要素集合子对象。

参数:
features - 待删除的三维要素集合子对象。

clear

public void clear()
清空三维要素集合中的所有子集合对象和所有三维要素对象。


toKML

public java.lang.String toKML()
返回三维要素集合对象的描述信息的 KML 字符串。

返回:
三维要素集合对象的描述信息的 KML 字符串。

fromKML

public boolean fromKML(java.lang.String kml)
从 KML 字符串中导入三维要素集合对象。

参数:
kml - KML字符串。
返回:
导入成功返回 true;否则返回 false。
示例:
以下代码示例了如何导出三维要素集合对象到KML字符串,再从KML字符串中导入三维要素集合对象
     public void FromToKML()
    {
        //构造一个三维要素集合对象,并添加kml文件
        //Create an instance of Feature3D and add the kml file to the feature3D object.
        Feature3Ds feature3Ds = new Feature3Ds();
        feature3Ds.add("D:\\SampleData\\kml.kml");

        //将三维要素集合导出为KML字符串
        //Export the feature3Ds to a kml string.
        String kml = feature3Ds.toKML();

        //通过导入 KML 字符串创建三维要素集合对象
        //Import the Feature3D object from a kml string.
        feature3Ds.fromKML(kml);

        //释放资源
        //Release the resources.
        feature3Ds.dispose();

    }

toKMLFile

public void toKMLFile(java.lang.String kmlFile)
将三维要素集合对象输出成 KML 文件。

参数:
kmlFile - 指定的 KML 文件相对路径。
示例:
请参见 Feature3Ds.fromKML() 方法的示例。

fromKMLFile

public boolean fromKMLFile(java.lang.String kmlFile)
从 KML 文件导入三维要素集合对象。

参数:
kmlFile - 指定的 KML 文件相对路径。
返回:
导入成功返回 true;否则返回 false。

insert

public Feature3Ds insert(int index,
                         Feature3Ds features)
在指定的索引处插入三维要素集合对象。

参数:
index - 指定的目标索引值。
features - 指定的待插入的三维要素集合对象。
返回:
新插入的三维要素集合对象。

insert

public Feature3D insert(int index,
                        Feature3D feature)
在指定的索引处插入三维要素对象。

参数:
index - 指定的目标索引值。
feature - 指定的待插入的三维要素对象。
返回:
新插入三维要素对象。

removeAt

public void removeAt(int index)
删除指定索引处的项。

参数:
index - 指定的待删除项所处的索引值。

exchange

public void exchange(int index1,
                     int index2)
交换指定索引处的对象。

参数:
index1 - 需要进行交换操作项的索引。
index2 - 需要进行交换操作项的索引。

dispose

public void dispose()
释放该对象所占用的资源。当调用该方法之后,此对象不再可用。