GIS-LAB

Географические информационные системы и дистанционное зондирование

Руководство по PostGIS

4.8. Клиенты Java (JDBC)

<<< предыдущая глава | оглавление | следующая глава >>>

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 предоставляет справку по различным функциям доступа к данным в геометрических объектах.

4.9. Клиенты C (libpq)

...

4.9.1. Текстовые указатели

...

4.9.2. Бинарные указатели

...

<<< предыдущая глава | оглавление | следующая глава >>>

Обсудить в форуме Комментариев — 21

Последнее обновление: December 01 2008