GIS-Lab: Руководство по PostGIS: 4.8. Клиенты Java (JDBC)

Руководство по 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. Бинарные указатели

...

Последнее обновление: August 14 2008
(Наверх)

Back to top

(С) Виктор Вислобоков, 2008-2023