国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
java操作gis geometry類型資料
pom.xml檔案如下
java讀取資料庫geometry
操作
首頁 Java java教程 如何在Java中操作GIS Geometry類型資料?

如何在Java中操作GIS Geometry類型資料?

Apr 22, 2023 pm 11:10 PM
java gis geometry

java操作gis geometry類型資料

現(xiàn)在做的gis方面的業(yè)務,所以需要操作postgis中的geometry對象,找了很多的函式庫,例如geotools,但是莫名下載不下來。

還有就是jts,但不好用,操作起來很複雜。找到了一個其他的類別庫--geolatte-geom 和geolatte-geojson。

用來運算geometry和String以及json的互相轉(zhuǎn)換。而json和geojson個人理解就是輸出格式不同。多了一些geometry特有的屬性。

主要用於將String轉(zhuǎn)geometry物件、wkt和wkb方便好用。

pom.xml檔案如下

<!-- https://mvnrepository.com/artifact/org.geolatte/geolatte-geom -->
<dependency>
    <groupId>org.geolatte</groupId>
    <artifactId>geolatte-geom</artifactId>
    <version>1.6.0</version>
</dependency>
 
<!-- https://mvnrepository.com/artifact/org.geolatte/geolatte-geojson -->
<dependency>
    <groupId>org.geolatte</groupId>
    <artifactId>geolatte-geojson</artifactId>
    <version>1.6.0</version>
</dependency>
public static void main(String[] args) {
        // 模擬數(shù)據(jù)庫中直接取出的geometry對象值(他是二進制的)
        // WKT 是字符串形式,類似"POINT(1 2)"的形式
        // 所以WKT轉(zhuǎn)  geometry,相當于是字符串轉(zhuǎn)geometry
        // WKB轉(zhuǎn)  geometry,相當于是字節(jié)轉(zhuǎn)geometry
        String s="01020000800200000097E5880801845C404D064F3AF4AE36400000000000000000290A915F01845C40DC90B1A051AE36400000000000000000";
        Geometry geo = Wkb.fromWkb(ByteBuffer.from(s));
 
        // geometry對象和WKT輸出一致
//        Geometry geometry1 = Wkt.fromWkt(wkt);
        System.out.println("-----Geometry------"+geo.getPositionN(1));
        System.out.println("-----wkt------"+ Wkt.toWkt(geo));
        System.out.println("-----wkb------"+Wkb.toWkb(geo));
    }

java讀取資料庫geometry

最近因為需要存一些經(jīng)緯度區(qū)塊資訊到資料庫,所以用到了mysql中的Geometry屬性(幾何對象)。在網(wǎng)路上蒐集了很多資料,到真正用的時候還是各種問題,所以下面推薦一種可能有點笨但是實用的方法(我的使用環(huán)境springboot工具是sts),下面就舉個例子來說明一下。

操作

先了解資料庫中空間資料型別有哪些

##說明簡介範例Geometry#間資料任一空間類型?Point點#座標值#POINT(104.00924 30.46872)#LineString 線線,由一系列點連接而成LINESTRING(1 1, 1 1, 1 1)Polygon多邊形由多條線組成POLYGON((1 1, 2 2, 3 3, 4 4, 5 5))MultiPoint點集合集合類,包含多個點MULTIPOINT(1 1, 2 2, 1 1)MultiLineString線集合集合類,包含多條線MULTILINESTRING((1 1, 2 2), (1 1, 1 1))MultiPolygon多邊形集合集合類,包含多個多邊形MULTIPOLYGON(((0 0 , 1 0, 1 1, 0 1, 0 0)), ((1 1, 1 1, 1 1, 1 1, 1 1)))GeometryCollection空間資料集合集合類,可以包含多個點、線、多邊形GEOMETRYCOLLECTION(POINT(1 1), POINT(3 3), LINESTRING(1 1, 2 2))
類型
接著往資料庫插入一個測試數(shù)據(jù),插入的是一個空間資料集合裡麵包含多個多邊形集合。

INSERT INTO `geometry`(`geome`) VALUES(GeomFromText('GEOMETRYCOLLECTION(MULTIPOLYGON(((104.009241 30.468972,104.009229 30.468496950. 4.009241 30.468972,104.009229 30.468961,104.009225 30.468997))),MULTIPOLYGON(((104.009241 30.468972,104.009229 30.468961,104.009225 30.468997))'

##)'就開始讀取資料

##)就開始了開始讀取資料
##)就開始讀取資料

##)就開始閱讀了資料

##)就開始開始讀取資料

)就開始開始讀取資料

##)就開始閱讀了資料

##)就開始開始讀取資料

)就開始開始讀取資料####)。 ######在pom.xml加入操作Geometry等物件的依賴。 ###
<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
</dependency>
###本來先是想直接在實體類別確定類型直接轉(zhuǎn)對象,但是用了後發(fā)現(xiàn)不行,所以我就直接設定成Object,在mysql中儲存Geometry使用的是二進制,所以下面直接把二進制透過jts轉(zhuǎn)成Geometry物件。 ###
//private Geometry geom; 不可行
private Object geomAsBytes; //可行  最終得到的是一個byte數(shù)組
     //直接把數(shù)據(jù)庫中的byte[]轉(zhuǎn)Geometry對象
  public static Geometry getGeometryByBytes( byte[]  geometryAsBytes) throws Exception {
           Geometry dbGeometry = null;
               // 字節(jié)數(shù)組小于5,說明geometry有問題
               if (geometryAsBytes.length < 5) {
                                     return null;
               }
 
               //這里是取字節(jié)數(shù)組的前4個來解析srid
               byte[] sridBytes = new byte[4];
               System.arraycopy(geometryAsBytes, 0, sridBytes, 0, 4);
               boolean bigEndian = (geometryAsBytes[4] == 0x00);
               // 解析srid
               int srid = 0;
               if (bigEndian) {
                   for (int i = 0; i < sridBytes.length; i++) {
                       srid = (srid << 8) + (sridBytes[i] & 0xff);
                   }
               } else {
                   for (int i = 0; i < sridBytes.length; i++) {
                       srid += (sridBytes[i] & 0xff) << (8 * i);
                   }
               }
               //use the JTS WKBReader for WKB parsing
               WKBReader wkbReader = new WKBReader();
               // 使用geotool的WKBReader 把字節(jié)數(shù)組轉(zhuǎn)成geometry對象。
               byte[] wkb = new byte[geometryAsBytes.length - 4];
               System.arraycopy(geometryAsBytes, 4, wkb, 0, wkb.length);
               dbGeometry = wkbReader.read(wkb);
               dbGeometry.setSRID(srid);
           return dbGeometry;
       }
###完整使用例子,解析資料庫中的geometry對象,得到我們需要的點位資料。 ###
//返回一個區(qū)域集合  區(qū)域由若干個點組成
public List < Area > geometryCollection2PressAreas(byte[] data) {
    List < Area > areas= new ArrayList < > ();
     try {
       //解析出空間集合層
        GeometryCollection geometryCollection = (GeometryCollection) GeometryUtil.getGeometryByBytes(data);
        int geometrySize = geometryCollection.getNumGeometries();
        for (int i1 = 0; i1 < geometrySize; i1++) {
            try {
               //解析出多邊形集合層
                MultiPolygon multiPolygon = (MultiPolygon) geometryCollection.getGeometryN(i1);
                int size = (int) multiPolygon.getNumPoints();
                for (int i = 0; i < size; i++) {
                    try {
                        //解析出多邊形
                        Polygon polygon = (Polygon) multiPolygon.getGeometryN(i);
                        //解析出多邊形中的多個點位
                        Coordinate[] coordinates2 = polygon.getCoordinates();
                        int size2 = coordinates2.length;
                        Area area = new Area();
                        area.area_pts = new ArrayList < > ();
                        for (int j = 0; j < size2; j++) {
                            //點位對象 就一個x,一個y數(shù)據(jù)
                            Point point = new Point();
                            point.x = coordinates2[j].x;
                            point.y = coordinates2[j].y;
                            //點位集合
                            area.area_pts.add(point);
                        }
                        areas.add(area);
                    } catch (Exception e) {
                        break;
                    }
                }
            } catch (Exception e) {
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return areas;
}

以上是如何在Java中操作GIS Geometry類型資料?的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常並關閉連接,避免連接洩漏;此外建議使用連接池、設置保存點實現(xiàn)部分回滾,並保持事務盡可能短以提升性能。

了解Java虛擬機(JVM)內(nèi)部 了解Java虛擬機(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡端口和防火牆 了解網(wǎng)絡端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存洩漏風險。 1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對像被標記為垃圾。 2.基於標記-清除算法,標記所有可達對象,清除未標記對象。 3.採用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應用;ParallelGC提升吞吐量;CMS降

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

以身作則,解釋說明 以身作則,解釋說明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時立即求值,函數(shù)按後進先出(LIFO)順序執(zhí)行;1.多個defer按聲明逆序執(zhí)行;2.常用於文件關閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

See all articles