com.supermap.realspace.spatialanalyst
类 Geometrist3D

java.lang.Object
  继承者 com.supermap.realspace.spatialanalyst.Geometrist3D

public class Geometrist3D
extends java.lang.Object

三维几何基本运算类。目前提供三维线的光滑和重采样处理。

从以下版本开始:
SuperMap iObjects Java 7.0.0

方法摘要
static Geometry3D createBuffer(Geometry3D geometry, BufferAnalyst3DParameter bufferAnalyst3DParameter, PrjCoordSys prjCoordSys)
          对三维点、线几何对象做缓冲区。
static Geometry3D erase(Geometry3D geometry3D, Geometry3D eraseGeometry3D)
          三维体对象擦除运算,即在被操作对象上擦除掉与操作对象相重合的部分。
static boolean hasIntersection(Geometry3D geometry3D, Geometry3D intersectGeometry3D)
          判断两个三维几何对象是否相交。
static Geometry3D intersect(Geometry3D geometry3D, Geometry3D intersectGeometry3D)
          三维体对象求交运算,即求算并返回两个三维体对象的交集。
static GeoLine3D parallelLine(GeoLine3D geoLine3D, boolean bLonlat, java.lang.Double dDistance)
          三维线平移;平移distance < 0,平行线在线段方向的右侧;平移distance > 0,平行线在线段方向的左侧,线段方向是构成点的点序方向。
static Geometry3D resample(Geometry3D geometry, double tolerance, PrjCoordSys prjCoordsys)
          对三维几何对象进行重采样。
static Point3Ds smooth(Point3Ds points, int smoothness, PrjCoordSys prjCoordsys)
          对三维点串进行光滑处理。
static GeoLine3D subDivisionLine(GeoLine3D srcGeoLine3D, boolean isLonLat, double distance)
          三维线根据给定长度进行插值加密。
static Geometry3D union(Geometry3D geometry3D, Geometry3D unionGeometry3D)
          三维体对象合并运算,即将两个具有重叠体积的三维体对象合并为一个三维体对象并返回。
static Geometry3D xOR(Geometry3D geometry3D, Geometry3D xorGeometry3D)
          三维体对象对称差(异或)运算,即对两个三维体对象进行交集取反操作,返回两对象去除交集后合并的结果。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

hasIntersection

public static boolean hasIntersection(Geometry3D geometry3D,
                                      Geometry3D intersectGeometry3D)
判断两个三维几何对象是否相交。

该方法用于判断两个三维体是否相交,或三维线与三维体是否相交。

两个三维体相交的判断依据是二者具有公共的体积。二者仅共用一个顶点或一条边或一个面都不构成相交。

三维线必须穿过三维体才构成相交。

在判断两个三维几何对象是否相交时,注意以下要点:

  1. 支持三维体对象和三维线对象。三维几何体包括 GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及 GeoModel(三维模型)。

    可以检查两个三维体是否有交叠,或检查一个三维线对象与一个三维体对象是否相交。

  2. 检查两个三维体是否相交时,要求三维体必须是闭合的。如果不闭合,将抛出异常。

    建议在对三维体,尤其是三维模型(GeoModel),进行有效性检查后再进行相交判断。

  3. 坐标系?投影?

参数:
geometry3D - 指定的第一个三维几何对象。
intersectGeometry3D - 指定的第二个三维几何对象。
返回:
一个布尔值,指示给定的两三维几何对象是否相交。如果相交,返回 true,否则返回 false。
抛出:
java.lang.NullPointerException - 当判断两个三维体是否相交时象,如果 geometry3D 或 intersectGeometry3D 不闭合

erase

public static Geometry3D erase(Geometry3D geometry3D,
                               Geometry3D eraseGeometry3D)
三维体对象擦除运算,即在被操作对象上擦除掉与操作对象相重合的部分。

该操作在一个三维体上剔除其与另一个三维体的公共体积部分,并返回为一个 GeoModel 类型的 Geometry3D 对象。

在进行三维体擦除运算时,注意以下要点:

  1. 仅支持三维体对象,包括 GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及 GeoModel(三维模型)。

  2. 参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。

    建议在对三维体,尤其是三维模型(GeoModel),进行有效性检查后再进行擦除运算。

  3. 被操作三维体与操作三维体对象不具有公共体积时,该运算返回原被操作三维体对象;如果操作三维体完全包含被操作三维体,该运算返回 null。
  4. 坐标系?投影?

参数:
geometry3D - 指定的被操作对象。
eraseGeometry3D - 指定的操作对象。
返回:
对被操作对象进行擦除后的三维几何对象。
抛出:
java.lang.NullPointerException - 如果 geometry3D 或 eraseGeometry3D 不闭合

intersect

public static Geometry3D intersect(Geometry3D geometry3D,
                                   Geometry3D intersectGeometry3D)
三维体对象求交运算,即求算并返回两个三维体对象的交集。

该操作计算两个三维体的公共体积部分,并返回为一个 GeoModel 类型的 Geometry3D 对象。

在进行三维体相交运算时,注意以下要点:

  1. 仅支持三维体对象,包括 GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及 GeoModel(三维模型)。

  2. 参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。

    建议在对三维体,尤其是三维模型(GeoModel),进行有效性检查后再进行擦除运算。

  3. 两个三维体对象不具有公共体积时,求交结果为 null。另外,可使用 hasIntersection 方法判断两个三维体是否相交。
  4. 坐标系?投影?

参数:
geometry3D - 指定的参与求交的第一个三维体对象。
intersectGeometry3D - 指定的参与求交的第二个三维体对象。
返回:
两对象的交集部分,是一个三维体对象。
抛出:
java.lang.NullPointerException - 如果 geometry3D 或 intersectGeometry3D 不闭合

union

public static Geometry3D union(Geometry3D geometry3D,
                               Geometry3D unionGeometry3D)
三维体对象合并运算,即将两个具有重叠体积的三维体对象合并为一个三维体对象并返回。

该操作将两个具有公共体积的三维体合并为一个三维体,并返回为一个 GeoModel 类型的 Geometry3D 对象。

在进行三维体合并运算时,注意以下要点:

  1. 仅支持三维体对象,包括 GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及 GeoModel(三维模型)。

  2. 参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。

    建议在对三维体,尤其是三维模型(GeoModel),进行有效性检查后再进行擦除运算。

  3. 两个三维体对象不具有公共体积时,不能合并,返回 null。另外,可使用 hasIntersection 方法判断两个三维体是否相交。
  4. 坐标系?投影?

参数:
geometry3D - 指定的参与合并的第一个三维体对象。
unionGeometry3D - 指定的参与合并的第二个三维体对象。
返回:
合并后的三维体对象。
抛出:
java.lang.NullPointerException - 如果 geometry3D 或 intersectGeometry3D 不闭合

xOR

public static Geometry3D xOR(Geometry3D geometry3D,
                             Geometry3D xorGeometry3D)
三维体对象对称差(异或)运算,即对两个三维体对象进行交集取反操作,返回两对象去除交集后合并的结果。

该操作从两个三维体的并集中将二者的交集剔除,并返回为一个 GeoModel 类型的 Geometry3D 对象。

在进行三维体对称差运算时,注意以下要点:

  1. 仅支持三维体对象,包括 GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及 GeoModel(三维模型)。

  2. 参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。

    建议在对三维体,尤其是三维模型(GeoModel),进行有效性检查后再进行擦除运算。

  3. 两个三维体对象不具有公共体积时,对称差的结果是将二者作为子对象的一个复杂三维体对象。另外,可使用 hasIntersection 方法判断两个三维体是否相交。
  4. 坐标系?投影?

参数:
geometry3D - 指定的参与对称差的第一个三维体对象。
xorGeometry3D - 指定的参与对称差的第二个三维体对象。
返回:
对两对象去除交集后合并的结果,是一个三维体对象。
抛出:
java.lang.NullPointerException - 如果 geometry3D 或 intersectGeometry3D 不闭合

createBuffer

public static Geometry3D createBuffer(Geometry3D geometry,
                                      BufferAnalyst3DParameter bufferAnalyst3DParameter,
                                      PrjCoordSys prjCoordSys)
对三维点、线几何对象做缓冲区。可以指定源投影坐标系。

参数:
geometry - 指定的三维点线几何对象
bufferAnalyst3DParameter - 指定的缓冲参数类。
prjCoordSys - 指定的源投影坐标系。
返回:
三维模型几何对象。

该方法用于对三维点、线几何对象在空间做缓冲区域,支持平面和球面场景。

  • 三维点缓冲区
  • 三维点的缓冲区是以点对象为圆心,以给定的缓冲距离为半径生成的空间球状区域。

  • 三维线缓冲区
  • 三维线的缓冲区是沿空间线对象的法线方向,向线对象的周围平移一定的距离而得到空间柱状区域,并与在线端点处形成的半球(也可以形成圆形)接合形成的封闭区域。

调用该方法时,需要通过 bufferAnalyst3DParameter 指定缓冲参数BufferAnalyst3DParameter 对象,该对象用于指定几何对象缓冲所需的参数,如缓冲端点类型、缓冲半径、缓冲质量等。

示例:
以下代码示范了如何根据给三维线对象创建缓冲区。
public void CreatBufferForLine3D(Geometry3D geometry,PrjCoordSys prjCoordSys) {
              //设置缓冲参数
                  BufferAnalyst3DParameter bufferAnalyst3DParameter = new BufferAnalyst3DParameter();
                  bufferAnalyst3DParameter.setEndType (BufferEndType.ROUND);
              bufferAnalyst3DParameter.setBufferDistance(50) ;
              bufferAnalyst3DParameter.setBufferQuality(20)  ;

              //调用创建缓冲区方法
              Geometry3D geoModel = Geometrist3D.createBuffer(geometry,bufferAnalyst3DParameter,prjCoordSys);
    }

smooth

public static Point3Ds smooth(Point3Ds points,
                              int smoothness,
                              PrjCoordSys prjCoordsys)
对三维点串进行光滑处理。可以指定源投影坐标系。

该方法用于对三维点串进行光滑处理,可以将三维线对象的节点表示成三维点串,从而对线对象进行光滑。光滑方法为 B 样条法。更多介绍,请参阅 Generalization3D 类的 smooth 方法。

参数:
points - 指定的三维点串。
smoothness - 指定的光滑系数。有效范围为大于等于 2,设置为小于 2 的值会抛出异常。光滑系数越大,点串越光滑。建议取值范围为[2,10]。
prjCoordsys - 指定的源投影坐标系。当源投影为地理坐标系时,需要进行投影转换之后进行光滑处理。
返回:
进行光滑处理后的三维点串。
从以下版本开始:
SuperMap iObjects Java 7.0.0

resample

public static Geometry3D resample(Geometry3D geometry,
                                  double tolerance,
                                  PrjCoordSys prjCoordsys)
对三维几何对象进行重采样。可以指定源投影坐标系。目前支持三维线对象。

该方法用于对三维几何对象(目前仅支持三维线对象)进行重采样。采用的重采样方法为“光栏法”,具体介绍请参见 ResampleType.RTBend 的介绍。

有关重采样的介绍,还可参阅 Generalization3D 类的 resample 方法。

参数:
geometry - 指定的三维几何对象,目前支持三维线对象。
tolerance - 指定的重采样容限。单位为米。重采样距离可设置为大于 0 的浮点型数值,设置的重采样距离越大,采样结果数据越简化。
prjCoordsys - 指定的源投影坐标系。当源投影为地理坐标系时,需要进行投影转换之后进行重采样处理。
返回:
进行重采样处理后的三维几何对象。
从以下版本开始:
SuperMap iObjects Java 7.0.0

subDivisionLine

public static GeoLine3D subDivisionLine(GeoLine3D srcGeoLine3D,
                                        boolean isLonLat,
                                        double distance)
三维线根据给定长度进行插值加密。


parallelLine

public static GeoLine3D parallelLine(GeoLine3D geoLine3D,
                                     boolean bLonlat,
                                     java.lang.Double dDistance)
三维线平移;平移distance < 0,平行线在线段方向的右侧;平移distance > 0,平行线在线段方向的左侧,线段方向是构成点的点序方向。

参数:
bLonlat - geoLine3D是否是经纬度数据,决定平移距离单位
dDistance - 平移距离;bLonlat为true,单位为度;bLonlat为false,单位为米。