java 操作gis geometry空间类型数据方式

java操作gis geometry类型数据

最近做的gis方面的业务,所以需要操作postgis中的geometry对象,找了很多的库,比如geotools,但是莫名下载不下来。

还有就是jts,但是不好用,操作起来很复杂。找到了一个其他的类库--geolatte-geom 和geolatte-geoon。

用于操作geometry和String以及json的互相转化。而json和geojson个人理解就是输出格式不同。多了一些geometry特有的属性。

主要用于将String转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>

我们在main方法中测试一下

public static void main(String[] args) {
     // 模拟数据库中直接取出的geometry对象值(他是二进制的)
     // WKT 是字符串形式,类似"POINT(1 2)"的形式
     // 所以WKT转 geometry,相当于是字符串转geometry
     // WKB转 geometry,相当于是字节转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));
     }

Geometry空间类型主要有那些如下:

类型 说明 简介 例子 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))
经验分享 程序员 微信小程序 职场和发展