<<< предыдущая глава | оглавление | следующая глава >>>
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 и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).