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)
几何对象的比例变换(缩放),支持点、线、面。
|
public static boolean isIdentical(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。public static boolean isIdentical(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。tolerance
- 节点容限值。Geometrist.isIdentical(Geometry, Geometry)
public static boolean isDisjointed(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。public static boolean isDisjointed(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
public static boolean hasIntersection(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。Geometrist.computeConvexHull()
方法的示例。public static boolean hasIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。tolerance
- 节点容限值。Geometrist.computeConvexHull()
方法的示例。public static boolean hasTouch(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。Geometrist.computeConvexHull()
方法的示例。public static boolean hasTouch(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 搜索几何对象。geometryTarget
- 被搜索几何对象。tolerance
- 节点容限值。Geometrist.computeConvexHull()
方法的示例。public static boolean hasOverlap(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。Geometrist.computeConvexHull()
方法的示例。public static boolean hasOverlap(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。tolerance
- 节点容限值。Geometrist.computeConvexHull()
方法的示例。public static boolean hasCross(Geometry geometrySearch, Geometry geometryTarget)
注意,如果两个几何对象存在穿越关系则:
geometrySearch
- 搜索几何对象,只支持线类型。geometryTarget
- 被搜索几何对象,支持线、面类型。public static boolean isWithin(Geometry geometrySearch, Geometry geometryTarget)
注意:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。Geometrist.canContain(Geometry,Geometry)
public static boolean isWithin(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。tolerance
- 节点容限值。Geometrist.canContain(Geometry,Geometry)
public static boolean canContain(Geometry geometrySearch, Geometry geometryTarget)
注意,如果存在包含关系,则:
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。Geometrist.isWithin(Geometry,Geometry)
Geometrist.computeConvexHull()
方法的示例。public static boolean canContain(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
public static boolean hasCommonPoint(Geometry geometrySearch, Geometry geometryTarget)
geometrySearch
- 搜索几何对象,支持点、线、面类型。geometryTarget
- 被搜索几何对象,支持点、线、面类型。Geometrist.computeConvexHull()
方法的示例。public static boolean hasCommonLine(Geometry geometrySearch, Geometry geometryTarget)
geometrySearch
- 搜索几何对象,只支持线、面类型。geometryTarget
- 被搜索几何对象,只支持线、面类型。Geometrist.computeConvexHull()
方法的示例。public static Geometry clip(Geometry geometry, Geometry clipGeometry)
注意:
geometry
- 被操作几何对象,支持线和面类型。clipGeometry
- 操作几何对象,必须是面对象。Geometrist.computeConvexHull()
方法的示例。public static Geometry clip(Geometry geometry, Geometry clipGeometry, double tolerance)
geometry
- 被操作几何对象,支持线和面类型。clipGeometry
- 操作几何对象,必须是面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。Geometrist.computeConvexHull()
方法的示例。public static Geometry clip(Geometry geometry, Rectangle2D clipRectangle)
被操作几何对象只有落在矩形对象内的那部分才会被输出为结果几何对象。
geometry
- 被操作的几何对象,支持线和面类型。clipRectangle
- 用于裁剪的二维矩形。public static boolean hasHollow(Geometry geometry)
geometry
- 待判断的面对象,目前只支持二维面对象 GeoRegion
。@Deprecated public static boolean HasHollow(Geometry geometry)
public static Geometry intersect(Geometry geometry1, Geometry geometry2)
目前仅支持面面求交和线线求交,如下图示所示:
注意,如果两对象有多个相离的公共部分,求交的结果将是一个复杂对象。
geometry1
- 进行求交运算的第一个几何对象,支持线、面类型。geometry2
- 进行求交运算的第二个几何对象,支持线、面类型。GeoRegion
类的示例。public static Geometry intersect(Geometry geometry1, Geometry geometry2, double tolerance)
geometry1
- 进行求交运算的第一个几何对象,支持线、面类型。geometry2
- 进行求交运算的第二个几何对象,支持线、面类型。tolerance
- 节点容限。建议根据数据精度设置节点容限,容限值应大于数据精度。public static Geometry erase(Geometry geometry, Geometry eraseGeometry)
注意:
geometry
- 被操作几何对象,支持点、线、面对象类型。eraseGeometry
- 操作几何对象,必须为面对象类型。public static Geometry erase(Geometry geometry, Geometry eraseGeometry, double tolerance)
geometry
- 被操作几何对象,支持点、线、面对象类型。eraseGeometry
- 操作几何对象,必须为面对象类型。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。public static Geometry union(Geometry geometry1, Geometry geometry2)
注意:
geometry1
- 被操作几何对象。geometry2
- 操作几何对象。public static Geometry union(Geometry geometry1, Geometry geometry2, double tolerance)
geometry1
- 被操作几何对象。geometry2
- 操作几何对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。public static Geometry xOR(Geometry geometry1, Geometry geometry2)
进行异或运算的两个几何对象必须是同类型的,只支持面面。
geometry1
- 被操作几何对象,只支持面类型。geometry2
- 操作几何对象,只支持面类型。public static Geometry xOR(Geometry geometry1, Geometry geometry2, double tolerance)
geometry1
- 被操作几何对象,只支持面类型。geometry2
- 操作几何对象,只支持面类型。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。public static Geometry update(Geometry geometry, Geometry updateGeometry)
geometry
- 被操作几何对象,即被更新的几何对象,必须为面对象。updateGeometry
- 操作几何对象,用于进行更新运算的几何对象,必须为面对象。public static Geometry update(Geometry geometry, Geometry updateGeometry, double tolerance)
geometry
- 被操作几何对象,即被更新的几何对象,必须为面对象。updateGeometry
- 操作几何对象,用于进行更新运算的几何对象,必须为面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。public static Geometry identity(Geometry geometry, Geometry identityGeometry)
注意:
geometry
- 被操作几何对象,支持点、线、面对象。identityGeometry
- 操作几何对象,必须为面对象。public static Geometry identity(Geometry geometry, Geometry identityGeometry, double tolerance)
geometry
- 被操作几何对象,支持点、线、面对象。identityGeometry
- 操作几何对象,必须为面对象。tolerance
- 节点容限值。建议根据数据精度设置节点容限,容限值应大于数据精度。@Deprecated public static Geometry resample(Geometry geometry, double tolerance)
public static Geometry resample(Geometry geometry, ResampleType resampleType, double tolerance)
对几何对象重采样是按照一定规则剔除一些节点,以达到对数据进行简化的目的(如下图所示),其结果可能由于使用不同的重采样方法而不同。SuperMap
提供两种方法对几何对象进行重采样,分别为光栏法和道格拉斯-普克法。有关这两种方法的详细介绍,请参见 ResampleType
类。
geometry
- 指定的要进行重采样的几何对象。支持线对象和面对象。resampleType
- 指定的重采样方法。tolerance
- 指定的重采样容限。请参见 ResampleType
类。public static double distance(Geometry geometry1, Geometry geometry2)
注意:几何对象的类型只能是点、线和面。这里的距离指的是两个几何对象边线间最短距离。例如:点到线的最短距离就是点到该线的垂直距离。
geometry1
- 第一个几何对象。geometry2
- 第二个几何对象。Geometrist.computeConvexHull()
方法的示例。public static Point2Ds closestPoint(Geometry geometry1, Geometry geometry2)
geometry1
- 输入几何对象,支持二维点、线、面geometry2
- 输入几何对象,支持二维点、线、面public static GeoRegion computeConvexHull(Point2Ds points)
points
- 点集。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(); }
public static boolean splitRegion(GeoRegion sourceRegion, Geometry splitGeometry, GeoRegion targetGeoRegion1, GeoRegion targetGeoRegion2)
注意:参数中的分割对象与被分割对象必须至少有两个交点,否则的话会分割失败。
sourceRegion
- 被分割的面对象。splitGeometry
- 用于分割的几何对象,可以是线或面几何对象。targetGeoRegion1
- 返回分割后的第一个面对象。targetGeoRegion2
- 返回分割后的第二个面对象。public static GeoArc computeFillet(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, double radius)
倒圆角用于计算与给定的两条线段均相切的圆弧。该方法中,参数 startPoint1 和 endPoint1 指点的两点构成第一条线段,startPoint2 和 endPoint2 指定的两点构成第二条线段,参数 radius 用于指定内切圆的半径。
如下图所示,作两条线段的公共内切圆,以两个切点为端点,靠近两线段交点的圆弧(图中橙色圆弧)即为计算倒圆角的结果。
注意:
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。radius
- 圆弧的半径。public static boolean isParallel(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。public static GeoLine computeParallel(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 直线外的任意一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。public static GeoLine computeParallel(GeoLine geoLine, double distance)
geoLine
- 已知折线对象。distance
- 所求平行线间的距离。public static boolean isPerpendicular(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。public static GeoLine computePerpendicular(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 已知一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。public static Point2D computePerpendicularPosition(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 已知一点。startPoint
- 直线上的一点。endPoint
- 直线上的另一点。public static boolean isPointOnLine(Point2D point, Point2D startPoint, Point2D endPoint, boolean isExtended)
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。isExtended
- 是否将线段进行延长计算,如果 isExtended = true,就按直线计算,否则按线段计算。public static Point2D intersectLine(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2, boolean isExtended)
startPoint1
- 第一条线的起点。endPoint1
- 第一条线的终点。startPoint2
- 第二条线的起点。endPoint2
- 第二条线的终点。isExtended
- 是否将线段进行延长计算,如果 isExtended = true,就按直线计算,否则按线段计算。public static double computeGeodesicDistance(Point2Ds points, double majorAxis, double flatten)
曲面上两点之间的短程线称为测地线。球面上的测地线即是大圆。
测地线又称“大地线”或“短程线”,是地球椭球面上两点间的最短曲线。在大地线上,各点的主曲率方向均与该点上曲面法线相合。它在圆球面上为大圆弧, 在平面上就是直线。在大地测量中,通常用大地线来代替法截线,作为研究和计算椭球面上各种问题。
测地线是在一个曲面上,每一点处测地曲率均为零的曲线。
points
- 构成测地线的经纬度坐标点串。majorAxis
- 测地线所在椭球体的长轴。flatten
- 测地线所在椭球体的扁率。public static double computeGeodesicArea(Geometry geometry, PrjCoordSys prjCoordSys)
如果prjCoordSys指定的坐标系是经纬度地理坐标系,则计算椭球测地线面积。 如果prjCoordSys指定的坐标系是GAUSS KRUGER Xian 1980 或 GAUSS KRUGER GCS2000 投影坐标系,则通过高斯反解计算椭球面积。 如果prjCoordSys指定的坐标系是其它投影坐标系,则仅计算面对象的几何面积。
注意:
使用该方法计算测地线面积,在通过 prjCoordSys 参数指定投影坐标系类型对象(PrjCoordSys
)时,需要指定与几何对象坐标相匹配的真实坐标系类型,否则可能无法得到正确的计算结果。
geometry
- 指定的需要计算测地线面积的 Geometry 对象。prjCoordSys
- 指定的投影坐标系类型。public static double computeLength(GeoLine3D line3D, PrjCoordSys prjCoordSys)
如果prjCoordSys指定的坐标系是经纬度坐标系,则转换到以地球球心为原点的笛卡尔三维坐标系中计算,如果不是经纬度坐标系则直接计算几何长度。
prjCoordSys必须是与几何对象坐标值相匹配的坐标系,否则可能返回错误结果。
line3D
- 指定的需要计算长度的 GeoLine3D 对象。prjCoordSys
- 指定的坐标系类型。public static Point2D[] intersectPolyLine(Point2Ds points1, Point2Ds points2)
points1
- 构成第一条折线的点串。points2
- 构成第二条折线的点串。public static Point2Ds smooth(Point2Ds points, int smoothness)
有关光滑的更多内容,可以参考 smooth
方法的介绍。
points
- 需要进行光滑处理的点串。smoothness
- 光滑系数。有效范围为大于等于2,设置为小于2的值会抛出异常。光滑系数越大,线对象或面对象边界的节点数越多,也就越光滑。
建议取值范围为[2,10]。public static PointMs smooth(PointMs points, int smoothness)
有关光滑的更多内容,可以参考 smooth
方法的介绍。
points
- 需要进行光滑处理的点串。smoothness
- 光滑系数。有效范围为大于等于2,设置为小于2的值会抛出异常。光滑系数越大,线对象或面对象边界的节点数越多,也就越光滑。
建议取值范围为[2,10]。public static GeoLine[] splitLine(GeoLine sourceLine, Geometry splitGeometry, double tolerance)
该方法可用于使用点、线、面对象对线对象进行打断或分割。下面以一个简单线对象对这三种情况进行说明。
点对象打断线对象
使用点对象对线对象进行打断,原线对象在点对象位置打断为两个线对象。如下图所示,使用点(黑色)对线(蓝色)进行打断,结果为两个线对象(红色线和绿色线 )。
线对象分割线对象
这种情况分割线(用于分割的线对象)会将操作线(被分割的线对象)分割为两个线对象。分割线为一条折线,可以是只包含两个端点的线段, 也可以是包含多个节点的折线。
当分割线为线段时,操作线将会在其与分割线的交点处被分割为两个线对象。如下图所示,图中黑色线为分割线,分割后原线对象被分为两个线对象(红色线和绿色线 )。
当分割线为折线时,可能与操作线有多个交点,此时会在所有交点处将操作线打断,然后按顺序将位于奇数和偶数次序的线段分别合并,产生两个线对象。也就是说, 使用折线分割线时,可能会产生复杂线对象。下图展示的就是这种情况,分割后,红色的线和绿色的线分别为一个复杂线对象。
面对象分割线对象
面对象分割线对象与线分割线类似,会在分割面和操作线的所有交点处将操作线打断,然后分别将位于奇数和偶数位置的线合并,产生两个线对象。 这种情况会产生至少一个复杂线对象。下图中,面对象(浅橙色)将线对象分割为红色和绿色两个复杂线对象。
注意:
1. 如果被分割的线对象为复杂对象,那么如果分割线经过子对象,则会将该子对象分割为两个线对象,因此,分割复杂线对象可能产生多个线对象。
2. 用于分割的线对象或者面对象如果有自相交,分割不会失败,但分割的结果可能不正确。因此,应尽量使用没有自相交的线或面对象来分割线。
sourceLine
- 待分割(打断)的线对象。splitGeometry
- 用于分割(打断)线对象的对象,支持点、线、面对象。tolerance
- 指定的容限,用于判断点对象是否在线上,若点到线的垂足距离大于该容限值,则认为用于打断的点对象无效,从而不执行打断。public static GeoLineM[] splitLineM(GeoLineM sourceLineM, Geometry splitGeometry, double tolerance)
sourceLineM
- 待分割(打断)的线对象。splitGeometry
- 用于分割(打断)线对象的对象,支持点、线、面对象。tolerance
- 指定的容限,用于判断点对象是否在线上,若点到线的垂足距离大于该容限值,则认为用于打断的点对象无效,从而不执行打断。public static boolean isLeft(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 指定的点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。public static boolean isRight(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 指定的点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。public static boolean isOnSameSide(Point2D point1, Point2D point2, Point2D startPoint, Point2D endPoint)
point1
- 指定的一点。point2
- 指定的另一点。startPoint
- 指定的直线上的一点。endPoint
- 指定的直线上的另一点。public static boolean isProjectOnLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。public static double distanceToLineSegment(Point2D point, Point2D startPoint, Point2D endPoint)
point
- 已知点。startPoint
- 已知线段的起点。endPoint
- 已知线段的终点。public static Point2D nearestPointToVertex(Point2D vertex, Geometry geometry)
vertex
- 指定的点。geometry
- 指定的几何对象。目前仅支持线对象。public static Point3D intersectLineSegment(Point3D startPoint1, Point3D endPoint1, Point3D startPoint2, Point3D endPoint2, double tolerance)
startPoint1
- 第一条三维线段的起点。endPoint1
- 第一条三维线段的终点。startPoint2
- 第二条三维线段的起点。endPoint2
- 第二条三维线段的终点。tolerance
- 指定的容限。如果两条三维线段的空间距离小于或等于该值,则认为二者相交。public static boolean isPointOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。public static boolean isProjectOnLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。public static Point3D computePerpendicularPosition(Point3D point, Point3D startPoint, Point3D endPoint)
point
- 已知三维点。startPoint
- 三维线上的一点。endPoint
- 三维线上的另一点。public static double distanceToLineSegment(Point3D point, Point3D startPoint, Point3D endPoint)
point
- 已知三维点。startPoint
- 已知三维线段的起点。endPoint
- 已知三维线段的终点。public static GeoRegion computeConcaveHull(Point2Ds points, double angle)
points
- 指定的点集。angle
- 凹包内最小角度。public static GeoRegion computeConcaveHull(Point2Ds points, double angle, SteppedListener... listeners)
public static GeoRegion[] aggregatePointsToRegions(Point2Ds points, PrjCoordSys prjCoordSys, double distance, Unit unit, int minPilePointCount)
关于密度聚类,参考
aggregatePoints
。
points
- 输入的点集合。prjCoordSys
- 点集合的空间参考坐标系,如果为null,则默认为平面坐标系。distance
- 密度聚类半径。unit
- 密度聚类半径的单位。如果空间参考坐标系prjCoordSys无效,此参数也无效。minPilePointCount
- 密度聚类点数目阈值,必须大于等于2。阈值越大表示能聚类为一簇的条件越苛刻。推荐值为4。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。public static GeoRegion[] dividePolygon(GeoRegion dividedPolygon, DividePolygonParameter parameter, PrjCoordSys prjCoordSys)
dividedPolygon
- 被分割的二维面对象,不能为空parameter
- 分割面参数类对象。prjCoordSys
- 被分割的二维面对象的空间参考坐标系,不支持地理坐标系。因为切割面对象需要按照面积进行切割,在经纬度下无法直接有效计算出面积,
必须转为投影系才能计算出面积,但转为投影系后数据会有较大的变形,导致最后结果可能存在错误。public static GeoLine computeGeodesicLine(Point2D startPoint, Point2D endPoint, GeodesicLineParameter parameter)
startPoint
- 输入的测地线起始点。endPoint
- 输入的测地线终止点。parameter
- 构造测点线的参数对象。详见(GeodesicLineParameter
)。public static GeoLine computeGeodesicLine(Point2D startPoint, double angle, double distance, GeodesicLineParameter parameter)
startPoint
- 输入的测地线起始点。angle
- 输入的测地线方位角。正负均可。distance
- 输入的测地线长度。单位为米。parameter
- 构造测点线的参数对象。详见(GeodesicLineParameter
)。public static boolean isSegmentIntersect(Point2D startPoint1, Point2D endPoint1, Point2D startPoint2, Point2D endPoint2)
public static int[] geometriesContain(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
public static int[] geometriesWithin(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
public static int[] geometriesIntersect(Geometry[] sourceGeometries, Geometry[] targetGeometries, boolean isBorderInside, double dTolerance, boolean isInverseIndexs)
public static int isIntersectRegionWithRect(Geometry geometry, Rectangle2D rectClipper, double dInterval)
geometry
- 被裁剪多边形,不允许为NULLrectClipper
- 裁剪矩形,不允许为NULLdInterval
- 判断结点相等的容限public static GeoRegion[] resample(GeoRegion[] sourceRegions, ResampleType resampleType, double tolerance)
对面对象数组重采样是按照一定规则剔除一些节点,以达到对数据进行简化的目的(如下图所示),其结果可能由于使用不同的重采样方法而不同。SuperMap
提供两种方法对面对象数组进行重采样,分别为光栏法和道格拉斯-普克法。有关这两种方法的详细介绍,请参见 ResampleType
类。
面对象数组重采样时,实质是对面对象的边界进行重采样。对于多个面对象的公共边界,会进行了拓扑预处理,只会对其中一个多边形的该公共边界重采样一次, 其他多边形的该公共边界会依据该多边形重采样的结果进行调整使之贴合,因此不会出现缝隙。
sourceRegions
- 指定的要进行重采样的面对象数组。resampleType
- 指定的重采样方法。请参见 ResampleType
类。tolerance
- 指定的重采样容限。public static double getTolerance(PrjCoordSys prjCoordSys)
prjCoordSys
- 指定的投影坐标系类型对象。public static boolean hasAreaIntersection(Geometry geometrySearch, Geometry geometryTarget, double tolerance)
geometrySearch
- 查询对象geometryTarget
- 目标对象tolerance
- 节点容限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不变。public static Geometry orthogonalPolygonFitting(Geometry sourceGeometry, double widthThreshold, double heightThreshold)
sourceGeometry
- 面几何对象。widthThreshold
- 节点到最小面积外接矩形的左右边界阈值。heightThreshold
- 节点到最小面积外接矩形的上下边界阈值。public static GeoRegion regularizeBuildingFootprint(GeoRegion sourceRegion, RegularizeParameter regularizeParameter, PrjCoordSys prjCoordSys)
sourceRegion
- 输入几何对象,必须为面对象。regularizeParameter
- 输入规则化参数。prjCoordSys
- 输入几何对象坐标系。public static Point2D[] createRandomPoints(Geometry sourceGeometry, int randomNumber, double minDistance)
sourceGeometry
- 输入几何对象,支持线和面。randomNumber
- 生成的随机点数目。minDistance
- 生成随机点之间的最小距离。public static GeoRegion[] aggregatePolygons(GeoRegion[] sourceRegions, AggregatePolygonParameter aggregatePolygonParameter, PrjCoordSys prjCoordSys)
sourceRegions
- 输入几何对象,必须为面对象。aggregatePolygonParameter
- 输入聚合面参数。prjCoordSys
- 输入几何对象坐标系。public static double[] linearFitting(Point2Ds points, int degree)
对点群进行最小二乘法的线性拟合,即找到一条合适的线,使所有点到该拟合线的误差的平方和最小。
说明:
points
- 输入几何对象,必须为点对象。degree
- 阶数。支持1和2, 1表示:直线方程拟合,2表示:抛物线方程拟合public static Point2D getCentroid(GeoRegion geoRegion)
geoRegion
- 指定面public static GeoRegion[] createStripMapPages(GeoLine srcLine, Geometry[] barrierGeos, double aLengthAlongTheLine, double aLengthPerpendicularToTheLine)
创建带状分幅页面是指沿着所给的线状要素,生成特定长宽的一系列外接矩形面。这些矩形面可根据线状要素定义为带状地图的分幅页面,在线性工程(道路网、电力网、石油管网、河流线)中应用较多。
需要注意:生成的结果分幅页面走向与源矢量线数据的节点走向一致。
srcLine
- 输入几何对象,必须为线对象。barrierGeos
- 输入障碍对象,即图幅中的设计分段点(例如行政边界),生成的矩形面遇到障碍时会被截断,再重新开始计算。支持点、线、面。aLengthAlongTheLine
- 矩形页面的长度,即生成矩形页面的沿线长度,单位与源数据集单位一致,当源数据集为平面(投影)坐标系时,数值单位默认为米,源数据集为地理(经纬度)坐标系时,数值单位默认为度。aLengthPerpendicularToTheLine
- 矩形页面的宽度,即生成矩形页面垂直于线的长度,单位与源数据集单位一致,当源数据集为平面(投影)坐标系时,数值单位默认为米,源数据集为地理(经纬度)坐标系时,数值单位默认为度。Copyright © 2021–2024 SuperMap. All rights reserved.