三行Java代碼實(shí)現(xiàn)計(jì)算多邊形的幾何中心點(diǎn)
前言
因?yàn)楣ぷ髟O(shè)計(jì)到gis相關(guān)的內(nèi)容,需要計(jì)算采煤機(jī)工作面的中心點(diǎn)。如果套用數(shù)學(xué)的計(jì)算公式,用java去實(shí)現(xiàn),太多麻煩還費(fèi)時比較久,于是我找到j(luò)ava幾何計(jì)算的工具包,幾行代碼就能求出多變形的中心,簡直yyds!!!
廢話不多說直接上代碼,然后再慢慢講解
示例代碼
首先再maven項(xiàng)目的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>
下面代碼以四邊形為例,計(jì)算面積和中心點(diǎn)
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());
//輸出中心點(diǎn)
System.out.println( polygon.getCentroid());
//輸出多邊形面積
System.out.println( polygon.getArea());
}
demo2
public static void main(String[] args) {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
//最后一個點(diǎn)和第一個相同完成多邊形的線段閉合
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);
//輸出中心點(diǎn)
System.out.println( polygon.getCentroid());
//輸出多邊形面積
System.out.println( polygon.getArea());
}
以上代碼值得注意的有兩點(diǎn):
1.坐標(biāo)點(diǎn)的順序必須保證是幾何圖形的相鄰點(diǎn),順時針相連或者逆時針都可以。
2.最后要完成閉合,閉合的方式即最后一個點(diǎn)必須和第一個點(diǎn)相同。
如圖所示,順序按照A->B>C>D,且最后閉合點(diǎn)為A點(diǎn),即開始和最后輸入點(diǎn)為A點(diǎn)

除了四邊形形,五邊形,六邊形,不規(guī)則多邊形,都可以計(jì)算。方法和原理一樣。
輸出結(jié)果實(shí)例
demo1輸出

demo2輸出

到此這篇關(guān)于三行Java代碼實(shí)現(xiàn)計(jì)算多邊形的幾何中心點(diǎn)的文章就介紹到這了,更多相關(guān)Java計(jì)算多邊形的幾何中心點(diǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用JAVA反射,讀取數(shù)據(jù)庫表名,自動生成對應(yīng)實(shí)體類的操作
這篇文章主要介紹了利用JAVA反射,讀取數(shù)據(jù)庫表名,自動生成對應(yīng)實(shí)體類的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java中用Mybatis插入mysql報主鍵重復(fù)的解決方案
這篇文章主要介紹了Java中用Mybatis插入mysql報主鍵重復(fù)的解決方案,具有很好的參考價值,希望對大家有所幫助。2023-02-02
SpringBoot使用AES對JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot使用AES對JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法,文章通過代碼示例介紹的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-08-08
java虛擬機(jī)深入學(xué)習(xí)之內(nèi)存管理機(jī)制
java虛擬機(jī)在程序運(yùn)行時將內(nèi)存劃分為多個區(qū)域,每個區(qū)域作用,生命周期各不相同,下面這篇文章主要給大家介紹了關(guān)于java虛擬機(jī)深入學(xué)習(xí)之內(nèi)存管理機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11
mybatis框架order by作為參數(shù)傳入時失效的解決
這篇文章主要介紹了mybatis框架order by作為參數(shù)傳入時失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢對比
本文給大家介紹如何通過IQuery和IUpdate定義強(qiáng)大的動態(tài)SQL語句,給大家分享Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢講解,感興趣的朋友一起看看吧2021-08-08
JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例
這篇文章主要介紹了JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包
這篇文章主要介紹了Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06

