• Keine Ergebnisse gefunden

7 Application Programming

N/A
N/A
Protected

Academic year: 2021

Aktie "7 Application Programming"

Copied!
61
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

7.1 Connecting SQL with Programming Languages 7.2 Postgres and JDBC

7.3 Oracle Spatial and JDBC

7.4 Processing of GML- based Data

7.5 Functional Programming with Polygons

7.6 Summary

7 Application Programming

(2)

Even with spatial extensions core SQL is not computational complete

However, numerous applications (e.g. shape

simplifications) are impossible to solve (or very difficult) without computational completeness

Connecting SQL with programming languages is needed for geometric/spatial applications

7 Application Programming

(3)

Current SQL programming interfaces are

Embedding

Call level interface

Both interfaces have to bridge the

"impedance mismatch"

(record oriented

programming language vs. set oriented

database language)

7.1 Connecting SQL with Programming Languages

(4)

Embedding (Embedded SQL)

Both languages (SQL and programming language) remain unchanged to a large extent

SQL statements are pre-fixed with the keyword EXEC SQL

A precompiler parses and compiles the SQL statements Variables of the programming

language which are occurring

in SQL statements are marked by ":"

SQL communication area contains status information about results of SQL

statement

7.1 Connecting SQL with Programming Languages

(5)

Example (embedded SQL and C)

7.1 Connecting SQL with Programming Languages

/* C-includes for input/output and string processing */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

/* include for interacting with the database */

#include <sqlenv.h>

/* declaration of the SQL communication area */

EXEC SQL INCLUDE SQLCA;

main()

{ /* declaration of C variables used in SQL statements */

EXEC SQL BEGIN DECLARE SECTION;

char name[20];

char department[20];

EXEC SQL END DECLARE SECTION;

(6)

7.1 Connecting SQL with Programming Languages

/* cursor declaration for query */

EXEC SQL DECLARE C1 CURSOR FOR SELECT name, department

FROM professors ORDER BY name;

/* connect to the database and open the cursor */

EXEC SQL CONNECT TO unidb;

EXEC SQL OPEN C1;

/* while there are tuples available... */

while(strncmp(sqlca.sqlstate, "02000", 5)) { /* assign tuple attributes to C variables */

/* and write out values of the variables */

EXEC SQL FETCH C1 INTO :name, :department;

printf("%s %s\n", name, department);

}

(7)

7.1 Connecting SQL with Programming Languages

Ahn mathematics

Balke computer science Eick mathematics

Fekete computer science Kemnitz mathematics

Langemann mathematics Sonar mathematics

Wolf computer science Zimmermann mathematics

/* close cursor and close database connection */

EXEC SQL CLOSE C1;

EXEC SQL DISCONNECT CURRENT;

return;

}

(8)

Embedded SQL also allows construction of queries at runtime (Dynamic SQL)

The query is constructed as value of an application program’s text variable

The PREPARE statement translates the query into

executable object code and assigns it to an SQL variable of type STATEMENT

EXECUTE executes the query

At runtime schema information is made available with the

DESCRIBE command

7.1 Connecting SQL with Programming Languages

(9)

SQLJ is the direct adaptation of embedded SQL to Java

Embedding of (static) SQL statements into Java code

ANSI standard, developed in cooperation of several companies

Embedded SQL statements can be checked syntactically and semantically at compile time (even against the schema of a database)

SQL statements are pre-fixed with "#sql"

Usage of variables in the same way as with static embedded SQL

As a result of a query an SQLJ iterator is generated

7.1 Connecting SQL with Programming Languages

http://www.oracle.com/

(10)

SQLJ system components

7.1 Connecting SQL with Programming Languages

[SaS03]

(11)

SQLJ example

7.1 Connecting SQL with Programming Languages

#sql public iterator BookIter(String title, double price);

try{

// open connection

Connection con = DriverManager.getConnection(url, user, passwd);

DefaultContext ctx = newDefaultContext(con);

DefaultContext.setDefaultContext(ctx);

// execution of query BookIter iter;

#sql iter= SELECT title, price FROM book;

while(iter.next())

System.out.println(iter.title() + ", " + iter.price());

} catch (SQLException exc)

{System.out.println(exc);

}

(12)

Call Level Interface, CLI

In application programs database functions are realized by means of external

procedures (methods)

Rough classification yields 6 groups

Logon/logoff, password/identification

Declaration of program variables

Compile/execute SQL statements

Result processing

Error handling

Transaction management

7.1 Connecting SQL with Programming Languages

(13)

Current call interface for Java: JDBC (Java Database Connectivity)

Relies on Java base classes

Provides methods for

accessing any (relational) database from

Java applications

7.1 Connecting SQL with Programming Languages

(14)

Java package java.sql with classes

Driver Manager: entry point, to load drivers Connection: database connection

Statement: execution of instructions via a connection ResultSet: manages results of a queries, access to

individual tuples and attributes

7.1 Connecting SQL with Programming Languages

http://www-vs.informatik.uni-ulm.de:81/

(15)

Driver concept

Driver manager

Abstract classes for database access Dynamic loading of drivers

Selection of the appropriate driver via connection data

7.1 Connecting SQL with Programming Languages

(16)

Typical sequence

Establishing a connection to the database

Specifying the connection information

Selecting and loading of the driver

Sending an SQL statement

Definition of the statement

Assignment of parameters

Processing the query results

Navigating in the resultset

Accessing attributes

7.1 Connecting SQL with Programming Languages

DriverManager

Connection

Statement

ResultSet Statement Statement

getConnection()

executeQuery()

createStatement()

(17)

JDBC example

7.1 Connecting SQL with Programming Languages

import java.sql.*;

public class Sample {

public static void main(String args[]) { ResultSet rs=null;

Statement stmt=null;

Connection con=null;

try {

// load driver for postgresql:

Class.forName("org.postgresql.Driver");

// connect to the database 'sample' on postgres // at the site it177.idb.cs.tm-cu.de with port 4742 con=DriverManager.getConnection(

"jdbc:postgresql://it177.idb.cs.tm-cu.de:4742/sample", "mueller", // username

"pwmller"); // password

(18)

7.1 Connecting SQL with Programming Languages

// create a new statement stmt=con.createStatement();

// select name, zip code, and cities of all persons (ordered by name) rs=stmt.executeQuery("SELECT name, zipCode, city"+

"FROM person"+

"ORDER BY name");

// display result on screen if (!rs.next()) { // no result

System.out.println("\nWho deleted the data?\n");

} else { // normal case ...

System.out.println("\nname zip city”);

do {

String name=rs.getString("name")+" ";

System.out.println(name.substring(0,25)+" | "+

rs.getInt("zipCode")+" "+ rs.getString(3));

} while (rs.next());

}

(19)

7.1 Connecting SQL with Programming Languages

} catch (ClassNotFoundException c) { System.err.println(

"\nA class could not be found"+

"(Error message:\n\n\t"+c.getMessage()));

} catch (SQLException se) { System.err.println(

"\nThere was an (unexpected?) SQL Error!" + se.getMessage()+"\n"); }

// close of ResultSet, Statement, Connection try { rs.close(); } catch (Exception ex) { } try { stmt.close(); } catch (Exception ex) { } try { con.close(); } catch (Exception ex) { } } }

(20)

Postgres is a relational database system with spatial data types and corresponding SQL

extensions (see section 4.5)

Following data types are offered

Point (float, float) Box (point, point) Lseg (point, point)

Path (point1, point2, ..., pointn)

Polygon (point1, point2, ..., pointn) Circle (point, float)

7.2 Postgres and JDBC

(21)

Numerous geometric predicates and functions

Spatial data types can be used for attributes in the usual way

Values of spatial data types are listed as appropriate character strings

7.2 Postgres and JDBC

CREATE TABLE buildings (id CHAR(25),

typeOfUse CHAR(25),

groundPlan POLYGON(50), PRIMARY KEY(id));

INSERT INTO buildings VALUES ( ’B4211’,’police’,

’((12125,1333),(13430,1560),(13260,2497), (14111,2695),(14111,2638),(16040,3092), (15303,6468),(13345,5958),(13771,3943), (12948,3773),(12948,3887),(11671,3631))’);

(22)

For processing geometric attributes special Java classes and methods are offered

They are subclasses of class "PGobject"

public class Pgobject extends java.lang.Object implements java.io.Serializable, java.lang.Cloneable

Subclasses are PGpoint, PGbox, PGlseg, PGline, PGpolygon, PGcircle

Each subclass includes the following methods

Constructor

equals compares two objects of the same type getValue returns the object as a string

7.2 Postgres and JDBC

(23)

Example: constructor for circle

7.2 Postgres and JDBC

/** * @param c PGpoint describing * the circle’s center * @param r radius of circle

*/

public PGcircle(PGpoint c, double r) { this();

this.center = c;

this.radius = r;

}

(24)

Example: equals for polygon

7.2 Postgres and JDBC

/** * @param obj Object to compare with

* @return true if the two polygons are identical */

public boolean equals(Object obj) { if (obj instanceof PGpolygon) {

PGpolygon p = (PGpolygon)obj;

if (p.points.length != points.length) return false;

for (int i = 0;i < points.length;i++) if (!points[i].equals(p.points[i])) return false;

return true;

}

return false;

}

(25)

Example: getValue for polygon

7.2 Postgres and JDBC

/** * @return the PGpolygon in the syntax expected * by org.postgresql

*/

public String getValue()

{ StringBuffer b = new StringBuffer();

b.append("(");

for (int p = 0;p < points.length;p++) {

if (p > 0)

b.append(",");

b.append(points[p].toString());

}

b.append(")");

return b.toString();

}

(26)

For transferring non spatial tuple attributes into Java variables there are specific methods (of the class ResultSet), including:

getBoolean, getByte, getDate, getDouble, getFloat, getInt, getObject, getString, getTime

However, there are no methods

getPoint, getBox, getLseg, getLine, getPolygon, getCircle

For transferring spatial tuple attributes therefore the method "GetObject" is used with casting the result to an appropriate sub-class of "PGobject"

7.2 Postgres and JDBC

(27)

Example of an application program with spatial data types, Postgres, and JDBC

7.2 Postgres and JDBC

import java.sql.*;

// the spatial data types point and circle are used import org.postgresql.geometric.PGpoint;

import org.postgresql.geometric.PGcircle;

public class GeometricTest { // the main method with

// - load driver for postgresql

// - connect to the database 'test' on postgres on server localhost port 5432 // - create table geomtest

// - methods insertCircle and retrieveCircle are called // - disconnect and close the database

public static void main(String args[]) throws Exception { Class.forName("org.postgresql.Driver");

String url = "jdbc:postgresql://localhost:5432/test";

(28)

7.2 Postgres and JDBC

Connection conn = DriverManager.getConnection(url,"test","");

Statement stmt = conn.createStatement();

// Table geomtest only has the single attribute mycirc // with the data type circle

stmt.execute("CREATE TEMP TABLE geomtest(mycirc circle)");

stmt.close();

insertCircle(conn);

retrieveCircle(conn);

conn.close();

}

// method insertCircle inserts a circle into the

// table mycirc (one tuple with one attribute value)

private static void insertCircle(Connection conn) throws SQLException { // construction of the circle with center and radius

PGpoint center = new PGpoint(1, 2.5);

double radius = 4;

PGcircle circle = new PGcircle(center, radius);

(29)

7.2 Postgres and JDBC

// prepare of insert with "?" as parameter

PreparedStatement ps = conn.prepareStatement(

"INSERT INTO geomtest(mycirc) VALUES (?)");

// set the parameter and execute the statement ps.setObject(1, circle);

ps.executeUpdate();

ps.close();

}

// method retrieveCircle retrieves a circle with // its calculated area from the table mycirc

private static void retrieveCircle(Connection conn) throws SQLException { Statement stmt = conn.createStatement();

// query for the circle and its area ResultSet rs = stmt.executeQuery(

"SELECT mycirc, area(mycirc) FROM geomtest");

rs.next();

// fetch data of circle via GetObject and cast on PGcircle PGcircle circle = (PGcircle)rs.getObject(1);

(30)

7.2 Postgres and JDBC

// fetch calculated area of circle via getDouble double area = rs.getDouble(2);

// extract center and radius PGpoint center = circle.center;

double radius = circle.radius;

// output of all data

System.out.println("Center (X, Y) = (" + center.x + ", " + center.y + ")");

System.out.println("Radius = " + radius);

System.out.println("Area = " + area);

} }

(31)

Extension of the Oracle database system

One single geometric data type, which is very specific (see section 4.5)

7.3 Oracle Spatial and JDBC

CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);

(32)

Overview of the components of Oracle Spatial

7.3 Oracle Spatial and JDBC

(33)

Spatial data type can be used for attributes in the usual way

Values of spatial data type are listed as appropriate character strings

7.3 Oracle Spatial and JDBC

CREATE TABLE buildings (id CHAR(25),

typeOfUse CHAR(25),

groundPlan SDO_GEOMETRY, PRIMARY KEY(id));

INSERT INTO buildings VALUES (’B4211’,’police’,

SDO_GEOMETRY(SDO_GTYPE=1003, SDO_SRID=NULL, SDO_POINT=NULL, SDO_ELEM INFO = (1,1003,1),

SDO_ORDINATES=(12125,1333,13430, 1560,13260,2497,14111,2695,14111, 2638,16040,3092,15303,6468,13345, 5958,13771,3943,12948,3773,12948,

(34)

For processing geometric attributes the special Java class "JGeometry" is provided

JGeometry maps the SDO_GEOMETRY data type (STRUCT) to a more convenient class

Numerous basic methods for accessing spatial information are offered, including

createCircle, createPoint, createLinearPolygon, equals, getDimensions, getElemInfo, getFirstPoint, getJavaPoint, getJavaPoints, getLastPoint, getNumPoints,

getOrdinatesArray, getSize, getType, isCircle, isPoint, isRectangle, load, setType, store, toString

7.3 Oracle Spatial and JDBC

(35)

Generic example

7.3 Oracle Spatial and JDBC

// read geometry from database

ResultSet rs = statement.executeQuery(

"SELECT geometry FROM states WHERE name = ’Florida’");

STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);

// convert STRUCT to JGeometry

JGeometry j_geom = JGeometry.load(st);

// ... manipulate geometry, or create new geometry...

// prepare to write back geometry to database

PreparedStatement ps = connection.prepareStatement(

"UPDATE states SET geometry=? WHERE name=’Florida’");

// convert JGeometry to STRUCT

STRUCT obj = JGeometry.store(j_geom, connection);

ps.setObject(1, obj);

ps.execute();

(36)

GML is an important XML-based standard for exchanging spatial data (see section 6.3)

Reading, processing, and output of GML data is a typical sequence of tasks in GIS context

Example: placement of symbol

signatures in GML-coded polygons of buildings (see section 3.4)

7.4 Processing of GML-based Data

(37)

Processing of XML documents with Java is frequently done via SAX or DOM

SAX (Simple API for XML)

Event based programming interface

Provides methods for detecting of "document events" via event handler (e.g. startDocument,

startElement, characters)

DOM (Document Object Model)

Object based programming interface

Provides classes for handling documents (including Node, NodeList, Element, Text)

7.4 Processing of GML-based Data

(38)

Using the Document Object Model is reasonable when

Randomly accessing the document Transforming the document

Navigating in the document tree

There is enough main memory available

Processing in two steps

Parsing the document and building an appropriately structured object

Navigating in the object and modifying the object

7.4 Processing of GML-based Data

http://www.xml.com/

(39)

Methods of the DOM API offer

Navigation between the nodes of a document Create, move, delete nodes

Read, modify, delete texts

Central methods for navigating

boolean node.hasChildNodes indicates whether a node has

children

Node node.getFirstChild gets first node of the list of children

7.4 Processing of GML-based Data

(40)

String node.getNodeName gets the name of the node

short node.getNodeType gets the type of the node

Central methods for expanding documents

node.appendChild(Node newChild) appends new node

node.removeChild (Node oldChild)

removes node

7.4 Processing of GML-based Data

(41)

node.replaceChild(Node newChild, Node oldChild) replaces node

node.insertBefore(Node newChild, Node refChild) inserts new node

node.setNodeValue(String nodeValue) sets value of node

7.4 Processing of GML-based Data

(42)

Xerces is a typical system for parsing XML documents and to build DOM

representations

To work with Xerces following packages are needed

import org.w3c.dom.*;

import org.xml.sax.SAXException;

import org.apache.xerces.parsers.DOMParser;

Next steps include creating an instance of the DOM

parser, parsing the document of the input file, generating a parsed DOM object

DOMParser parser = new DOMParser();

parser.parse(name of the XML source file);

Document doc = parser.getDocument();

7.4 Processing of GML-based Data

(43)

The following (simplified) example shows a (drastically shortened) Java program for processing of GML-based buildings data

ALKIS' extracts of the land register primary data are available in GML format

Typically each extract contains about

10,000 objects (buildings, parcels, border points, etc.)

When derivating the real estate map, for some buildings an additional placement of symbol signatures is needed

7.4 Processing of GML-based Data

(44)

Needed steps for placement of signatures

Parsing of buildings

Detect missing presentation object (see section 3.4) Computing the optimal position

Create a new presentation object

7.4 Processing of GML-based Data

<gml:featureMember>

<AP_PPO gml:id="DEBWL00100000fAW">

<lebenszeitintervall> ... </lebenszeitintervall><anlass>000000</anlass>

<position>

<gml:Point><gml:pos>3540847.175 5805897.864</gml:pos></gml:Point>

</position>

<signaturnummer>3316</signaturnummer>

<dientZurDarstellungVon xlink:href="urn:adv:oid:DEBWL00100000jwR"/>

<drehwinkel>67.000</drehwinkel>

</AP_PPO>

</gml:featureMember>

(45)

The following example shows an excerpt from the method for parsing of buildings that are

already converted into a DOM structure

An instance of the class "AX_Gebaeude" (simplified)

7.4 Processing of GML-based Data

<AX_Gebaeude gml:id="DEHHSERV00001FN1">

...

<position><gml:Polygon><gml:exterior>

<gml:Ring><gml:pos>3567807.047 5930017.550</gml:pos>

...

<gml:pos>3567807.047 5930017.550</gml:pos></gml:Ring>

</gml:exterior></gml:Polygon></position>

<gebaeudefunktion>2000</gebaeudefunktion>

<weitereGebaeudefunktion>1170</weitereGebaeudefunktion>

<bauweise>2100</bauweise>

<anzahlDerOberirdischenGeschosse>1</anzahlDerOberirdischenGeschosse>

<dachform>3100</dachform>

</AX_Gebaeude>

(46)

7.4 Processing of GML-based Data

static public void parseBuildings ()throws

SAXException, IOException, ParserConfigurationException { // get all buildings into a list;

// an extract of the land register primary data already is available as "Root"

NodeList BuildingsList =

Root.getElementsByTagName("AX_Gebaeude");

// processing of all buildings

for(int k=0; k< BuildingsList.getLength();k++){

Element Building = (Element) BuildingsList.item(k);

// initialize function of building int buildfct = 0;

// initialize further function of building (there may be several further functions) Vector<Integer> ffct = new Vector<Integer>();

// read building-Id

String ID = Building.getAttribute("gml:id");

(47)

7.4 Processing of GML-based Data

// read function of building (may be empty)

NodeList fnNodeList = Building.getElementsByTagName("gebaeudefunktion");

if(fnNodeList.getLength()!=0){

Text fnText = (Text)((Element)fnNodeList.item(0)).getFirstChild();

buildfct=Integer.parseInt(fnText.getNodeValue());

}

// read further function of building

fnNodeList= Building.getElementsByTagName("weitereGebaeudefunktion");

if(fnNodeList.getLength()!=0){

for(int l = 0; l<fnNodeList.getLength() ;l++){

Text fnText = (Text)((Element)fnNodeList.item(l)).getFirstChild();

int fct = Integer.parseInt(fnText.getNodeValue());

ffct.addElement(fct);

} }

// read further attributes of buildung;

// e.g. coordinates of the position node ...

} // end: all buildings }

(48)

Functional programming languages are less common than imperative programming languages

With functional programming languages the separation between executable program and (precise) specification of problem-solving nearly

disappears

Especially "recursive problems"

very directly solvable

Including many geometric applications

7.5 Functional Programming with Polygons

(49)

Functional programming languages

Are based on lambda calculus (Church, 30s)

A program is a set of expressions that define the functions Construction of complex functions by combining simpler

functions

Recursion is the main

construction principle

A calculation is an application of a function to a list of arguments

Mainly realized through interpreter

7.5 Functional Programming with Polygons

(50)

Scheme

A variant of the functional language LISP (List Processing Language, 60s)

Free interpreter are part of many Unix systems

7.5 Functional Programming with Polygons

KN@is42:273 scheme

MIT/GNU Scheme running under GNU/Linux

Copyright (C) 1986, 1987, 1988, 1989,1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,2001, 2002, 2003, 2004, 2005, 2006, 2007 Massachusetts Institute of Technology

This is free software; see the source for copying conditions.

1 ]=> (/ 40030.0 (* 2.0 6371.0))

;Value: 3.141579029979595 1 ]=> (exit)

KN@is42:274 http://kinder.wetter.com/

(51)

Basic elements are prefix- expressions with one operator

and a number of operands

Special operators for naming and for the definition of functions:

7.5 Functional Programming with Polygons

(define pi 3.1415927)

(define square (lambda (x) (* x x))) (define point-distance (lambda (p1 p2) (sqrt

(+ (square

(- (x-coord p2) (x-coord p1))) (square

(- (y-coord p2) (y-coord p1)))))))

(52)

Main data structure are pairs (and lists)

A point is constructed as a pair of coordinates

7.5 Functional Programming with Polygons

(define pair (cons a b))

(define list (cons a (cons b (cons c...(cons y ())))...)

(define constr-point (lambda (x y) (cons x y))) (define x-coord (lambda (xy) (car xy)))

(define y-coord (lambda (xy) (cdr xy)))

(53)

A polygon is constructed as a list of coordinates

Short form:

Simple operations

Add point

7.5 Functional Programming with Polygons

(define ad-point (lambda (poly point) (if (null? poly)

(list (x-coord point) (y-coord point)) (cons (car poly)

(ad-point(cdr poly) point)))))

(define square1 ’(2025 2925 2925 2925 2925 3825 2025 3825 2025 2925)) (define square1 (cons 2025 (cons 2925

(cons 2925 ... (cons 2925 ()))...)

(54)

First point

Remove the first point

Second point

7.5 Functional Programming with Polygons

(define point2 (lambda (poly) (point1 (trunc-poly poly)))) (define trunc-poly (lambda (poly) (cdr (cdr poly))))

(define point1 (lambda (poly) (constr-point (car poly)

(car (cdr poly)))))

(55)

Perimeter of polygons

7.5 Functional Programming with Polygons

(define perimeter (lambda (poly) (if (not (null? (trunc-poly poly))) (+ (point-distance (point1 poly)

(point2 poly)) (perimeter (trunc-poly poly))) 0)))

(56)

Lowpass filter (see section 3.3)

7.5 Functional Programming with Polygons

(define lowpass (lambda (poly)

(define loc-lowpass (lambda (poly) (if (not (null? (trunc-poly poly))) (ad-point

(loc-lowpass (trunc-poly poly)) (center (point1 poly)

(point2 poly))) ())))

(ad-point (loc-lowpass poly)

(point1 (loc-lowpass poly)))))

(57)

Douglas/Peucker algorithm

1. given: polyline L, threshold g

2. determine line between the starting point and the end of L,

3. determine the point of L with

the greatest distance to the line,

4. if distance > g then the point is significant, repeat procedure

for both sub-lines, otherwise

remove all the points between the starting point and end point of L.

7.5 Functional Programming with Polygons

(58)

7.5 Functional Programming with Polygons

(define douglas-peucker (lambda (poly g) (if (> (number-of-points poly) 2)

(sequence

(define mdp (max-distance-point poly)) (if (> (line-point-distance

(point1 poly) (last-point poly) mdp)

g)

(concat-poly

(douglas-peucker (part1 poly mdp) g) (douglas-peucker (part2 poly mdp) g)) (ad-point

(ad-point () (point1 poly)) (last-point poly))))

poly)))

(59)

Connecting SQL with programming languages

Embedded SQL SQLJ

Call level interface JDBC

Postgres and JDBC

Class “PGobject”

Subclasses “PGpoint”, “PGbox” etc.

Oracle Spatial and JDBC

Class “JGeometry”

7.6 Summary

CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);

(60)

• Processing of GML-based data

SAX (Simple API for XML)

DOM (Document Object Model) Navigating the document tree

Example: GML-based data of buildings

• Functional programming with polygons

Scheme

Polygons as lists of coordinates Perimeter of polygons

Lowpass filter

Douglas/Peucker algorithm

7.6 Summary

(define perimeter (lambda (poly) (if (not (null? (trunc-poly poly))) (+ (point-distance (point1 poly) (point2 poly)) (perimeter (trunc-poly poly))) 0)))

(61)

7.6 Summary

GIS

SQLJ

collect

manage

analyse

display

embedded SQL

SQL +

programming language

JDBC functional

programming

objects

thematic geometry

GML

vector

Referenzen

ÄHNLICHE DOKUMENTE

Generalized Gradient Methods for the Minimi- zation of Nonsmooth Functions and Their Application to Mathematical Programming (Survey), Ekonomika i Matematicheskye Metody, XII, 2

The max operation takes two rendered images, and for every pair of pixels, one from each source image of the corresponding position and band, finds the maximum pixel value. The

Victims who were forensically considered to have suffered danger to life showed significantly more findings in the superficial and middle zones (zones A and B), such as

Implement the required classes in Java without the support of an IDE (e.g. on a sheet of paper). All attributes should be accessible only using getters and setters.. b) Not only

Thesaurus software developed at Tartu University Library as part of integrated library system INGRID offers significant aid for thesaurus construction, subject indexing and

This can be explained by the fact that the Mensch sample (being published earlier) has been known to Van Duijn and to Haustein and Neuwirth, while the latter two have

- RQ: How do the scientific councillors see the role of Open Science in the knowledge transfer between research and policy. - In-depth interviews with science councillors (SCs))

• Development of a framework for implementation of the integrated method called decompose- and-cut, based on the concept of structured separation, along with methods for separating