三行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)時(shí)比較久,于是我找到j(luò)ava幾何計(jì)算的工具包,幾行代碼就能求出多變形的中心,簡(jiǎn)直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();
//最后一個(gè)點(diǎn)和第一個(gè)相同完成多邊形的線段閉合
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),順時(shí)針相連或者逆時(shí)針都可以。
2.最后要完成閉合,閉合的方式即最后一個(gè)點(diǎn)必須和第一個(gè)點(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比
這篇文章主要介紹了詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
使用Spring boot標(biāo)記一個(gè)方法過時(shí)
這篇文章主要介紹了使用Spring boot標(biāo)記一個(gè)方法過時(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
基于mybatis注解動(dòng)態(tài)sql中foreach工具的方法
這篇文章主要介紹了mybatis注解動(dòng)態(tài)sql中foreach工具方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
MyBatis配置的應(yīng)用與對(duì)比jdbc的優(yōu)勢(shì)
這篇文章主要介紹了MyBatis配置的使用與相對(duì)于jdbc的優(yōu)勢(shì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
SpringSecurity框架下實(shí)現(xiàn)CSRF跨站攻擊防御的方法
CSRF是一種網(wǎng)絡(luò)攻擊方式,也可以說是一種安全漏洞,這種安全漏洞在web開發(fā)中廣泛存在。這篇文章主要介紹了SpringSecurity框架下實(shí)現(xiàn)CSRF跨站攻擊防御,需要的朋友可以參考下2019-12-12
基于params、@PathVariabl和@RequestParam的用法與區(qū)別說明
這篇文章主要介紹了方法參數(shù)相關(guān)屬性params、@PathVariabl和@RequestParam用法與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
解決Eclipse中java文件的圖標(biāo)變成空心J的問題
這篇文章主要介紹了解決Eclipse中java文件的圖標(biāo)變成空心J的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Idea如何關(guān)閉或開啟引用提示Usages和Annotations
這篇文章主要介紹了Idea如何關(guān)閉或開啟引用提示Usages和Annotations問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

