Mi objetivo: leer los puntos de un polígono de geografía almacenado en mi base de datos PostGIS.Leer puntos de un polígono de geografía en una base de datos PostGIS
El manual de PostGIS tiene a great example de cómo extraer un polígono de una base de datos.
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());
}
}
}
Estoy tratando con Geografía, sin embargo, no Geometría, por lo que este código no funciona para mí. Si trato de extraer un polígono de mi mesa, me sale el siguiente ClassCastException
:
org.postgresql.util.PGobject cannot be cast to org.postgis.PGgeometry
He modificado las dos primeras líneas para tener este aspecto, que trabaja:
PGobject area = (PGobject)rs.getObject("area");
if (area.getType().compareTo("geography") == 0) {
...
}
Mi problema ahora es que no puedo descifrar cómo modificar la tercera línea de la muestra del código para trabajar en Geografía. Probablemente no debería lanzarlo al tipo Polygon
, ya que eso es para Geometría, ¿pero hay un equivalente para Geografía? Sé que Geography es solo parcialmente compatible con muchas cosas, así que no estoy seguro de lo que puedo o no puedo hacer aquí.
¿Has probado 'st_geometryn' y' st_pointn'? Pseudocódigo: 'while (st_geometryn (i)) {while (st_pointn (k)) {process_pt(); k ++} i ++} '? – unmounted
necesita convertir el polígono a 'GEOMETRY' del servidor de alguna manera –
@bvmou: ST_GeometryN y ST_PointN solo funcionan para Geometry, mientras estoy trabajando con Geography. Sin embargo, no había considerado tratar de recuperar los puntos en el lado de la base de datos, en lugar de hacerlo en Java.Supongo que podría hacer un 'ST_AsText (polygon)' y analizar los puntos si no puedo encontrar nada mejor. Aún así, parece que debe haber una mejor forma de hacerlo a través de JDBC, simplemente no lo sé. – Steph