com.supermap.realspace.spatialanalyst

类 Geometrist3D



  • public class Geometrist3D
    extends Object
    三维几何基本运算类。目前提供三维线的光滑和重采样处理。
    从以下版本开始:
    SuperMap iObjects Java 7.0.0
    • 方法详细资料

      • 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 - 指定的参与合并的第二个三维体对象。
        返回:
        合并后的三维体对象。
        抛出:
        NullPointerException - 如果 geometry3D 或 intersectGeometry3D 不闭合
      • 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 - 指定的参与求交的第二个三维体对象。
        返回:
        两对象的交集部分,是一个三维体对象。
        抛出:
        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 - 指定的操作对象。
        返回:
        对被操作对象进行擦除后的三维几何对象。
        抛出:
        NullPointerException - 如果 geometry3D 或 eraseGeometry3D 不闭合
      • 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 - 指定的参与对称差的第二个三维体对象。
        返回:
        对两对象去除交集后合并的结果,是一个三维体对象。
        抛出:
        NullPointerException - 如果 geometry3D 或 intersectGeometry3D 不闭合
      • 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。
        抛出:
        NullPointerException - 当判断两个三维体是否相交时象,如果 geometry3D 或 intersectGeometry3D 不闭合
      • 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
      • 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
      • 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);
            }
      • subDivisionLine

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

        public static GeoLine3D parallelLine(GeoLine3D geoLine3D,
                                             boolean bLonlat,
                                             Double dDistance)
        三维线平移;平移distance < 0,平行线在线段方向的右侧;平移distance > 0,平行线在线段方向的左侧,线段方向是构成点的点序方向。
        参数:
        bLonlat - geoLine3D是否是经纬度数据,决定平移距离单位
        dDistance - 平移距离;bLonlat为true,单位为度;bLonlat为false,单位为米。

Copyright © 2021–2024 SuperMap. All rights reserved.