我的目标:从存储在PostGIS数据库中的地理多边形中读取点。
PostGIS手册提供了一个极好的示例,展示如何从数据库中提取多边形。
PGgeometry geom = (PGgeometry)r.getObject(1);
if (geom.getType() == Geometry.POLYGON ) {
Polygon pl = (Polygon)geom.getGeometry();
for (int r = 0; r < pl.numRings(); r++) {
LinearRing rng = pl.getRing(r);
System.out.println("Ring: " + r);
for (int p = 0; p < rng.numPoints(); p++ ) {
Point pt = rng.getPoint(p);
System.out.println("Point: " + p);
System.out.println(pt.toString());
}
}
}
我正在处理地理信息而不是几何信息,所以这段代码对我来说并不太适用。如果我尝试从我的表格中提取一个多边形,我会得到以下的 ClassCastException
异常:
org.postgresql.util.PGobject cannot be cast to org.postgis.PGgeometry
我将前两行修改成了这样,它可以正常工作:
PGobject area = (PGobject)rs.getObject("area");
if (area.getType().compareTo("geography") == 0) {
...
}
我现在的问题是,我不知道如何修改代码示例的第三行以使其适用于地理信息。我可能不应该将其转换为Polygon
类型,因为那只适用于几何信息,但是是否有适用于地理信息的等效物呢?我知道地理信息只有部分功能得到了支持,所以我不确定我在这里可以做什么。
st_geometryn
和st_pointn
吗?伪代码:while (st_geometryn(i)) { while (st_pointn(k)) { process_pt(); k++ } i++ }
? - unmountedGEOMETRY
。 - Mike TST_AsText(polygon)
并从中解析出点即可。尽管如此,通过JDBC完成这项任务似乎必须有更好的方法,只是我不知道而已。 - Steph