com.supermap.data

类 Geometrist

  • java.lang.Object
    • com.supermap.data.Geometrist


  • public class Geometrist
    extends java.lang.Object
    基本几何运算类。

    该类有两个用途,一是用来判断两个几何对象间的空间位置关系,例如:判断两个几何对象是分离还是包含;二是对几何对象进行几何运算,例如对几何对象进行裁剪,相交等操作。

    目前版本支持的操作有:裁剪,相交,擦除,合并,对称差,更新和同一。不同的操作对被操作几何对象和操作几何对象要求的类型不同,使用时应注意。

    注意:该类所给出的图示均为示意图,不包含该类空间位置关系或操作的所有类型。在空间位置关系判断的图示中橘黄色代表搜索图层,绿色代表被搜索图层;在几何运算的图示中,深蓝色代表被操作几何对象,浅蓝色代表操作几何对象。

    • 方法详细资料

      • isIdentical

        public static boolean isIdentical(Geometry geometrySearch,
                                          Geometry geometryTarget)
        判断被搜索几何对象是否与搜索几何对象完全相等。即几何对象完全重合,而且点的顺序也一样。

        注意:

        1. 被搜索几何对象与搜索几何对象的类型必须相同;
        2. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象,支持点、线、面类型。
        geometryTarget - 被搜索几何对象,支持点、线、面类型。
        返回:
        两个对象完全相等返回 true;否则返回 false。
      • isDisjointed

        public static boolean isDisjointed(Geometry geometrySearch,
                                           Geometry geometryTarget)
        判断被搜索几何对象是否与搜索几何对象分离。分离返回 true。

        注意:

        1. 搜索几何对象和被搜索几何对象分离,即无任何交集;
        2. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象,支持点、线、面类型。
        geometryTarget - 被搜索几何对象,支持点、线、面类型。
        返回:
        两个几何对象分离返回 true;否则返回 false。
      • hasIntersection

        public static boolean hasIntersection(Geometry geometrySearch,
                                              Geometry geometryTarget)
        判断被搜索几何对象与搜索几何对象是否有面积相交。相交返回 true。

        注意:

        1. 被搜索几何对象和搜索几何对象必须有一个为面对象;
        2. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象。
        geometryTarget - 被搜索几何对象。
        返回:
        两个几何对象有面积相交返回 true;否则返回 false。
        Example:
        请参见 Geometrist.computeConvexHull() 方法的示例。
      • hasTouch

        public static boolean hasTouch(Geometry geometrySearch,
                                       Geometry geometryTarget)
        判断被搜索几何对象的边界是否与搜索几何对象的边界相触。相触时搜索几何对象和被搜索几何对象的内部交集为空。

        注意:

        1. 点与点不存在边界接触的情况;
        2. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象。
        geometryTarget - 被搜索几何对象。
        返回:
        被搜索几何对象的边界与搜索几何对象边界相触返回 true;否则返回 false。
        Example:
        请参见 Geometrist.computeConvexHull() 方法的示例。
      • hasOverlap

        public static boolean hasOverlap(Geometry geometrySearch,
                                         Geometry geometryTarget)
        判断被搜索几何对象是否与搜索几何对象部分重叠。有部分重叠则返回 true。

        注意:

        1. 点与任何一种几何对象都不存在部分重叠的情况;
        2. 被搜索几何对象与搜索几何对象的维数要求相同,即只可以是线查询线或者面查询面;
        3. 该关系适合的几何对象类型:
            搜索几何对象:线、面;
            被搜索几何对象:线、面。

        参数:
        geometrySearch - 搜索几何对象,只支持线、面类型。
        geometryTarget - 被搜索几何对象,只支持线、面类型。
        返回:
        被搜索几何对象与搜索几何对象部分重叠返回 true;否则返回 false。
        Example:
        请参见 Geometrist.computeConvexHull() 方法的示例。
      • hasCross

        public static boolean hasCross(Geometry geometrySearch,
                                       Geometry geometryTarget)
        判断搜索几何对象是否穿越被搜索几何对象。穿越则返回 true。

        注意,如果两个几何对象存在穿越关系则:

        1. 搜索几何对象内部与被搜索几何对象的内部的交集不为空且搜索几何对象的内部与被搜索几何对象的外部的交集不为空。
        2. 被搜索几何对象为线时,搜索几何对象内部与被搜索几何对象的内部的交集不为空但是边界交集为空;
        3. 该关系适合的几何对象类型:
            搜索几何对象:线;
            被搜索几何对象:线、面。

        参数:
        geometrySearch - 搜索几何对象,只支持线类型。
        geometryTarget - 被搜索几何对象,支持线、面类型。
        返回:
        搜索几何对象穿越被搜索对象返回 true;否则返回 false。
      • isWithin

        public static boolean isWithin(Geometry geometrySearch,
                                       Geometry geometryTarget)
        判断搜索几何对象是否在被搜索几何对象内。如果在则返回 true。

        注意:

        1. 线查询点,面查询线或面查询点都不存在 Within 情况;
        2. 与 CanContain 是逆运算;
        3. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象,支持点、线、面类型。
        geometryTarget - 被搜索几何对象,支持点、线、面类型。
        返回:
        搜索几何对象在被搜索几何对象内返回 true;否则返回 false。
        另请参阅:
        canContain(Geometry,Geometry)
      • canContain

        public static boolean canContain(Geometry geometrySearch,
                                         Geometry geometryTarget)
        判断搜索几何对象是否包含被搜索几何对象。包含则返回 true。

        注意,如果存在包含关系,则:

        1. 搜索几何对象的外部和被搜索几何对象的内部的交集为空;
        2. 两个几何对象的内部交集不为空或者搜索几何对象的边界与被搜索几何对象的内部交集不为空;
        3. 点查线,点查面,线查面,不存在包含情况;
        4. 与 isWithin 是逆运算;
        5. 该关系适合的几何对象类型:
            搜索几何对象:点、线、面;
            被搜索几何对象:点、线、面。

        参数:
        geometrySearch - 搜索几何对象,支持点、线、面类型。
        geometryTarget - 被搜索几何对象,支持点、线、面类型。
        返回:
        搜索几何对象包含被搜索几何对象返回 true;否则返回 false。
        另请参阅:
        isWithin(Geometry,Geometry)
        Example:
        Geometrist.computeConvexHull() 方法的示例。
      • hasCommonPoint

        public static boolean hasCommonPoint(Geometry geometrySearch,
                                             Geometry geometryTarget)
        判断搜索几何对象是否与被搜索几何对象有共同节点。有共同节点返回 true。

        参数:
        geometrySearch - 搜索几何对象,支持点、线、面类型。
        geometryTarget - 被搜索几何对象,支持点、线、面类型。
        返回:
        搜索几何对象与被搜索几何对象有共同节点返回 true;否则返回 false。
        Example:
        Geometrist.computeConvexHull() 方法的示例。
      • hasCommonLine

        public static boolean hasCommonLine(Geometry geometrySearch,
                                            Geometry geometryTarget)
        判断搜索几何对象是否与被搜索几何对象有公共线段。有公共线段返回 true。

        参数:
        geometrySearch - 搜索几何对象,只支持线、面类型。
        geometryTarget - 被搜索几何对象,只支持线、面类型。
        返回:
        搜索几何对象与被搜索几何对象有公共线段返回 true;否则返回 false。
        Example:
        Geometrist.computeConvexHull() 方法的示例。
      • clip

        public static Geometry clip(Geometry geometry,
                                    Geometry clipGeometry)
        生成被操作对象经过操作对象裁剪后的几何对象。

        注意:

        1. 被操作几何对象只有落在操作几何对象内的那部分才会被输出为结果几何对象;
        2. Clip 与 Intersect 在空间处理上是一致的,不同在于对结果几何对象属性的处理,Clip 分析只是用来做裁剪,结果几何对象只保留被操作几何对象的非系统字段,而 Intersect 求交分析的结果则可以根据字段设置情况来保留两个几何对象的字段。
        3. 该操作适合的几何对象类型:
            操作几何对象:面;
            被操作几何对象:线、面。

        参数:
        geometry - 被操作几何对象,支持线和面类型。
        clipGeometry - 操作几何对象,必须是面对象。
        返回:
        裁剪操作后的几何对象。
        Example:
        Geometrist.computeConvexHull() 方法的示例。
      • clip

        public static Geometry clip(Geometry geometry,
                                    Rectangle2D clipRectangle)
        生成被操作几何对象经过矩形对象裁剪后的几何对象。

        被操作几何对象只有落在矩形对象内的那部分才会被输出为结果几何对象。

        参数:
        geometry - 被操作的几何对象,支持线和面类型。
        clipRectangle - 用于裁剪的二维矩形。
        返回:
        裁剪结果对象。
      • hasHollow

        public static boolean hasHollow(Geometry geometry)
        判断指定的面对象是否包含有洞类型的子对象。
        参数:
        geometry - 待判断的面对象,目前只支持二维面对象 GeoRegion}。
        返回:
        一个布尔值,用于判断面对象是否含有洞类型的子对象,包含则返回 true,否则返回 false。
      • intersect

        public static Geometry intersect(Geometry geometry1,
                                         Geometry geometry2)
        对两个几何对象求交,返回两个几何对象的交集。

        注意:

        1. 进行求交运算的两个几何对象必须是同类型的,目前版本只支持面类型的求交;
        2. 该操作适合的几何对象类型:
            操作几何对象:面;
            被操作几何对象:面。

        参数:
        geometry1 - 被操作几何对象。
        geometry2 - 操作几何对象。
        返回:
        求交操作后的几何对象。
        Example:
        请参见 GeoRegion 类的示例。
      • erase

        public static Geometry erase(Geometry geometry,
                                     Geometry eraseGeometry)
        在被操作对象上擦除掉与操作对象相重合的部分。

        注意:

        1. 如果对象全部被擦除了,则返回 Null;
        2. 操作几何对象定义了擦除区域,凡是落在操作几何对象区域内的被操作几何对象都将被去除,而落在区域外的特征要素都将被输出为结果几何对象,与 Clip 运算相反;
        3. 该操作适合的几何对象类型:
            操作几何对象:面;
            被操作几何对象:点、线、面。

        参数:
        geometry - 被操作几何对象,支持点、线、面对象类型。
        eraseGeometry - 操作几何对象,必须为面对象类型。
        返回:
        擦除操作后的几何对象。
      • union

        public static Geometry union(Geometry geometry1,
                                     Geometry geometry2)
        对两个对象进行合并操作。进行合并后,两个面对象在相交处被多边形分割。

        注意:

        1. 进行求并运算的两个几何对象必须是同类型的,目前版本只支持面类型的合并。
        2. 该操作适合的几何对象类型:
            操作几何对象:面;
            被操作几何对象:面。

        参数:
        geometry1 - 被操作几何对象。
        geometry2 - 操作几何对象。
        返回:
        合并操作后的几何对象。
      • xOR

        public static Geometry xOR(Geometry geometry1,
                                   Geometry geometry2)
        对两个对象进行异或运算。即对于每一个被操作几何对象,去掉其与操作几何对象相交的部分,而保留剩下的部分。

        进行异或运算的两个几何对象必须是同类型的,只支持面面。

        参数:
        geometry1 - 被操作几何对象,只支持面类型。
        geometry2 - 操作几何对象,只支持面类型。
        返回:
        进行异或运算的结果几何对象。
      • update

        public static Geometry update(Geometry geometry,
                                      Geometry updateGeometry)
        对被操作对象进行更新操作。用操作几何对象替换与被操作几何对象的重合部分,是一个先擦除后粘贴的过程。操作对象和被操作对象必须都是面对象。

        参数:
        geometry - 被操作几何对象,即被更新的几何对象,必须为面对象。
        updateGeometry - 操作几何对象,用于进行更新运算的几何对象,必须为面对象。
        返回:
        更新操作后的几何对象。
      • identity

        public static Geometry identity(Geometry geometry,
                                        Geometry identityGeometry)
        对被操作对象进行同一操作。即操作执行后,被操作几何对象包含来自操作几何对象的几何形状。

        注意:

        1. 同一运算就是操作几何对象与被操作几何对象先求交,然后求交结果再与被操作几何对象求并的运算。
            如果被操作几何对象为点类型,则结果几何对象为被操作几何对象;
            如果被操作几何对象为线类型,则结果几何对象为被操作几何对象,但是与操作几何对象相交的部分将被打断;
            如果被操作几何对象为面类型,则结果几何对象保留以被操作几何对象为控制边界之内的所有多边形,并且把与操作几何对象相交的地方分割成多个对象。
        2. 该操作适合的几何对象类型:
            操作几何对象:面;
            被操作几何对象:点、线、面。

        参数:
        geometry - 被操作几何对象,支持点、线、面对象。
        identityGeometry - 操作几何对象,必须为面对象。
        返回:
        同一操作后的几何对象。
      • 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 - 第二个几何对象。
        返回:
        两个对象之间的距离。
        Example:
        Geometrist.computeConvexHull() 方法的示例。
      • computeConvexHull

        public static GeoRegion computeConvexHull(Point2Ds points)
        计算点集的凸闭包,即最小外接多边形。返回一个简单凸多边形。
        参数:
        points - 点集。
        返回:
        最小外接多边形。
      • computeConvexHull

        public static GeoRegion computeConvexHull(Geometry geometry)
        计算几何对象的凸闭包,即最小外接多边形。返回一个简单凸多边形。
        参数:
        geometry - 几何对象。
        返回:
        最小外接多边形。
        Example:
        以下代码示范如何判断两个几何对象间的空间位置关系以及对几何对象进行几何运算。
         public void computeConvexHullTest(){
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 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)
        根据距离求已知折线的平行线,返回平行线。注:如有夹角,平行间距应该小于1/2的夹角距离,夹角距离为夹角的两个末端点之间距离
        参数:
        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)时,必须通过该对象的 setType 方法设置投影坐标系类型为地理经纬坐标系(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE),否则计算结果错误。

        参数:
        geometry - 指定的需要计算经纬度面积的 Geometry 对象。
        prjCoordSys - 指定的投影坐标系类型。
        返回:
        经纬度面积的值。
      • intersectPolyLine

        public static Point2D[] intersectPolyLine(Point2Ds points1,
                                                  Point2Ds points2)
        返回两条折线的交点。
        参数:
        points1 - 构成第一条折线的点串。
        points2 - 构成第二条折线的点串。
        返回:
        点串构成的折线的交点。
      • smooth

        public static Point2Ds smooth(Point2Ds points,
                                      int smoothness)
        对指定的点串对象进行光滑处理。
        参数:
        points - 需要进行光滑处理的点串。
        smoothness - 光滑系数。有效范围为大于等于2,设置为小于2的值会抛出异常。光滑系数越大,线对象或面对象边界的节点数越多,也就越光滑。建议取值范围为[2,10]。
        返回:
        光滑处理结果点串。
      • splitLine

        public static GeoLine[] splitLine(GeoLine sourceLine,
                                          Geometry splitGeometry,
                                          double tolerance)
        使用点、线或面对象对线对象进行分割(打断)。

        该方法可用于使用点、线、面对象对线对象进行打断或分割。下面以一个简单线对象对这三种情况进行说明。

        • 点对象打断线对象

          使用点对象对线对象进行打断,原线对象在点对象位置打断为两个线对象。如下图所示,使用点(黑色)对线(蓝色)进行打断,结果为两个线对象(红色线和绿色线)。

        • 线对象分割线对象

          这种情况分割线(用于分割的线对象)会将操作线(被分割的线对象)分割为两个线对象。分割线为一条折线,可以是只包含两个端点的线段,也可以是包含多个节点的折线。

          当分割线为线段时,操作线将会在其与分割线的交点处被分割为两个线对象。如下图所示,图中黑色线为分割线,分割后原线对象被分为两个线对象(红色线和绿色线)。

          当分割线为折线时,可能与操作线有多个交点,此时会在所有交点处将操作线打断,然后按顺序将位于奇数和偶数次序的线段分别合并,产生两个线对象。也就是说,使用折线分割线时,可能会产生复杂线对象。下图展示的就是这种情况,分割后,红色的线和绿色的线分别为一个复杂线对象。

        • 面对象分割线对象

          面对象分割线对象与线分割线类似,会在分割面和操作线的所有交点处将操作线打断,然后分别将位于奇数和偶数位置的线合并,产生两个线对象。这种情况会产生至少一个复杂线对象。下图中,面对象(浅橙色)将线对象分割为红色和绿色两个复杂线对象。

        注意:

        1. 如果被分割的线对象为复杂对象,那么如果分割线经过子对象,则会将该子对象分割为两个线对象,因此,分割复杂线对象可能产生多个线对象。

        2. 用于分割的线对象或者面对象如果有自相交,分割不会失败,但分割的结果可能不正确。因此,应尽量使用没有自相交的线或面对象来分割线。

        参数:
        sourceLine - 待分割(打断)的线对象。
        splitGeometry - 用于分割(打断)线对象的对象,支持点、线、面对象。
        tolerance - 指定的容限,用于判断点对象是否在线上,若点到线的垂足距离大于该容限值,则认为用于打断的点对象无效,从而不执行打断。
        返回:
        分割后的线对象数组。
      • isSelfIntersect

        public static boolean isSelfIntersect(Geometry geometry)
        判断指定Geometry是否自相交,即线或面对象是否有线段相交。
        参数:
        geometry - 需检查的几何对象。
        返回:
        线或面自相交,返回true;若参数为null、对象已释放、不是线或面对象,返回false。
      • computeGeodesicLength

        public static double computeGeodesicLength(Geometry geometry,
                                                   PrjCoordSys prjCoordSys)
        计算对象长度,如果是面对象,计算周长
        参数:
        geometry - 要计算面积的几何对象
        prjCoordSys - 投影坐标系类型。投影坐标系统由地图投影方式、投影参数、坐标单位和地理坐标系组成。
        返回:
        返回所计算对象的长度,单位米
      • patchSelfIntersectRegion

        public static GeoRegion[] patchSelfIntersectRegion(GeoRegion geoRegion)
        分割自相交面
        参数:
        geoRegion - 需分割的几何对象
        返回:
        分割后面对象
      • regularizeBuildingFootprint

        public static Geometry regularizeBuildingFootprint(Geometry sourceGeometry,
                                                           RegularizeParameter param,
                                                           PrjCoordSys prjCoordSys)
        参数:
        sourceGeometry - 输入几何对象
        param - 输入规则化参数
        prjCoordSys - 输入几何对象坐标系
        返回:
        返回规则化后的建筑物结果