我的目标:读取存储在我的PostGIS数据库中的地理多边形中的点。从PostGIS数据库中的地理多边形中读取点
PostGIS手册中有关于如何从数据库中提取多边形的a great example。
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 ++}'? – unmounted
您需要将多边形从服务器以某种方式投射到“GEOMETRY” –
@bvmou:ST_GeometryN和ST_PointN仅适用于几何,而我正在使用地理。虽然我没有考虑尝试在数据库端检索点,而不是在Java端。我想我可以只是做一个'ST_AsText(多边形)'并且解析出那些点,如果我无法找出更好的结果。尽管如此,似乎通过JDBC必须有更好的方法来做到这一点,我只是不知道它。 – Steph