<<< предыдущая глава | оглавление | следующая глава >>>
Java-клиенты имеют доступ к объектам "geometry" PostGIS в базе данных PostgreSQL одним из двух способов: непосредственно, в тестовом представлении, или с использованием расширения объектов JDBC, связанного с PostGIS. В порядке использования расширенных объектов, файл "postgis.jar" должен находиться в вашем CLASSPATH вместе с с пакетом драйвера JDBC "postgresql.jar".
import java.sql.*; import java.util.*; import java.lang.*; import org.postgis.*; public class JavaGIS { public static void main(String[] args) { java.sql.Connection conn; try { /* * Загрузка драйвера JDBC и установление соединения. */ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost:5432/database"; conn = DriverManager.getConnection(url, "postgres", ""); /* * Добавляем геометрические типы в соединение. * Заметим, что вы должны установить специальное соединение с pgsql * до вызова метода addDataType(). */ ((org.postgresql.Connection)conn).addDataType("geometry","org.postgis.PGgeometry") ; ((org.postgresql.Connection)conn).addDataType("box3d","org.postgis.PGbox3d"); /* * Создаем объект запроса и выполняем запрос select. */ Statement s = conn.createStatement(); ResultSet r = s.executeQuery("select AsText(geom) as geom,id from geomtable"); while( r.next() ) { /* * Восстанавливаем геометрию как объект, какого то из геометрических типов. * Выводим его. */ PGgeometry geom = (PGgeometry)r.getObject(1); int id = r.getInt(2); System.out.println("Row " + id + ":"); System.out.println(geom.toString()); } s.close(); conn.close(); } catch( Exception e ) { e.printStackTrace(); } } }
Объект "PGgeometry" является оберткой объекта, который содержит объект топологической геометрии (подкласс абстрактного класса "Geometry") одного из следующих типов: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon.
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()); } } }
Для расширенных объектов JavaDoc предоставляет справку по различным функциям доступа к данным в геометрических объектах.
...
...
...
<<< предыдущая глава | оглавление | следующая глава >>>
Обсудить в форуме Комментариев 21
Последнее обновление: December 01 2008
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).