类 Geometrist3D
- java.lang.Object
-
- com.supermap.realspace.spatialanalyst.Geometrist3D
-
public class Geometrist3D extends Object
三维几何基本运算类。目前提供三维线的光滑和重采样处理。- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
-
-
方法概要
所有方法 静态方法 具体方法 限定符和类型 方法和说明 static ArrayList<LocationInfo>closestPoints(GeoPoint3D point, Geometry3D geometry, boolean isLonLat)计算三维点到三维对象的最近距离及最近点static Geometry3DcreateBuffer(Geometry3D geometry, BufferAnalyst3DParameter bufferAnalyst3DParameter, PrjCoordSys prjCoordSys)对三维点、线几何对象做缓冲区。static Geometry3Derase(Geometry3D geometry3D, Geometry3D eraseGeometry3D)三维体对象擦除运算,即在被操作对象上擦除掉与操作对象相重合的部分。static booleanhasIntersection(Geometry3D geometry3D, Geometry3D intersectGeometry3D)判断两个三维几何对象是否相交。static Geometry3Dintersect(Geometry3D geometry3D, Geometry3D intersectGeometry3D)三维体对象求交运算,即求算并返回两个三维体对象的交集。static GeoLine3DparallelLine(GeoLine3D geoLine3D, boolean bLonlat, Double dDistance)三维线平移;平移distance < 0,平行线在线段方向的右侧;平移distance > 0,平行线在线段方向的左侧,线段方向是构成点的点序方向。static Geometry3Dresample(Geometry3D geometry, double tolerance, PrjCoordSys prjCoordsys)对三维几何对象进行重采样。static Point3Dssmooth(Point3Ds points, int smoothness, PrjCoordSys prjCoordsys)对三维点串进行光滑处理。static GeoLine3DsubDivisionLine(GeoLine3D srcGeoLine3D, boolean isLonLat, double distance)三维线根据给定长度进行插值加密。static Geometry3Dunion(Geometry3D geometry3D, Geometry3D unionGeometry3D)三维体对象合并运算,即将两个具有重叠体积的三维体对象合并为一个三维体对象并返回。static Geometry3DxOR(Geometry3D geometry3D, Geometry3D xorGeometry3D)三维体对象对称差(异或)运算,即对两个三维体对象进行交集取反操作,返回两对象去除交集后合并的结果。
-
-
-
方法详细资料
-
union
public static Geometry3D union(Geometry3D geometry3D, Geometry3D unionGeometry3D)
三维体对象合并运算,即将两个具有重叠体积的三维体对象合并为一个三维体对象并返回。该操作将两个具有公共体积的三维体合并为一个三维体,并返回为一个 GeoModel 类型的
Geometry3D对象。在进行三维体合并运算时,注意以下要点:
-
仅支持三维体对象,包括
GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及GeoModel(三维模型)。 -
参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。
建议在对三维体,尤其是三维模型(
GeoModel),进行有效性检查后再进行擦除运算。 - 两个三维体对象不具有公共体积时,不能合并,返回 null。另外,可使用
hasIntersection方法判断两个三维体是否相交。 - 坐标系?投影?
- 参数:
geometry3D- 指定的参与合并的第一个三维体对象。unionGeometry3D- 指定的参与合并的第二个三维体对象。- 返回:
- 合并后的三维体对象。
- 抛出:
NullPointerException- 如果 geometry3D 或 intersectGeometry3D 不闭合
-
-
intersect
public static Geometry3D intersect(Geometry3D geometry3D, Geometry3D intersectGeometry3D)
三维体对象求交运算,即求算并返回两个三维体对象的交集。该操作计算两个三维体的公共体积部分,并返回为一个 GeoModel 类型的
Geometry3D对象。在进行三维体相交运算时,注意以下要点:
-
仅支持三维体对象,包括
GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及GeoModel(三维模型)。 -
参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。
建议在对三维体,尤其是三维模型(
GeoModel),进行有效性检查后再进行擦除运算。 - 两个三维体对象不具有公共体积时,求交结果为 null。另外,可使用
hasIntersection方法判断两个三维体是否相交。 - 坐标系?投影?
- 参数:
geometry3D- 指定的参与求交的第一个三维体对象。intersectGeometry3D- 指定的参与求交的第二个三维体对象。- 返回:
- 两对象的交集部分,是一个三维体对象。
- 抛出:
NullPointerException- 如果 geometry3D 或 intersectGeometry3D 不闭合
-
-
erase
public static Geometry3D erase(Geometry3D geometry3D, Geometry3D eraseGeometry3D)
三维体对象擦除运算,即在被操作对象上擦除掉与操作对象相重合的部分。该操作在一个三维体上剔除其与另一个三维体的公共体积部分,并返回为一个 GeoModel 类型的
Geometry3D对象。在进行三维体擦除运算时,注意以下要点:
-
仅支持三维体对象,包括
GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及GeoModel(三维模型)。 -
参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。
建议在对三维体,尤其是三维模型(
GeoModel),进行有效性检查后再进行擦除运算。 - 被操作三维体与操作三维体对象不具有公共体积时,该运算返回原被操作三维体对象;如果操作三维体完全包含被操作三维体,该运算返回 null。
- 坐标系?投影?
- 参数:
geometry3D- 指定的被操作对象。eraseGeometry3D- 指定的操作对象。- 返回:
- 对被操作对象进行擦除后的三维几何对象。
- 抛出:
NullPointerException- 如果 geometry3D 或 eraseGeometry3D 不闭合
-
-
xOR
public static Geometry3D xOR(Geometry3D geometry3D, Geometry3D xorGeometry3D)
三维体对象对称差(异或)运算,即对两个三维体对象进行交集取反操作,返回两对象去除交集后合并的结果。该操作从两个三维体的并集中将二者的交集剔除,并返回为一个 GeoModel 类型的
Geometry3D对象。在进行三维体对称差运算时,注意以下要点:
-
仅支持三维体对象,包括
GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及GeoModel(三维模型)。 -
参与该运算的三维体必须是闭合的。如果不闭合,将抛出异常。
建议在对三维体,尤其是三维模型(
GeoModel),进行有效性检查后再进行擦除运算。 - 两个三维体对象不具有公共体积时,对称差的结果是将二者作为子对象的一个复杂三维体对象。另外,可使用
hasIntersection方法判断两个三维体是否相交。 - 坐标系?投影?
- 参数:
geometry3D- 指定的参与对称差的第一个三维体对象。xorGeometry3D- 指定的参与对称差的第二个三维体对象。- 返回:
- 对两对象去除交集后合并的结果,是一个三维体对象。
- 抛出:
NullPointerException- 如果 geometry3D 或 intersectGeometry3D 不闭合
-
-
hasIntersection
public static boolean hasIntersection(Geometry3D geometry3D, Geometry3D intersectGeometry3D)
判断两个三维几何对象是否相交。该方法用于判断两个三维体是否相交,或三维线与三维体是否相交。
两个三维体相交的判断依据是二者具有公共的体积。二者仅共用一个顶点或一条边或一个面都不构成相交。
三维线必须穿过三维体才构成相交。
在判断两个三维几何对象是否相交时,注意以下要点:
-
支持三维体对象和三维线对象。三维几何体包括
GeoBox(长方体)、GeoCone(圆锥体)、GeoSphere(球体)、GeoHemiSphere(半球体)、GeoCylinder(圆台)、GeoEllipsoid(椭球体)、GeoPieCylinder(饼台)、GeoPyramid(四棱锥)等三维规则几何体,以及GeoModel(三维模型)。可以检查两个三维体是否有交叠,或检查一个三维线对象与一个三维体对象是否相交。
-
检查两个三维体是否相交时,要求三维体必须是闭合的。如果不闭合,将抛出异常。
建议在对三维体,尤其是三维模型(
GeoModel),进行有效性检查后再进行相交判断。 - 坐标系?投影?
- 参数:
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,单位为米。
-
closestPoints
public static ArrayList<LocationInfo> closestPoints(GeoPoint3D point, Geometry3D geometry, boolean isLonLat)
计算三维点到三维对象的最近距离及最近点- 参数:
point- 三维点对象geometry- 待查询几何对象几何,支持三维线、三维面及三维模型对象。isLonLat- 是否为经纬度,为模型对象时该参数不起作用- 返回:
- 点距离几何对象最小距离、点位及及对应对象ID
geometry 和 point坐标需一致
- 从以下版本开始:
- 12.0.0.0
-
-
Copyright © 2021–2025 SuperMap. All rights reserved.