java操作gis geometry类型数据
最近做的gis方面的业务,所以需要操作postgis中的geometry对象,找了很多的库,比如geotools,但是莫名下载不下来。
还有就是jts,但是不好用,操作起来很复杂。找到了一个其他的类库--geolatte-geom 和geolatte-geojson。
用于操作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)) |