类 Geometrist
- java.lang.Object
-
- com.supermap.data.Geometrist
-
public class Geometrist extends Object
基本几何运算类。该类有两个用途,一是用来判断两个几何对象间的空间位置关系,例如:判断两个几何对象是分离还是包含;二是对几何对象进行几何运算,例如对几何对象进行裁剪, 相交等操作。
目前版本支持的操作有:裁剪,相交,擦除,合并,对称差,更新和同一。不同的操作对被操作几何对象和操作几何对象要求的类型不同,使用时应注意。
注意:一.该类所给出的图示均为示意图,不包含该类空间位置关系或操作的所有类型。在空间位置关系判断的图示中橘黄色代表搜索图层,绿色代表被搜索图层; 在几何运算的图示中,深蓝色代表被操作几何对象,浅蓝色代表操作几何对象。二.基本几何运算类不支持拓扑关系出错的输入数据,如自相交、自重叠等。
-
-
方法概要
所有方法 静态方法 具体方法 已过时的方法 限定符和类型 方法和说明 static int[]
aggregatePoints(Point2Ds points, PrjCoordSys prjCoordSys, double distance, Unit unit, int minPilePointCount)
对点集合进行密度聚类,返回每个点所属的聚类类别。static GeoRegion[]
aggregatePointsToRegions(Point2Ds points, PrjCoordSys prjCoordSys, double distance, Unit unit, int minPilePointCount)
对点集进行密度聚类,返回聚类后的面对像。static GeoRegion[]
aggregatePolygons(GeoRegion[] sourceRegions, AggregatePolygonParameter aggregatePolygonParameter, PrjCoordSys prjCoordSys)
对面对象进行聚合。static boolean
canContain(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否包含被搜索几何对象。static boolean
canContain(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
static Geometry
clip(Geometry geometry, Geometry clipGeometry)
生成被操作对象经过操作对象裁剪后的几何对象。static Geometry
clip(Geometry geometry, Geometry clipGeometry, double tolerance)
生成被操作对象经过操作对象裁剪后的几何对象。static Geometry
clip(Geometry geometry, Rectangle2D clipRectangle)
生成被操作几何对象经过矩形对象裁剪后的几何对象。static Point2Ds
closestPoint(Geometry geometry1, Geometry geometry2)
求两个几何对象最短距离对应的两端点static GeoRegion
computeConcaveHull(Point2Ds points, double angle)
计算点集的凹闭包。static GeoRegion
computeConcaveHull(Point2Ds points, double angle, SteppedListener... listeners)
static GeoRegion
computeConvexHull(Geometry geometry)
计算几何对象的凸闭包,即最小外接多边形。static GeoRegion
computeConvexHull(Point2Ds points)
计算点集的凸闭包,即最小外接多边形。static GeoArc
computeFillet(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, double radius)
计算线与线的倒圆角,返回倒圆角所对应的弧段。static double
computeGeodesicArea(Geometry geometry, PrjCoordSys prjCoordSys)
计算测地线面积。static double
computeGeodesicDistance(Point2Ds points, double majorAxis, double flatten)
计算测地线的长度。static GeoLine
computeGeodesicLine(Point2D startPoint, double angle, double distance, GeodesicLineParameter parameter)
根据指定起始点、方位角度以及距离计算测地线,返回结果线对象。static GeoLine
computeGeodesicLine(Point2D startPoint, Point2D endPoint, GeodesicLineParameter parameter)
根据指定起始终止点计算测地线,返回结果线对象。static double
computeLength(GeoLine3D line3D, PrjCoordSys prjCoordSys)
计算三维线长度。static GeoLine
computeParallel(GeoLine geoLine, double distance)
根据距离求已知折线的平行线,返回平行线。static GeoLine
computeParallel(Point2D point, Point2D startPoint, Point2D endPoint)
求经过指定点与已知直线平行的直线。static GeoLine
computePerpendicular(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线的垂线。static Point2D
computePerpendicularPosition(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线的垂足。static Point3D
computePerpendicularPosition(Point3D point, Point3D startPoint, Point3D endPoint)
计算已知三维点到已知三维线的垂足。static Point2D[]
createRandomPoints(Geometry sourceGeometry, int randomNumber, double minDistance)
在指定的线要素沿线或面要素内创建随机点。static GeoRegion[]
createStripMapPages(GeoLine srcLine, Geometry[] barrierGeos, double aLengthAlongTheLine, double aLengthPerpendicularToTheLine)
创建带状分幅页面。static double
distance(Geometry geometry1, Geometry geometry2)
求两个几何对象之间的距离。static double
distanceToLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线段的距离。static double
distanceToLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
计算已知三维点到已知三维线段的距离。static GeoRegion[]
dividePolygon(GeoRegion dividedPolygon, DividePolygonParameter parameter, PrjCoordSys prjCoordSys)
用于国土宗地数据的按面积分割,比如,从一块大的宗地中,分割出一块10亩的地块出来,也可以将整块宗地分割为10份,每份的面积都相同。static Geometry
erase(Geometry geometry, Geometry eraseGeometry)
在被操作对象上擦除掉与操作对象相重合的部分。static Geometry
erase(Geometry geometry, Geometry eraseGeometry, double tolerance)
在被操作对象上擦除掉与操作对象相重合的部分。static int[]
geometriesContain(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
static int[]
geometriesIntersect(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
static int[]
geometriesWithin(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
static Point2D
getCentroid(GeoRegion geoRegion)
获取指定面的质心点static double
getTolerance(PrjCoordSys prjCoordSys)
计算坐标系默认容限。static boolean
hasAreaIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断对象是否面积相交,查询对象和目标对象至少有一个对象是面对象,相交的结果不包括仅接触的情形。static boolean
hasCommonLine(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否与被搜索几何对象有公共线段。static boolean
hasCommonPoint(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否与被搜索几何对象有共同节点。static boolean
hasCross(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否穿越被搜索几何对象。static boolean
hasHollow(Geometry geometry)
已过时。判断指定的面对象是否包含有洞类型的子对象。static boolean
HasHollow(Geometry geometry)
已过时。static boolean
hasIntersection(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象与搜索几何对象是否有面积相交。static boolean
hasIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象与搜索几何对象是否有面积相交。static boolean
hasOverlap(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象部分重叠。static boolean
hasOverlap(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象是否与搜索几何对象部分重叠。static boolean
hasTouch(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象的边界是否与搜索几何对象的边界相触。static boolean
hasTouch(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象的边界是否与搜索几何对象的边界相触。static Geometry
identity(Geometry geometry, Geometry identityGeometry)
对被操作对象进行同一操作。static Geometry
identity(Geometry geometry, Geometry identityGeometry, double tolerance)
对被操作对象进行同一操作。static Geometry
intersect(Geometry geometry1, Geometry geometry2)
对两个几何对象求交,返回两个几何对象的交集。static Geometry
intersect(Geometry geometry1, Geometry geometry2, double tolerance)
对两个几何对象求交,返回两个几何对象的交集。static Point2D
intersectLine(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, boolean isExtended)
返回两条线段(直线)的交点。static Point3D
intersectLineSegment(Point3D startPoint1, Point3D endPoint1, Point3D startPoint2, Point3D endPoint2, double tolerance)
返回两条三维线段的交点。static Point2D[]
intersectPolyLine(Point2Ds points1, Point2Ds points2)
返回两条折线的交点。static boolean
isDisjointed(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象分离。static boolean
isDisjointed(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
static boolean
isIdentical(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象完全相等。static boolean
isIdentical(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象是否与搜索几何对象完全相等。static int
isIntersectRegionWithRect(Geometry geometry, Rectangle2D rectClipper, double dInterval)
矩形裁剪面,并返回两者的相互空间位置关系,加入了容限判断。static boolean
isLeft(Point2D point, Point2D startPoint, Point2D endPoint)
判断点是否在线的左侧。static boolean
isOnSameSide(Point2D point1, Point2D point2, Point2D startPoint, Point2D endPoint)
判断两点是否在线的同一侧。static boolean
isParallel(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
判断两条线是否平行。static boolean
isPerpendicular(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
判断两条直线是否垂直。static boolean
isPointOnLine(Point2D point, Point2D startPoint, Point2D endPoint, boolean isExtended)
判断已知点是否在已知线段(直线)上,点在线上返回 true, 否则返回 false。static boolean
isPointOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
判断已知三维点是否在已知三维线段上,在线段上返回 true, 否则返回 false。static boolean
isProjectOnLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
判断已知点到已知线段的垂足是否在该线段上,如果在,返回 true,否则返回 false。static boolean
isProjectOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
判断已知三维点到已知三维线段的垂足是否在该三维线段上,如果在,返回 true,否则返回 false。static boolean
isRight(Point2D point, Point2D startPoint, Point2D endPoint)
判断点是否在线的右侧。static boolean
isSegmentIntersect(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
static boolean
isWithin(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否在被搜索几何对象内。static boolean
isWithin(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断搜索几何对象是否在被搜索几何对象内。static double[]
linearFitting(Point2Ds points, int degree)
线性拟合。static Point2D
nearestPointToVertex(Point2D vertex, Geometry geometry)
从几何对象(目前仅支持线对象)上找一点与给定的点距离最近。static Geometry
orthogonalPolygonFitting(Geometry sourceGeometry, double widthThreshold, double heightThreshold)
面对象的直角多边形拟合。static GeoRegion
regularizeBuildingFootprint(GeoRegion sourceRegion, RegularizeParameter regularizeParameter, PrjCoordSys prjCoordSys)
对面对象进行建筑物规则化。static Geometry
resample(Geometry geometry, double tolerance)
已过时。static Geometry
resample(Geometry geometry, ResampleType resampleType, double tolerance)
对几何对象进行重采样。static GeoRegion[]
resample(GeoRegion[] sourceRegions, ResampleType resampleType, double tolerance)
对面对象数组进行重采样。static Point2Ds
smooth(Point2Ds points, int smoothness)
对指定的点串对象进行光滑处理。static PointMs
smooth(PointMs points, int smoothness)
对指定的路由点串对象进行光滑处理。static GeoLine[]
splitLine(GeoLine sourceLine, Geometry splitGeometry, double tolerance)
使用点、线或面对象对线对象进行分割(打断)。static GeoLineM[]
splitLineM(GeoLineM sourceLineM, Geometry splitGeometry, double tolerance)
使用点、线或面对象对路由线对象进行分割(打断)。static boolean
splitRegion(GeoRegion sourceRegion, Geometry splitGeometry, GeoRegion targetGeoRegion1, GeoRegion targetGeoRegion2)
用线或面几何对象分割面几何对象。static Geometry
union(Geometry geometry1, Geometry geometry2)
对两个对象进行合并操作。static Geometry
union(Geometry geometry1, Geometry geometry2, double tolerance)
对两个对象进行合并操作。static Geometry
update(Geometry geometry, Geometry updateGeometry)
对被操作对象进行更新操作。static Geometry
update(Geometry geometry, Geometry updateGeometry, double tolerance)
对被操作对象进行更新操作。static Geometry
xOR(Geometry geometry1, Geometry geometry2)
对两个对象进行异或运算。static Geometry
xOR(Geometry geometry1, Geometry geometry2, double tolerance)
对两个对象进行异或运算。static Geometry
zoom(Geometry sourceGeometry, Point2D centerPoint, double scaleX, double scaleY)
几何对象的比例变换(缩放),支持点、线、面。
-
-
-
方法详细资料
-
isIdentical
public static boolean isIdentical(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象完全相等。即几何对象完全重合、对象节点数目相等,正序或逆序对应的坐标值相等。注意:
- 被搜索几何对象与搜索几何对象的类型必须相同;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。- 返回:
- 两个对象完全相等返回 true;否则返回 false。
-
isIdentical
public static boolean isIdentical(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象是否与搜索几何对象完全相等。即几何对象完全重合、对象节点数目相等,正序或逆序对应的坐标值相等,支持设置节点容限。- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。tolerance
- 节点容限值。- 返回:
- 两个对象完全相等返回 true;否则返回 false。
- 另请参阅:
Geometrist.isIdentical(Geometry, Geometry)
-
isDisjointed
public static boolean isDisjointed(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象分离。分离返回 true。注意:
- 搜索几何对象和被搜索几何对象分离,即无任何交集;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。- 返回:
- 两个几何对象分离返回 true;否则返回 false。
-
isDisjointed
public static boolean isDisjointed(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
-
hasIntersection
public static boolean hasIntersection(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象与搜索几何对象是否有面积相交。相交返回 true。注意:
- 被搜索几何对象和搜索几何对象必须有一个为面对象;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。- 返回:
- 两个几何对象有面积相交返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasIntersection
public static boolean hasIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象与搜索几何对象是否有面积相交。相交返回 true。支持设置节点容限。- 参数:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。tolerance
- 节点容限值。- 返回:
- 两个几何对象有面积相交返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasTouch
public static boolean hasTouch(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象的边界是否与搜索几何对象的边界相触。相触时搜索几何对象和被搜索几何对象的内部交集为空。注意:
- 点与点不存在边界接触的情况;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。- 返回:
- 被搜索几何对象的边界与搜索几何对象边界相触返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasTouch
public static boolean hasTouch(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象的边界是否与搜索几何对象的边界相触。相触时搜索几何对象和被搜索几何对象的内部交集为空。支持设置节点容限。- 参数:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。tolerance
- 节点容限值。- 返回:
- 被搜索几何对象的边界与搜索几何对象边界相触返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasOverlap
public static boolean hasOverlap(Geometry geometrySearch, Geometry geometryTarget)
判断被搜索几何对象是否与搜索几何对象部分重叠。有部分重叠则返回 true。注意:
- 点与任何一种几何对象都不存在部分重叠的情况;
- 被搜索几何对象与搜索几何对象的维数要求相同,即只可以是线查询线或者面查询面;
- 该关系适合的几何对象类型:
-
搜索几何对象:线、面;
-
被搜索几何对象:线、面。
- 参数:
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。- 返回:
- 被搜索几何对象与搜索几何对象部分重叠返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasOverlap
public static boolean hasOverlap(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断被搜索几何对象是否与搜索几何对象部分重叠。有部分重叠则返回 true。支持设置节点容限。- 参数:
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。tolerance
- 节点容限值。- 返回:
- 被搜索几何对象与搜索几何对象部分重叠返回 true;否则返回 false。
- 示范代码:
- 请参见
Geometrist.computeConvexHull()
方法的示例。
-
hasCross
public static boolean hasCross(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否穿越被搜索几何对象。穿越则返回 true。注意,如果两个几何对象存在穿越关系则:
- 搜索几何对象内部与被搜索几何对象的内部的交集不为空且搜索几何对象的内部与被搜索几何对象的外部的交集不为空。
- 被搜索几何对象为线时,搜索几何对象内部与被搜索几何对象的内部的交集不为空但是边界交集为空;
- 该关系适合的几何对象类型:
-
搜索几何对象:线;
-
被搜索几何对象:线、面。
- 参数:
geometrySearch
- 搜索几何对象,只支持线类型。geometryTarget
- 被搜索几何对象,支持线、面类型。- 返回:
- 搜索几何对象穿越被搜索对象返回 true;否则返回 false。
-
isWithin
public static boolean isWithin(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否在被搜索几何对象内。如果在则返回 true。注意:
- 线查询点,面查询线或面查询点都不存在 Within 情况;
- 与 CanContain 是逆运算;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。- 返回:
- 搜索几何对象在被搜索几何对象内返回 true;否则返回 false。
- 另请参阅:
Geometrist.canContain(Geometry,Geometry)
-
isWithin
public static boolean isWithin(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断搜索几何对象是否在被搜索几何对象内。如果在则返回 true。支持设置节点容限。- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。tolerance
- 节点容限值。- 返回:
- 搜索几何对象在被搜索几何对象内返回 true;否则返回 false。
- 另请参阅:
Geometrist.canContain(Geometry,Geometry)
-
canContain
public static boolean canContain(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否包含被搜索几何对象。包含则返回 true。注意,如果存在包含关系,则:
- 搜索几何对象的外部和被搜索几何对象的内部的交集为空;
- 两个几何对象的内部交集不为空或者搜索几何对象的边界与被搜索几何对象的内部交集不为空;
- 点查线,点查面,线查面,不存在包含情况;
- 与 isWithin 是逆运算;
- 该关系适合的几何对象类型:
-
搜索几何对象:点、线、面;
-
被搜索几何对象:点、线、面。
- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。- 返回:
- 搜索几何对象包含被搜索几何对象返回 true;否则返回 false。
- 另请参阅:
Geometrist.isWithin(Geometry,Geometry)
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
canContain
public static boolean canContain(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
-
hasCommonPoint
public static boolean hasCommonPoint(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否与被搜索几何对象有共同节点。有共同节点返回 true。- 参数:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。- 返回:
- 搜索几何对象与被搜索几何对象有共同节点返回 true;否则返回 false。
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
hasCommonLine
public static boolean hasCommonLine(Geometry geometrySearch, Geometry geometryTarget)
判断搜索几何对象是否与被搜索几何对象有公共线段。有公共线段返回 true。- 参数:
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。- 返回:
- 搜索几何对象与被搜索几何对象有公共线段返回 true;否则返回 false。
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
clip
public static Geometry clip(Geometry geometry, Geometry clipGeometry)
生成被操作对象经过操作对象裁剪后的几何对象。注意:
- 被操作几何对象只有落在操作几何对象内的那部分才会被输出为结果几何对象;
- Clip 与 Intersect 在空间处理上是一致的,不同在于对结果几何对象属性的处理,Clip 分析只是用来做裁剪,结果几何对象只保留被操作几何对象的非系统字段,而 Intersect 求交分析的结果则可以根据字段设置情况来保留两个几何对象的字段。
- 该操作适合的几何对象类型:
-
操作几何对象:面;
-
被操作几何对象:线、面。
- 参数:
geometry
- 被操作几何对象,支持线和面类型。clipGeometry
- 操作几何对象,必须是面对象。- 返回:
- 裁剪操作后的几何对象。
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
clip
public static Geometry clip(Geometry geometry, Geometry clipGeometry, double tolerance)
生成被操作对象经过操作对象裁剪后的几何对象。支持设置节点容限。- 参数:
geometry
- 被操作几何对象,支持线和面类型。clipGeometry
- 操作几何对象,必须是面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 裁剪操作后的几何对象。
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
clip
public static Geometry clip(Geometry geometry, Rectangle2D clipRectangle)
生成被操作几何对象经过矩形对象裁剪后的几何对象。被操作几何对象只有落在矩形对象内的那部分才会被输出为结果几何对象。
- 参数:
geometry
- 被操作的几何对象,支持线和面类型。clipRectangle
- 用于裁剪的二维矩形。- 返回:
- 裁剪结果对象。
-
hasHollow
public static boolean hasHollow(Geometry geometry)
已过时。 判断指定的面对象是否包含有洞类型的子对象。- 参数:
geometry
- 待判断的面对象,目前只支持二维面对象GeoRegion
。- 返回:
- 一个布尔值,用于判断面对象是否含有洞类型的子对象,包含则返回 true,否则返回 false。
-
HasHollow
@Deprecated public static boolean HasHollow(Geometry geometry)
已过时。
-
intersect
public static Geometry intersect(Geometry geometry1, Geometry geometry2)
对两个几何对象求交,返回两个几何对象的交集。目前仅支持线线求交、面面求交。目前仅支持面面求交和线线求交,如下图示所示:
注意,如果两对象有多个相离的公共部分,求交的结果将是一个复杂对象。
- 参数:
geometry1
- 进行求交运算的第一个几何对象,支持线、面类型。geometry2
- 进行求交运算的第二个几何对象,支持线、面类型。- 返回:
- 求交操作后的几何对象。
- 示范代码:
- 请参见
GeoRegion
类的示例。
-
intersect
public static Geometry intersect(Geometry geometry1, Geometry geometry2, double tolerance)
对两个几何对象求交,返回两个几何对象的交集。目前仅支持线线求交、面面求交。支持设置节点容限。- 参数:
geometry1
- 进行求交运算的第一个几何对象,支持线、面类型。geometry2
- 进行求交运算的第二个几何对象,支持线、面类型。tolerance
- 节点容限。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 求交操作后的几何对象。
-
erase
public static Geometry erase(Geometry geometry, Geometry eraseGeometry)
在被操作对象上擦除掉与操作对象相重合的部分。注意:
- 如果对象全部被擦除了,则返回 Null;
- 操作几何对象定义了擦除区域,凡是落在操作几何对象区域内的被操作几何对象都将被去除,而落在区域外的特征要素都将被输出为结果几何对象,与 Clip 运算相反;
- 该操作适合的几何对象类型:
-
操作几何对象:面;
-
被操作几何对象:点、线、面。
- 参数:
geometry
- 被操作几何对象,支持点、线、面对象类型。eraseGeometry
- 操作几何对象,必须为面对象类型。- 返回:
- 擦除操作后的几何对象。
-
erase
public static Geometry erase(Geometry geometry, Geometry eraseGeometry, double tolerance)
在被操作对象上擦除掉与操作对象相重合的部分。支持设置节点容限。- 参数:
geometry
- 被操作几何对象,支持点、线、面对象类型。eraseGeometry
- 操作几何对象,必须为面对象类型。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 擦除操作后的几何对象。
-
union
public static Geometry union(Geometry geometry1, Geometry geometry2)
对两个对象进行合并操作。进行合并后,两个面对象在相交处被多边形分割。注意:
- 进行求并运算的两个几何对象必须是同类型的,目前版本支持二维面、二维线以及三维线类型的合并。
- 该操作适合的几何对象类型:
-
操作几何对象:二维面、二维线、三维线;
-
被操作几何对象:二维面、二维线、三维线。
- 参数:
geometry1
- 被操作几何对象。geometry2
- 操作几何对象。- 返回:
- 合并操作后的几何对象。只支持生成简单线对象。
-
union
public static Geometry union(Geometry geometry1, Geometry geometry2, double tolerance)
对两个对象进行合并操作。进行合并后,两个面对象在相交处被多边形分割。支持设置节点容限,目前版本支持二维面、二维线以及三维线类型的合并。- 参数:
geometry1
- 被操作几何对象。geometry2
- 操作几何对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 合并操作后的几何对象。只支持生成简单线对象。
-
xOR
public static Geometry xOR(Geometry geometry1, Geometry geometry2)
对两个对象进行异或运算。即对于每一个被操作几何对象,去掉其与操作几何对象相交的部分,而保留剩下的部分。进行异或运算的两个几何对象必须是同类型的,只支持面面。
- 参数:
geometry1
- 被操作几何对象,只支持面类型。geometry2
- 操作几何对象,只支持面类型。- 返回:
- 进行异或运算的结果几何对象。
-
xOR
public static Geometry xOR(Geometry geometry1, Geometry geometry2, double tolerance)
对两个对象进行异或运算。即对于每一个被操作几何对象,去掉其与操作几何对象相交的部分,而保留剩下的部分。支持设置节点容限。- 参数:
geometry1
- 被操作几何对象,只支持面类型。geometry2
- 操作几何对象,只支持面类型。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 进行异或运算的结果几何对象。
-
update
public static Geometry update(Geometry geometry, Geometry updateGeometry)
对被操作对象进行更新操作。用操作几何对象替换与被操作几何对象的重合部分,是一个先擦除后粘贴的过程。操作对象和被操作对象必须都是面对象。- 参数:
geometry
- 被操作几何对象,即被更新的几何对象,必须为面对象。updateGeometry
- 操作几何对象,用于进行更新运算的几何对象,必须为面对象。- 返回:
- 更新操作后的几何对象。
-
update
public static Geometry update(Geometry geometry, Geometry updateGeometry, double tolerance)
对被操作对象进行更新操作。用操作几何对象替换与被操作几何对象的重合部分,是一个先擦除后粘贴的过程。操作对象和被操作对象必须都是面对象。支持设置节点容限。- 参数:
geometry
- 被操作几何对象,即被更新的几何对象,必须为面对象。updateGeometry
- 操作几何对象,用于进行更新运算的几何对象,必须为面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 更新操作后的几何对象。
-
identity
public static Geometry identity(Geometry geometry, Geometry identityGeometry)
对被操作对象进行同一操作。即操作执行后,被操作几何对象包含来自操作几何对象的几何形状。注意:
- 同一运算就是操作几何对象与被操作几何对象先求交,然后求交结果再与被操作几何对象求并的运算。
-
如果被操作几何对象为点类型,则结果几何对象为被操作几何对象;
-
如果被操作几何对象为线类型,则结果几何对象为被操作几何对象,但是与操作几何对象相交的部分将被打断;
-
如果被操作几何对象为面类型,则结果几何对象保留以被操作几何对象为控制边界之内的所有多边形,并且把与操作几何对象相交的地方分割成多个对象。
- 该操作适合的几何对象类型:
-
操作几何对象:面;
-
被操作几何对象:点、线、面。
- 参数:
geometry
- 被操作几何对象,支持点、线、面对象。identityGeometry
- 操作几何对象,必须为面对象。- 返回:
- 同一操作后的几何对象。
- 同一运算就是操作几何对象与被操作几何对象先求交,然后求交结果再与被操作几何对象求并的运算。
-
identity
public static Geometry identity(Geometry geometry, Geometry identityGeometry, double tolerance)
对被操作对象进行同一操作。即操作执行后,被操作几何对象包含来自操作几何对象的几何形状。支持设置节点容限。- 参数:
geometry
- 被操作几何对象,支持点、线、面对象。identityGeometry
- 操作几何对象,必须为面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。- 返回:
- 同一操作后的几何对象。
-
resample
@Deprecated public static Geometry resample(Geometry geometry, double tolerance)
已过时。
-
resample
public static Geometry resample(Geometry geometry, ResampleType resampleType, double tolerance)
对几何对象进行重采样。对几何对象重采样是按照一定规则剔除一些节点,以达到对数据进行简化的目的(如下图所示),其结果可能由于使用不同的重采样方法而不同。SuperMap 提供两种方法对几何对象进行重采样,分别为光栏法和道格拉斯-普克法。有关这两种方法的详细介绍,请参见
ResampleType
类。- 参数:
geometry
- 指定的要进行重采样的几何对象。支持线对象和面对象。resampleType
- 指定的重采样方法。tolerance
- 指定的重采样容限。请参见ResampleType
类。- 返回:
- 重采样后的几何对象。
-
distance
public static double distance(Geometry geometry1, Geometry geometry2)
求两个几何对象之间的距离。注意:几何对象的类型只能是点、线和面。这里的距离指的是两个几何对象边线间最短距离。例如:点到线的最短距离就是点到该线的垂直距离。
- 参数:
geometry1
- 第一个几何对象。geometry2
- 第二个几何对象。- 返回:
- 两个对象之间的距离。
- 示范代码:
Geometrist.computeConvexHull()
方法的示例。
-
closestPoint
public static Point2Ds closestPoint(Geometry geometry1, Geometry geometry2)
求两个几何对象最短距离对应的两端点- 参数:
geometry1
- 输入几何对象,支持二维点、线、面geometry2
- 输入几何对象,支持二维点、线、面- 返回:
- 返回两个几何对象最短距离对应的两端点
-
computeConvexHull
public static GeoRegion computeConvexHull(Point2Ds points)
计算点集的凸闭包,即最小外接多边形。返回一个简单凸多边形。- 参数:
points
- 点集。- 返回:
- 最小外接多边形。
-
computeConvexHull
public static GeoRegion computeConvexHull(Geometry geometry)
计算几何对象的凸闭包,即最小外接多边形。返回一个简单凸多边形。- 参数:
geometry
- 几何对象。- 返回:
- 最小外接多边形。
- 示范代码:
- 以下代码示范如何判断两个几何对象间的空间位置关系以及对几何对象进行几何运算。
public void computeConvexHullTest() { // 假设打开一个工作空间 <a href="Workspace.html">workspace</a> 对象,工作空间中存在一个数据源 // datasource 对象 // 从数据源中取出一个数据集 dataset // 取出 SmID 值分别等于88和101的记录,同时取出相应几何对象 DatasetVector dataset = (DatasetVector) datasource.getDatasets().get( "World"); Recordset recordSearch = dataset.query("SmID=101", CursorType.STATIC); Recordset recordTarget = dataset.query("SmID=88", CursorType.STATIC); GeoRegion geometrySearch = (GeoRegion) recordSearch.getGeometry(); GeoRegion geometryTarget = (GeoRegion) recordTarget.getGeometry(); // 计算几何对象的最小外接多边形 System.out.println(Geometrist.computeConvexHull(geometrySearch)); // 几何运算 System.out.println(Geometrist.clip(geometrySearch, geometryTarget)); System.out.println(Geometrist.canContain(geometrySearch, geometryTarget)); System.out .println(Geometrist.hasCommonLine(geometrySearch, geometryTarget)); System.out.println(Geometrist .hasCommonPoint(geometrySearch, geometryTarget)); System.out.println(Geometrist.hasIntersection(geometrySearch, geometryTarget)); System.out.println(Geometrist.hasOverlap(geometrySearch, geometryTarget)); System.out.println(Geometrist.hasTouch(geometrySearch, geometryTarget)); System.out.println(Geometrist.distance(geometrySearch, geometryTarget)); // 释放资源 recordTarget.dispose(); recordSearch.dispose(); }
-
splitRegion
public static boolean splitRegion(GeoRegion sourceRegion, Geometry splitGeometry, GeoRegion targetGeoRegion1, GeoRegion targetGeoRegion2)
用线或面几何对象分割面几何对象。注意:参数中的分割对象与被分割对象必须至少有两个交点,否则的话会分割失败。
- 参数:
sourceRegion
- 被分割的面对象。splitGeometry
- 用于分割的几何对象,可以是线或面几何对象。targetGeoRegion1
- 返回分割后的第一个面对象。targetGeoRegion2
- 返回分割后的第二个面对象。- 返回:
- 分割成功返回 true;否则返回 false。
-
computeFillet
public static GeoArc computeFillet(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, double radius)
计算线与线的倒圆角,返回倒圆角所对应的弧段。倒圆角用于计算与给定的两条线段均相切的圆弧。该方法中,参数 startPoint1 和 endPoint1 指点的两点构成第一条线段,startPoint2 和 endPoint2 指定的两点构成第二条线段,参数 radius 用于指定内切圆的半径。
如下图所示,作两条线段的公共内切圆,以两个切点为端点,靠近两线段交点的圆弧(图中橙色圆弧)即为计算倒圆角的结果。
注意:
- 参与计算的两条线必须为只有两个节点的简单线对象,二者(或延长线)有且仅有一个交点,且不能平行或在同一条直线上。
- 该方法只返回计算出的圆弧部分。通常,在实际应用中,在计算出倒圆角圆弧后,还会根据两切点的位置对原始线段进行修剪或延伸, 以使两线段与倒圆角圆弧衔接成为一个圆角。
- 参数:
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。radius
- 圆弧的半径。- 返回:
- 倒圆角所对应的弧段。
-
isParallel
public static boolean isParallel(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
判断两条线是否平行。- 参数:
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。- 返回:
- 判断两条线是否平行,平行返回 true;否则返回 false。
-
computeParallel
public static GeoLine computeParallel(Point2D point, Point2D startPoint, Point2D endPoint)
求经过指定点与已知直线平行的直线。- 参数:
point
- 直线外的任意一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。- 返回:
- 平行线。
-
computeParallel
public static GeoLine computeParallel(GeoLine geoLine, double distance)
根据距离求已知折线的平行线,返回平行线。- 参数:
geoLine
- 已知折线对象。distance
- 所求平行线间的距离。- 返回:
- 平行线。
-
isPerpendicular
public static boolean isPerpendicular(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
判断两条直线是否垂直。- 参数:
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。- 返回:
- 垂直返回 true;否则返回 false。
-
computePerpendicular
public static GeoLine computePerpendicular(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线的垂线。- 参数:
point
- 已知一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。- 返回:
- 垂线。
-
computePerpendicularPosition
public static Point2D computePerpendicularPosition(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线的垂足。- 参数:
point
- 已知一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。- 返回:
- 垂足。
-
isPointOnLine
public static boolean isPointOnLine(Point2D point, Point2D startPoint, Point2D endPoint, boolean isExtended)
判断已知点是否在已知线段(直线)上,点在线上返回 true, 否则返回 false。- 参数:
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。isExtended
- 是否将线段进行延长计算,如果 isExtended = true,就按直线计算,否则按线段计算。- 返回:
- 点在线上返回 true;否则返回 false。
-
intersectLine
public static Point2D intersectLine(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, boolean isExtended)
返回两条线段(直线)的交点。- 参数:
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。isExtended
- 是否将线段进行延长计算,如果 isExtended = true,就按直线计算,否则按线段计算。- 返回:
- 两条线段(直线)的交点。
-
computeGeodesicDistance
public static double computeGeodesicDistance(Point2Ds points, double majorAxis, double flatten)
计算测地线的长度。曲面上两点之间的短程线称为测地线。球面上的测地线即是大圆。
测地线又称“大地线”或“短程线”,是地球椭球面上两点间的最短曲线。在大地线上,各点的主曲率方向均与该点上曲面法线相合。它在圆球面上为大圆弧, 在平面上就是直线。在大地测量中,通常用大地线来代替法截线,作为研究和计算椭球面上各种问题。
测地线是在一个曲面上,每一点处测地曲率均为零的曲线。
- 参数:
points
- 构成测地线的经纬度坐标点串。majorAxis
- 测地线所在椭球体的长轴。flatten
- 测地线所在椭球体的扁率。- 返回:
- 测地线的长度。
-
computeGeodesicArea
public static double computeGeodesicArea(Geometry geometry, PrjCoordSys prjCoordSys)
计算测地线面积。如果prjCoordSys指定的坐标系是经纬度地理坐标系,则计算椭球测地线面积。 如果prjCoordSys指定的坐标系是GAUSS KRUGER Xian 1980 或 GAUSS KRUGER GCS2000 投影坐标系,则通过高斯反解计算椭球面积。 如果prjCoordSys指定的坐标系是其它投影坐标系,则仅计算面对象的几何面积。
注意:
使用该方法计算测地线面积,在通过 prjCoordSys 参数指定投影坐标系类型对象(
PrjCoordSys
)时,需要指定与几何对象坐标相匹配的真实坐标系类型,否则可能无法得到正确的计算结果。- 参数:
geometry
- 指定的需要计算测地线面积的 Geometry 对象。prjCoordSys
- 指定的投影坐标系类型。- 返回:
- 计算得到的结果面积值。
-
computeLength
public static double computeLength(GeoLine3D line3D, PrjCoordSys prjCoordSys)
计算三维线长度。如果prjCoordSys指定的坐标系是经纬度坐标系,则转换到以地球球心为原点的笛卡尔三维坐标系中计算,如果不是经纬度坐标系则直接计算几何长度。
prjCoordSys必须是与几何对象坐标值相匹配的坐标系,否则可能返回错误结果。
- 参数:
line3D
- 指定的需要计算长度的 GeoLine3D 对象。prjCoordSys
- 指定的坐标系类型。- 返回:
- 三维线的长度,单位为米。
-
intersectPolyLine
public static Point2D[] intersectPolyLine(Point2Ds points1, Point2Ds points2)
返回两条折线的交点。- 参数:
points1
- 构成第一条折线的点串。points2
- 构成第二条折线的点串。- 返回:
- 点串构成的折线的交点。
-
smooth
public static Point2Ds smooth(Point2Ds points, int smoothness)
对指定的点串对象进行光滑处理。有关光滑的更多内容,可以参考
smooth
方法的介绍。- 参数:
points
- 需要进行光滑处理的点串。smoothness
- 光滑系数。有效范围为大于等于2,设置为小于2的值会抛出异常。光滑系数越大,线对象或面对象边界的节点数越多,也就越光滑。 建议取值范围为[2,10]。- 返回:
- 光滑处理结果点串。
-
smooth
public static PointMs smooth(PointMs points, int smoothness)
对指定的路由点串对象进行光滑处理。有关光滑的更多内容,可以参考
smooth
方法的介绍。- 参数:
points
- 需要进行光滑处理的点串。smoothness
- 光滑系数。有效范围为大于等于2,设置为小于2的值会抛出异常。光滑系数越大,线对象或面对象边界的节点数越多,也就越光滑。 建议取值范围为[2,10]。- 返回:
- 光滑处理结果点串。
-
splitLine
public static GeoLine[] splitLine(GeoLine sourceLine, Geometry splitGeometry, double tolerance)
使用点、线或面对象对线对象进行分割(打断)。该方法可用于使用点、线、面对象对线对象进行打断或分割。下面以一个简单线对象对这三种情况进行说明。
-
点对象打断线对象
使用点对象对线对象进行打断,原线对象在点对象位置打断为两个线对象。如下图所示,使用点(黑色)对线(蓝色)进行打断,结果为两个线对象(红色线和绿色线 )。
-
线对象分割线对象
这种情况分割线(用于分割的线对象)会将操作线(被分割的线对象)分割为两个线对象。分割线为一条折线,可以是只包含两个端点的线段, 也可以是包含多个节点的折线。
当分割线为线段时,操作线将会在其与分割线的交点处被分割为两个线对象。如下图所示,图中黑色线为分割线,分割后原线对象被分为两个线对象(红色线和绿色线 )。
当分割线为折线时,可能与操作线有多个交点,此时会在所有交点处将操作线打断,然后按顺序将位于奇数和偶数次序的线段分别合并,产生两个线对象。也就是说, 使用折线分割线时,可能会产生复杂线对象。下图展示的就是这种情况,分割后,红色的线和绿色的线分别为一个复杂线对象。
-
面对象分割线对象
面对象分割线对象与线分割线类似,会在分割面和操作线的所有交点处将操作线打断,然后分别将位于奇数和偶数位置的线合并,产生两个线对象。 这种情况会产生至少一个复杂线对象。下图中,面对象(浅橙色)将线对象分割为红色和绿色两个复杂线对象。
注意:
1. 如果被分割的线对象为复杂对象,那么如果分割线经过子对象,则会将该子对象分割为两个线对象,因此,分割复杂线对象可能产生多个线对象。
2. 用于分割的线对象或者面对象如果有自相交,分割不会失败,但分割的结果可能不正确。因此,应尽量使用没有自相交的线或面对象来分割线。
- 参数:
sourceLine
- 待分割(打断)的线对象。splitGeometry
- 用于分割(打断)线对象的对象,支持点、线、面对象。tolerance
- 指定的容限,用于判断点对象是否在线上,若点到线的垂足距离大于该容限值,则认为用于打断的点对象无效,从而不执行打断。- 返回:
- 分割后的线对象数组。
-
-
splitLineM
public static GeoLineM[] splitLineM(GeoLineM sourceLineM, Geometry splitGeometry, double tolerance)
使用点、线或面对象对路由线对象进行分割(打断)。- 参数:
sourceLineM
- 待分割(打断)的线对象。splitGeometry
- 用于分割(打断)线对象的对象,支持点、线、面对象。tolerance
- 指定的容限,用于判断点对象是否在线上,若点到线的垂足距离大于该容限值,则认为用于打断的点对象无效,从而不执行打断。- 返回:
- 分割后的线对象数组。
-
isLeft
public static boolean isLeft(Point2D point, Point2D startPoint, Point2D endPoint)
判断点是否在线的左侧。- 参数:
point
- 指定的点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。- 返回:
- 一个布尔值,表示点是否在线的左侧。如果点在线的左侧,返回 true,否则返回 false。
-
isRight
public static boolean isRight(Point2D point, Point2D startPoint, Point2D endPoint)
判断点是否在线的右侧。- 参数:
point
- 指定的点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。- 返回:
- 一个布尔值,表示点是否在线的右侧。如果点在线的右侧,返回 true,否则返回 false。
-
isOnSameSide
public static boolean isOnSameSide(Point2D point1, Point2D point2, Point2D startPoint, Point2D endPoint)
判断两点是否在线的同一侧。- 参数:
point1
- 指定的一点。point2
- 指定的另一点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。- 返回:
- 一个布尔值,表示两点是否在线的同一侧。如果点在线的同一侧,返回 true,否则返回 false。
-
isProjectOnLineSegment
public static boolean isProjectOnLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
判断已知点到已知线段的垂足是否在该线段上,如果在,返回 true,否则返回 false。- 参数:
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。- 返回:
- 一个布尔值,表示点与线段的垂足是否在线段上。如果在,返回 true,否则返回 false。
-
distanceToLineSegment
public static double distanceToLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
计算已知点到已知线段的距离。- 参数:
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。- 返回:
- 点到线段的距离。如果点到线段的垂足不在线段上,则返回点到线段较近的端点的距离。
-
nearestPointToVertex
public static Point2D nearestPointToVertex(Point2D vertex, Geometry geometry)
从几何对象(目前仅支持线对象)上找一点与给定的点距离最近。- 参数:
vertex
- 指定的点。geometry
- 指定的几何对象。目前仅支持线对象。- 返回:
- 几何对象上与指定点距离最近的一点。
-
intersectLineSegment
public static Point3D intersectLineSegment(Point3D startPoint1, Point3D endPoint1, Point3D startPoint2, Point3D endPoint2, double tolerance)
返回两条三维线段的交点。- 参数:
startPoint1
- 第一条三维线段的起点。endPoint1
- 第一条三维线段的终点。startPoint2
- 第二条三维线段的起点。endPoint2
- 第二条三维线段的终点。tolerance
- 指定的容限。如果两条三维线段的空间距离小于或等于该值,则认为二者相交。- 返回:
- 两条三维线段的交点。 如果不相交,返回一个空的 GeoPoint3D 对象。
-
isPointOnLineSegment
public static boolean isPointOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
判断已知三维点是否在已知三维线段上,在线段上返回 true, 否则返回 false。- 参数:
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。- 返回:
- 点在线段上返回 true;否则返回 false。
-
isProjectOnLineSegment
public static boolean isProjectOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
判断已知三维点到已知三维线段的垂足是否在该三维线段上,如果在,返回 true,否则返回 false。- 参数:
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。- 返回:
- 一个布尔值,表示三维点与三维线段的垂足是否在三维线段上。如果在,返回 true,否则返回 false。
-
computePerpendicularPosition
public static Point3D computePerpendicularPosition(Point3D point, Point3D startPoint, Point3D endPoint)
计算已知三维点到已知三维线的垂足。- 参数:
point
- 已知三维点。startPoint
- 三维线上的一点。endPoint
- 三维线上的另一点。- 返回:
- 垂足。
-
distanceToLineSegment
public static double distanceToLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
计算已知三维点到已知三维线段的距离。- 参数:
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。- 返回:
- 三维点到三维线段的距离。如果点到线段的垂足不在线段上,则返回点到线段较近的端点的距离。
-
computeConcaveHull
public static GeoRegion computeConcaveHull(Point2Ds points, double angle)
计算点集的凹闭包。- 参数:
points
- 指定的点集。angle
- 凹包内最小角度。- 返回:
- 返回可以包含指定点集中所有点的凹多边形。
-
computeConcaveHull
public static GeoRegion computeConcaveHull(Point2Ds points, double angle, SteppedListener... listeners)
-
aggregatePointsToRegions
public static GeoRegion[] aggregatePointsToRegions(Point2Ds points, PrjCoordSys prjCoordSys, double distance, Unit unit, int minPilePointCount)
对点集进行密度聚类,返回聚类后的面对像。关于密度聚类,参考
aggregatePoints
。- 参数:
points
- 输入的点集合。prjCoordSys
- 点集合的空间参考坐标系,如果为null,则默认为平面坐标系。distance
- 密度聚类半径。unit
- 密度聚类半径的单位。如果空间参考坐标系prjCoordSys无效,此参数也无效。minPilePointCount
- 密度聚类点数目阈值,必须大于等于2。阈值越大表示能聚类为一簇的条件越苛刻。推荐值为4。- 返回:
- 聚类成功,返回每一簇点集聚集成的多边形,失败返回null。
- 从以下版本开始:
- SuperMap iObject Java 7.2.0
-
aggregatePoints
public static int[] aggregatePoints(Point2Ds points, PrjCoordSys prjCoordSys, double distance, Unit unit, int minPilePointCount)
对点集合进行密度聚类,返回每个点所属的聚类类别。对点集合进行空间位置的聚类,使用密度聚类方法 DBSCAN,它能将具有足够高密度的区域划分为簇,并可以在带有噪声的空间数据中发现任意形状的聚类。它定义簇为密度相连的点的最大集合。DBSCAN 使用阈值 e 和 MinPts 来控制簇的生成。其中,给定对象半径 e 内的区域称为该对象的 e一邻域。如果一个对象的 e一邻域至少包含最小数目 MinPtS 个对象,则称该对象为核心对象。给定一个对象集合 D,如果 P 是在 Q 的 e一邻域内,而 Q 是一个核心对象,我们说对象 P 从对象 Q 出发是直接密度可达的。DBSCAN 通过检查数据中每个点的 e-领域来寻找聚类,如果一个点 P 的 e-领域包含多于 MinPts 个点,则创建一个以 P 作为核心对象的新簇,然后,DBSCAN反复地寻找从这些核心对象直接密度可达的对象并加入该簇,直到没有新的点可以被添加。
- 参数:
points
- 输入的点集合。prjCoordSys
- 点集合的空间参考坐标系,如果为null,则默认为平面坐标系。distance
- 密度聚类半径。unit
- 密度聚类半径的单位。如果空间参考坐标系prjCoordSys无效,此参数也无效。minPilePointCount
- 密度聚类点数目阈值,必须大于等于2。阈值越大表示能聚类为一簇的条件越苛刻。推荐值为4。- 返回:
- 聚类成功返回每个点所属的聚类类别,从1开始,0为无效类别。
- 从以下版本开始:
- SuperMap iObject Java 7.2.0
-
dividePolygon
public static GeoRegion[] dividePolygon(GeoRegion dividedPolygon, DividePolygonParameter parameter, PrjCoordSys prjCoordSys)
用于国土宗地数据的按面积分割,比如,从一块大的宗地中,分割出一块10亩的地块出来,也可以将整块宗地分割为10份,每份的面积都相同。- 参数:
dividedPolygon
- 被分割的二维面对象,不能为空parameter
- 分割面参数类对象。prjCoordSys
- 被分割的二维面对象的空间参考坐标系,不支持地理坐标系。因为切割面对象需要按照面积进行切割,在经纬度下无法直接有效计算出面积, 必须转为投影系才能计算出面积,但转为投影系后数据会有较大的变形,导致最后结果可能存在错误。- 返回:
- 分割后得到的面对象数组。
-
computeGeodesicLine
public static GeoLine computeGeodesicLine(Point2D startPoint, Point2D endPoint, GeodesicLineParameter parameter)
根据指定起始终止点计算测地线,返回结果线对象。- 参数:
startPoint
- 输入的测地线起始点。endPoint
- 输入的测地线终止点。parameter
- 构造测点线的参数对象。详见(GeodesicLineParameter
)。- 返回:
- 构造测地线成功,返回测地线对象,否则返回null。
- 从以下版本开始:
- SuperMap iObject Java 8.0.2
-
computeGeodesicLine
public static GeoLine computeGeodesicLine(Point2D startPoint, double angle, double distance, GeodesicLineParameter parameter)
根据指定起始点、方位角度以及距离计算测地线,返回结果线对象。- 参数:
startPoint
- 输入的测地线起始点。angle
- 输入的测地线方位角。正负均可。distance
- 输入的测地线长度。单位为米。parameter
- 构造测点线的参数对象。详见(GeodesicLineParameter
)。- 返回:
- 构造测地线成功,返回测地线对象,否则返回null。
- 从以下版本开始:
- SuperMap iObject Java 8.0.2
-
isSegmentIntersect
public static boolean isSegmentIntersect(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
-
geometriesContain
public static int[] geometriesContain(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
-
geometriesWithin
public static int[] geometriesWithin(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
-
geometriesIntersect
public static int[] geometriesIntersect(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
-
isIntersectRegionWithRect
public static int isIntersectRegionWithRect(Geometry geometry, Rectangle2D rectClipper, double dInterval)
矩形裁剪面,并返回两者的相互空间位置关系,加入了容限判断。- 参数:
geometry
- 被裁剪多边形,不允许为NULLrectClipper
- 裁剪矩形,不允许为NULLdInterval
- 判断结点相等的容限- 返回:
- 0:相离,1:相交,2:矩形包含多边形,3:多边形包含矩形。
-
resample
public static GeoRegion[] resample(GeoRegion[] sourceRegions, ResampleType resampleType, double tolerance)
对面对象数组进行重采样。对面对象数组重采样是按照一定规则剔除一些节点,以达到对数据进行简化的目的(如下图所示),其结果可能由于使用不同的重采样方法而不同。SuperMap 提供两种方法对面对象数组进行重采样,分别为光栏法和道格拉斯-普克法。有关这两种方法的详细介绍,请参见
ResampleType
类。面对象数组重采样时,实质是对面对象的边界进行重采样。对于多个面对象的公共边界,会进行了拓扑预处理,只会对其中一个多边形的该公共边界重采样一次, 其他多边形的该公共边界会依据该多边形重采样的结果进行调整使之贴合,因此不会出现缝隙。
- 参数:
sourceRegions
- 指定的要进行重采样的面对象数组。resampleType
- 指定的重采样方法。请参见ResampleType
类。tolerance
- 指定的重采样容限。- 返回:
- 重采样后的面对象数组。
-
getTolerance
public static double getTolerance(PrjCoordSys prjCoordSys)
计算坐标系默认容限。- 参数:
prjCoordSys
- 指定的投影坐标系类型对象。- 返回:
- 返回指定的投影坐标系类型对象的默认容限值。
-
hasAreaIntersection
public static boolean hasAreaIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
判断对象是否面积相交,查询对象和目标对象至少有一个对象是面对象,相交的结果不包括仅接触的情形。支持点、线、面和文本对象。- 参数:
geometrySearch
- 查询对象geometryTarget
- 目标对象tolerance
- 节点容限- 返回:
- 两对象面积相交返回 true,否则为 false
-
zoom
public static Geometry zoom(Geometry sourceGeometry, Point2D centerPoint, double scaleX, double scaleY)
几何对象的比例变换(缩放),支持点、线、面。x方向上的比例变换:resultPoint.x = sourcePoint.x*dScalex +centerPoint.x*(1-dScalex)
y方向上的比例变换:resultPoint.y = sourcePoint.y*dScaley +centerPoint.y*(1-dScaley)
- 参数:
sourceGeometry
- 需变换的几何对象。centerPoint
- 缩放参考点。一般为几何对象中心点。scaleX
- x方向上的缩放系数,值小于1缩小,值大于1放大,等于1不变。scaleY
- y方向上的缩放系数,值小于1缩小,值大于1放大,等于1不变。- 返回:
- 成功返回true,失败返回false。
-
orthogonalPolygonFitting
public static Geometry orthogonalPolygonFitting(Geometry sourceGeometry, double widthThreshold, double heightThreshold)
面对象的直角多边形拟合。- 参数:
sourceGeometry
- 面几何对象。widthThreshold
- 节点到最小面积外接矩形的左右边界阈值。heightThreshold
- 节点到最小面积外接矩形的上下边界阈值。- 返回:
- 返回直角多边形。
-
regularizeBuildingFootprint
public static GeoRegion regularizeBuildingFootprint(GeoRegion sourceRegion, RegularizeParameter regularizeParameter, PrjCoordSys prjCoordSys)
对面对象进行建筑物规则化。- 参数:
sourceRegion
- 输入几何对象,必须为面对象。regularizeParameter
- 输入规则化参数。prjCoordSys
- 输入几何对象坐标系。- 返回:
- 返回规则化后的建筑物结果,失败返回null。
-
createRandomPoints
public static Point2D[] createRandomPoints(Geometry sourceGeometry, int randomNumber, double minDistance)
在指定的线要素沿线或面要素内创建随机点。- 参数:
sourceGeometry
- 输入几何对象,支持线和面。randomNumber
- 生成的随机点数目。minDistance
- 生成随机点之间的最小距离。- 返回:
- 返回随机点数组。
-
aggregatePolygons
public static GeoRegion[] aggregatePolygons(GeoRegion[] sourceRegions, AggregatePolygonParameter aggregatePolygonParameter, PrjCoordSys prjCoordSys)
对面对象进行聚合。- 参数:
sourceRegions
- 输入几何对象,必须为面对象。aggregatePolygonParameter
- 输入聚合面参数。prjCoordSys
- 输入几何对象坐标系。- 返回:
- 返回聚合后的面结果,失败返回null。
-
linearFitting
public static double[] linearFitting(Point2Ds points, int degree)
线性拟合。对点群进行最小二乘法的线性拟合,即找到一条合适的线,使所有点到该拟合线的误差的平方和最小。
说明:
- 当阶数为1时,结果系数数组保存直线方程系数,方程格式为:y=result[0]*x+result[1];
- 当阶数为2时,结果系数数组保存抛物线方程系数,方程格式为:y=result[0]*x*x+result[1]*x+result[2];
- 当输入的点坐标 y 值全部相同时,都为直线方程,方程格式为:y=0*x+result[1] 或 y=0*x*x+0*x+result[2];
- 当输入的点坐标 x 值全部相同时,会直接判断失败,无法生成直线方程。
- 参数:
points
- 输入几何对象,必须为点对象。degree
- 阶数。支持1和2, 1表示:直线方程拟合,2表示:抛物线方程拟合- 返回:
- 返回方程的系数数组。
-
getCentroid
public static Point2D getCentroid(GeoRegion geoRegion)
获取指定面的质心点- 参数:
geoRegion
- 指定面- 返回:
- 质心点
-
createStripMapPages
public static GeoRegion[] createStripMapPages(GeoLine srcLine, Geometry[] barrierGeos, double aLengthAlongTheLine, double aLengthPerpendicularToTheLine)
创建带状分幅页面。创建带状分幅页面是指沿着所给的线状要素,生成特定长宽的一系列外接矩形面。这些矩形面可根据线状要素定义为带状地图的分幅页面,在线性工程(道路网、电力网、石油管网、河流线)中应用较多。
需要注意:生成的结果分幅页面走向与源矢量线数据的节点走向一致。
- 参数:
srcLine
- 输入几何对象,必须为线对象。barrierGeos
- 输入障碍对象,即图幅中的设计分段点(例如行政边界),生成的矩形面遇到障碍时会被截断,再重新开始计算。支持点、线、面。aLengthAlongTheLine
- 矩形页面的长度,即生成矩形页面的沿线长度,单位与源数据集单位一致,当源数据集为平面(投影)坐标系时,数值单位默认为米,源数据集为地理(经纬度)坐标系时,数值单位默认为度。aLengthPerpendicularToTheLine
- 矩形页面的宽度,即生成矩形页面垂直于线的长度,单位与源数据集单位一致,当源数据集为平面(投影)坐标系时,数值单位默认为米,源数据集为地理(经纬度)坐标系时,数值单位默认为度。- 返回:
- 返回结果矩形面数组。
-
-
Copyright © 2021–2024 SuperMap. All rights reserved.