三行Java代码实现计算多边形的几何中心点

目录
  • 前言
  • 示例代码

前言

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

废话不多说直接上代码,然后再慢慢讲解

示例代码

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

    <properties>
        <java.version>1.8</java.version>
        <maven.plugin.version>3.8.1</maven.plugin.version>
        <spring.boot.version>2.1.16.RELEASE</spring.boot.version>
        <bladex.project.version>2.6.0.RELEASE</bladex.project.version>
        <spring.platform.version>Cairo-SR8</spring.platform.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
        <geotools.version>28-SNAPSHOT</geotools.version>
    </properties> 

    <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-main</artifactId>
            <version>${geotools.version}</version>
     </dependency>

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

demo1

    public static void main(String[] args) {
        GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
        CoordinateList coords=new CoordinateList();
        coords.add(new Coordinate(3630789.1856605336, 3.943998533907477E7));
        coords.add(new Coordinate(3630480.3613995733, 3.944116440724006E7));
        coords.add(new Coordinate(3630128.8984496593, 3.944109300504929E7));
        coords.add(new Coordinate(3630408.0016770884, 3.943992775038134E7));
        //闭合
        coords.closeRing();
        Polygon polygon = geometryFactory.createPolygon(coords.toCoordinateArray());
        //输出中心点
        System.out.println( polygon.getCentroid());
        //输出多边形面积
        System.out.println( polygon.getArea());

    }

demo2

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

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

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

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

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

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

输出结果实例

demo1输出

demo2输出

到此这篇关于三行Java代码实现计算多边形的几何中心点的文章就介绍到这了,更多相关Java计算多边形的几何中心点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java判断某个点是否在所画多边形/圆形内

    本文实例为大家分享了java判断某个点是否在所画范围内的具体代码,供大家参考,具体内容如下 IsPtInPoly.java package com.ardo.util.circle; import java.util.ArrayList; import java.util.List; /** * java判断某个点是否在所画范围内(多边形[isPtInPoly]/圆形[distencePC]) * @param point 检测点 * @param pts 多边形的顶点 * @return 点在

  • 使用JAVA判断凸多边形的示例代码

    复制代码 代码如下: 以HDU2108为例,去AC吧.//点逆序输入import java.util.Scanner;//1spublic class HDU2108 {  public static void main(String[] args) {    Scanner sc = new Scanner(System.in);    while(true) {      int x,y;      int n = sc.nextInt();      if(0==n) {        b

  • Java多边形重心计算

    多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + - + xnwn)/W y = (y1w1 + y2w2 + - + ynwn)/W import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Polygon; import org.locationt

  • java和matlab画多边形闭合折线图示例讲解

    1.使用matlab作闭合多边形图 没有找到直接画多边形的函数,只能是将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第一个点连接.下面是一个示例的.m文件: 复制代码 代码如下: clear;clc;a=[0 2 4 6 8 10 12 14;0 2 1 4 6 6 5 7];  %要连接的点坐标 x;y[n,m]=size(a);for i=1:m-1;    line([a(1,i),a(1,i+1)],[a(2,i),a(2,i+1)]);  %连接节点line([

  • 三行Java代码实现计算多边形的几何中心点

    目录 前言 示例代码 前言 因为工作设计到gis相关的内容,需要计算采煤机工作面的中心点.如果套用数学的计算公式,用java去实现,太多麻烦还费时比较久,于是我找到java几何计算的工具包,几行代码就能求出多变形的中心,简直yyds!!! 废话不多说直接上代码,然后再慢慢讲解 示例代码 首先再maven项目的pom文件中引入依赖 <properties> <java.version>1.8</java.version> <maven.plugin.version&

  • Java编程实现计算两个日期的月份差实例代码

    本文实例主要实现计算两个日期的月份差,具体如下: package com.forezp.util; import org.joda.time.DateTime; import org.joda.time.Months; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; /** * 在JAVA中,如何计算两个日期的月份差?<br> * * * @author Adm

  • JAVA 根据身份证计算年龄的实现代码

    下面一段代码给大家分享java根据身份证计算年龄的方法,具体代码如下所示: birthDate = idCard.substring(6,10)+"-"+idCard.substring(10,12)+"-"+idCard.substring(12,14) public static int getAgefromBirthTime(String birthTimeString){ // 先截取到字符串中的年.月.日 String strs[] = birthTime

  • XML到Java代码的数据绑定之对象

    在这个由四部分组成的系列文章的第一部分,我们将弄清什么是数据绑定,与在 Java 应用程序中处理 XML 数据的其它方法相比它有什么优势,以及如何开始使用它.这一部分将考查为什么使用数据绑定,以及如何为各种约束建立模型,使 XML 文档能转换成 Java 对象.同时还涵盖用于生成数据绑定类的输入和输出. 您希望在您的 Java 应用程序中使用 XML 吗?那么好,同成千上万的其他人一起上这条船吧.当您深入了解 XML 以后,也许您会发现 DOM 和 SAX API(请参阅参考资料)不过是唬人的东

  • 利用RJB在Ruby on Rails中使用Java代码的教程

    开始之前 关于本教程 Ruby on Rails (Rails) 是用 Ruby 编写的一个 full-stack Web 应用程序框架,而 Ruby 是一种功能丰富的.免费的.可扩展的.可移植的.面向对象的脚本编制语言.Rails 在 Web 应用程序开发人员之间非常流行.通过它,可以快速有效地开发 Web 应用程序,并将其部署到任何 Web 容器中,例如 IBM? WebSphere? 或 Apache Tomcat. 在 Rails 和类似的 Web 应用程序开发框架出现之前,用于 Web

  • java代码之谜运算符篇

    从最简单的运算符加号(+)说起,加号(+)是个二元运算符--也就是说,加号只把两个数联接起来,从来不把第三个或者更多的联接起来. 因此,"1加2加3" 在计算机中被表述为: (1 + 2) + 3 // a或者 1 + (2 + 3) // b虽然我们通常写做 1 + 2 + 3,但是并不意味这它和我们数学中的 1+2+3 是等价的. 那么数学中的 1+2+3 到底表示的是 a 呢,还是 b 呢? 如果计算机的求值是左结合的,那么此表达式等价于第一种a: 如果是右结合的,那么此表达式等

  • java代码效率优化方法(推荐)

    1. 尽量指定类的final修饰符 带有final修饰符的类是不可派生的. 如果指定一个类为final,则该类所有的方法都是final.Java编译器会寻找机会内联(inline)所有的 final方法(这和具体的编译器实现有关).此举能够使性能平均提高50% . 2. 尽量重用对象. 特别是String 对象的使用中,出现字符串连接情况时应用StringBuffer 代替.由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理.因此,生成过多的对象将会给程序的性能带来很大

  • 70行Java代码实现深度神经网络算法分享

    对于现在流行的深度学习,保持学习精神是必要的--程序员尤其是架构师永远都要对核心技术和关键算法保持关注和敏感,必要时要动手写一写掌握下来,先不用关心什么时候用到--用不用是政治问题,会不会写是技术问题,就像军人不关心打不打的问题,而要关心如何打赢的问题. 程序员如何学习机器学习 对程序员来说,机器学习是有一定门槛的(这个门槛也是其核心竞争力),相信很多人在学习机器学习时都会为满是数学公式的英文论文而头疼,甚至可能知难而退.但实际上机器学习算法落地程序并不难写,下面是70行代码实现的反向多层(BP

  • 200行Java代码编写一个计算器程序

    发现了大学时候写的计算器小程序,还有个图形界面,能够图形化展示表达式语法树,哈哈;) 只有200行Java代码,不但能够计算加减乘除,还能够匹配小括号~ 代码点评: 从朴素的界面配色到简单易懂错误提示,无不体现了"用户体验"至上的设计理念:代码异常处理全面合理.滴水不漏,代码缩进优雅大方,变量命名直观易懂:再结合长度适中简单明了的注释,程序整体给人一种清新脱俗之感.背后不难看出作者对学习的热爱以及对设计的苛求,工匠精神可见一斑,真可谓是大学数据结构学以致用的典范! 实现代码如下所示:

  • Java实现的计算最大下标距离算法示例

    本文实例讲述了Java实现的计算最大下标距离算法.分享给大家供大家参考,具体如下: 题目描述 给定一个整形数组,找出最大下标距离j−i, 当且A[i] < A[j] 和 i < j 解法 复杂度:三次扫描,每次的复杂度O(N) 算法:{5,3,4,0,1,4,1} 找出从第一个元素开始的下降序列{5,3,0} i=3,j=6, j从尾部扫描 初始化,i=3, j=6, A[i]=0 实现代码 public static int maxindexdistance(int A[]) { boole

随机推荐