Java 使用JTS拓扑套件解析WKB字符串
几天来,我一直在与WKB字符串作斗争。我需要能够解析它,以便获得等效的几何体并提取点坐标(X,Y,Z)我无法使用PostGIS功能。 我找到的唯一java库是JTS拓扑套件,我使用它如下:Java 使用JTS拓扑套件解析WKB字符串,java,jts,wkb,Java,Jts,Wkb,几天来,我一直在与WKB字符串作斗争。我需要能够解析它,以便获得等效的几何体并提取点坐标(X,Y,Z)我无法使用PostGIS功能。 我找到的唯一java库是JTS拓扑套件,我使用它如下: String wkb = "01ea030000020000009b4d3899fe95154153d97e8f43875941000000000000454003085bc23f9615411b4dc406578759410000000000004740" byte[] aux = WKBReader.he
String wkb = "01ea030000020000009b4d3899fe95154153d97e8f43875941000000000000454003085bc23f9615411b4dc406578759410000000000004740"
byte[] aux = WKBReader.hexToBytes(wkb);
try {
Geometry geom = new WKBReader().read(aux);
} catch (ParseException e) {
e.printStackTrace();
System.err.println("Bad WKB string.");
}
但它给了我以下错误:
com.solutions.jts.io.ParseException:未知WKB类型234
234是十六进制字符串“ea”的十进制值。这就像JTS库只查看前2个字节,而不是4个字节“ea03”,它们对应于little endian中的1002(因此是LineStringZ)
我的问题是:JTS拓扑套件是否处理LineStringZ?如果不是,为什么点可以有Z值?我怎样才能正确地解析它呢
谢谢你的阅读 JTs仅支持二维几何图形,不支持Z值。点中只有X和Y。JTS至少在读写方面支持3D几何图形。支持可能是2.5D而不是真实的3D,但Z值仍在操作中进行。问题是在WKB中呈现XYZ、XYM和XYZM几何图形有两种方式。JTS支持PostGIS EWKB变体,从源代码文件中的注释可以看出
- 此实现还支持扩展的WKB
- 标准。扩展WKB允许写入三维坐标
- 并包括几何体SRID值李>
- 表示存在三维坐标
- 通过设置wkbType字的高位
- 表示存在SRID
- 通过设置wkbType字的第三位
- EWKB格式与原始SFS WKB格式向上兼容
JTS不理解四位几何类型代码。此邮件线程提供了一些详细信息。JTS拓扑套件支持三维数据,但采用EWKB格式。不支持ISO WKB。如果恰好您使用的是postgis,那么它支持EWKB。ST_GeomefromEWB ST_AsEWKB 此外,如果使用WKBWriter编写EWKB,请不要忘记指定输出调光:
WKBWriter wkbw = new WKBWriter(3);