• 仅仅三行JAVA代码计算多边形的几何中心点


    前言:

      因为工作设计到gis相关的内容,需要计算采煤机工作面的中心点。如果套用数学的计算公式,用java去实现,太多麻烦还费时比较久,于是我找到java几何计算的工具包,几行代码就能求出多变形的中心,简直yyds!!!

    计算思路

    对于任意一个凸多边形,我们可以使用以下的方法计算其几何中心点

    首先,定义多边形的每个顶点为A1, A2, ..., An,其中n表示多边形的边数。

    然后,我们可以利用以下的公式来计算几何中心点的横坐标(x)和纵坐标(y):

    横坐标的计算公式:

    x = (A1x + A2x + ... + Anx) / n

    纵坐标的计算公式:

    y = (A1y + A2y + ... + Any) / n

    其中,Aix表示第i个顶点的横坐标,Aiy表示第i个顶点的纵坐标。

    通过这两个公式,我们可以将所有顶点的坐标相加并除以边数n得到几何中心点的坐标。例如,如果一个三角形的顶点分别为A(1, 2),B(4, 6),C(7, 3),则可以进行如下的计算:

    x = (1 + 4 + 7) / 3 = 4 y = (2 + 6 + 3) / 3 = 3.67

    因此,该三角形的几何中心点为坐标(4, 3.67)。

    需要注意的是,以上的方法只适用于凸多边形。对于非凸多边形,可以通过将其分解为多个凸多边形,再计算每个凸多边形的几何中心点,最后取所有几何中心点的均值来近似表示整个非凸多边形的几何中心点。

    此外,还有其他方法可以用于计算几何中心点,例如使用积分或质心定理等。但以上的方法是最简单且常用的计算几何中心点的方式之一。

    总结起来,计算几何中心点的步骤如下:

    1. 确定多边形的顶点坐标。
    2. 使用横坐标公式和纵坐标公式计算几何中心点的坐标。
    3. 对于非凸多边形,可以将其分解为凸多边形并计算每个凸多边形的几何中心点,最后取所有几何中心点的均值作为非凸多边形的几何中心点。

    代码教程

    首先再maven项目的pom文件中引入依赖

    1. 1.8
    2. 3.8.1
    3. 2.1.16.RELEASE
    4. 2.6.0.RELEASE
    5. Cairo-SR8
    6. UTF-8
    7. yyyyMMddHHmmss
    8. 28-SNAPSHOT
    9. org.geotools
    10. gt-main
    11. ${geotools.version}

    下面代码以四边形为例,计算面积和中心点

    demo1

    1. public static void main(String[] args) {
    2. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    3. CoordinateList coords=new CoordinateList();
    4. coords.add(new Coordinate(3630789.1856605336, 3.943998533907477E7));
    5. coords.add(new Coordinate(3630480.3613995733, 3.944116440724006E7));
    6. coords.add(new Coordinate(3630128.8984496593, 3.944109300504929E7));
    7. coords.add(new Coordinate(3630408.0016770884, 3.943992775038134E7));
    8. //闭合
    9. coords.closeRing();
    10. Polygon polygon = geometryFactory.createPolygon(coords.toCoordinateArray());
    11. //输出中心点
    12. System.out.println( polygon.getCentroid());
    13. //输出多边形面积
    14. System.out.println( polygon.getArea());
    15. }

    demo2

    1. public static void main(String[] args) {
    2. GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
    3. //最后一个点和第一个相同完成多边形的线段闭合
    4. Coordinate[] coords = new Coordinate[] {new Coordinate(1, 5),new Coordinate(1, 1), new Coordinate(5,1) , new Coordinate(5, 5),new Coordinate(1, 5)};
    5. Polygon polygon = geometryFactory.createPolygon(coords);
    6. //输出中心点
    7. System.out.println( polygon.getCentroid());
    8. //输出多边形面积
    9. System.out.println( polygon.getArea());
    10. }

    以上代码值得注意的有两点:

    1.坐标点的顺序必须保证是几何图形的相邻点,顺时针相连或者逆时针都可以。

    2.最后要完成闭合,闭合的方式即最后一个点必须和第一个点相同。

    如图所示,顺序按照A->B>C>D,且最后闭合点为A点,即开始和最后输入点为A点

     除了四边形形,五边形,六边形,不规则多边形,都可以计算。方法和原理一样。

    输出结果实例

    demo1输出

     demo2输出

    文章创作不易,还望多多支持。

    相关文章推荐

    java计算四边形中心点和两条线段交点算法_洛阳泰山的博客-CSDN博客_求四边形中心点

    手写GIS二三维地理空间几何计算GeoTools工具类_洛阳泰山的博客-CSDN博客_geotools 空间计算

     已知直角三角形两点坐标和一边长,求另一点坐标 | 三角函数_洛阳泰山的博客-CSDN博客

    相关知识 

    org.geotools是一个Java编写的开源地理空间类库,提供了一套功能强大的工具和API,用于处理地理空间数据。下面是关于org.geotools的一些详细解释:

    1. 功能丰富:org.geotools提供了广泛的功能,涵盖了地理空间数据的读取、写入、转换、分析和可视化等方面。它支持多种常见的矢量和栅格数据格式,并提供了各种操作符和方法来处理和操作这些数据。

    2. 数据格式支持:org.geotools支持多种常见的地理空间数据格式,如ESRI Shapefile、GeoJSON、KML、GML等。它可以轻松读取和写入这些格式的数据,使用户能够与不同格式的地理空间数据进行交互。

    3. 投影转换:org.geotools提供了强大的投影转换功能,可以实现不同坐标系之间的转换。它支持常见的投影系统,如经纬度坐标系、UTM投影、Web墨卡托投影等,使用户能够在不同投影系统下进行准确的空间分析和计算。

    4. 空间查询和分析:org.geotools提供了丰富的空间查询和分析功能,包括点线面的空间关系判断、缓冲区分析、空间叠加分析、空间插值等。用户可以通过这些功能进行地理数据的查询、筛选和分析,从而得到需要的结果。

    5. 可视化和渲染:org.geotools提供了强大的可视化和渲染功能,可以将地理空间数据以图形方式展示出来。它支持符号化、颜色映射、标注、图层叠加等操作,使用户能够创建漂亮且具有交互性的地图应用程序。

    总之,org.geotools是一个功能强大且易于使用的地理空间类库,它为Java开发者提供了处理和分析地理空间数据的工具和API,广泛应用于GIS、地图制作、空间数据分析等领域。

     

    注:未经本人同意,文章禁止转载!!! 

  • 相关阅读:
    第一次写计算机论文无从下手怎么办?(一) - 易智编译easeediting
    GBase 8c数据类型-二进制类型
    vue和react的区别
    Django--ORM 多表查询
    UE5 c++将自定义UserWdiget添加到对应菜单栏
    免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
    docsify项目部署(华为云+宝塔+centos+docker+nginx)踩坑指南
    神经网络训练结果都是1,神经网络训练效果不好
    速盾:ddos高防ip原理
    mybatis-plus yml配置
  • 原文地址:https://blog.csdn.net/weixin_40986713/article/details/127487344