JGeometry izmantošana grafisko datu apstrādei · Web viewJGeometry izmantošana...

Preview:

Citation preview

JGeometry izmantošana grafisko datu apstrādei

1. Darbam ar Java tika izmantota programma NetBeans 7.1.2. Ir nepieciešamas dažas Java bibliotēkas, kuras nav standarta komplektācijā:

1) oracle.jdbc.*2) oracle.sql.*3) oralce.spatial.*

Pirmās divas ir brīvi pieejamas internetā (piemēram, findjar.com, kurā var ērti sameklēt vajadzīgo paku pēc nepieciešamās klases):

Lai dabūtu oracle.spatial.* klases, nepieciešams lejupielādēt un uzinstalēt

Oracle datubāzi 10g Release 1 vai jaunāku, kuras komplektācijā ir

pieejama Oracle Spatial Java Class Library, kas būtībā ir 4 pakas:

1) sdoapi.jar2) sdonm.jar3) sdotopo.jar4) sdout.jar

Pēc instalēšanas pakas ir atrodamas direktorijā:$ora_home/product/{version}/db_1/md/jlib/

Bibliotēku (.jar) piesaistīšana

Bibliotēkas var piesaistīt vairākos veidos:1) mainot sistēmas mainīgā CLASSPATH vērtību, iekļaujot tajā ceļu uz vietu, kur saglabātas bibliotēkas;2) iekopējot bibliotēkas direktorijā:C:\Program Files\Java\jdk1.6.0\jre\lib\ext\3) norāda IDE rīka konfigurācijā (šajā gadījumā NetBeans) – kur atradīsies iekļaujamās pakas:Projekta kokā uz mapes „Libraries” spiež labo peles taustiņu un izvēlas „Add JAR/Folder”:

Java programmas piemērspackage mpa_spatial;

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.sql.Connection;import oracle.jdbc.OracleTypes;import oracle.sql.CLOB;import java.sql.*;import java.sql.DriverManager;import java.sql.SQLException;import oracle.jdbc.driver.OracleConnection;import oracle.spatial.geometry.DataException;import java.io.OutputStream;import java.io.ByteArrayOutputStream;import java.io.ByteArrayInputStream;import java.io.InputStream;import oracle.jdbc.driver.OracleDriver;import oracle.sql.STRUCT;import oracle.spatial.util.*;import oracle.spatial.geometry.*; public class MPA_Spatial { protected static Connection m_conn; public static void main(String[] args) throws SQLException, IOException { Statement stmt = null; ResultSet rslt = null; STRUCT geomObj = null; JGeometry jGeom = null; //Pieslēdzas datubāzei try { DriverManager.registerDriver(new OracleDriver()) ; //jdbc:oracle:thin:@localhost:PortNumber:SID/ServiceName,DBuserName, Password m_conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:RTU10GR2", "SYSTEM", "SYSTEM"); } catch(SQLException e) { e.printStackTrace();} stmt = m_conn.createStatement();

1. piemērs. Nolasa ģeometriju un veic dažādas parbaudes ar to// Ģeometrijas nolasīšana no datu bāzes rslt = stmt.executeQuery("SELECT geometrija FROM gdb_koki WHERE apraksts = 'Aplis - vidus:Lielais'"); rslt.next(); geomObj = (STRUCT) rslt.getObject(1); //oracle.sql.STRUCT //PārkonvertēSTRUCT uz JGeometry tipu jGeom = JGeometry.load(geomObj); System.out.println("Ģeometrijas dimensijas: " + jGeom.getDimensions()); //Funkcija parbauda, vai ģeometrija ir riņķis if (jGeom.isCircle()) {System.out.println("Jā, tas ir riņķis.");} else {System.out.println("Nē, tas nav riņķis!");}

2. piemērs. Izpilda filtra vaicājumu un izvada atgrieztās ģeometrijas .xsd faila formātā, ko var pielietot attēlošanai karšu sistēmās

//Kolonna ar spatial datu tipu SDO_GEOMETRY//Rectangle filter rslt = stmt.executeQuery("SELECT geometrija " + "FROM gdb_ekas " + "WHERE sdo_filter (geometrija," + "sdo_geometry(2003,NULL,NULL," + "sdo_elem_info_array(1,1003,3)," + "sdo_ordinate_array (13,33,44,46))) = 'TRUE'"); String theGMLString = null; GML2 gmltest = new GML2(); gmltest.setConnection((OracleConnection)m_conn); while (rslt.next()) { geomObj = (STRUCT) rslt.getObject(1);//Konvertē Spatial ģeometrijas objektu uz Geography Markup// Language(GML 2.0),kas balstās uz ģeometriju tipiem, kas //definēti "Open GIS geometry.xsd" shēmas dokumentā theGMLString = gmltest.to_GMLGeometry(geomObj); System.out.println(theGMLString); }

3. piemērs. Izveido ģeometriju un ievieto to datubāzē

// Izveido ģeometriju jGeom = JGeometry.createCircle(15, 76, 6, 0); // x,y,Rādiuss,SRID // Ģeometrijas ierakstīšana datu bāzē PreparedStatement ps = m_conn.prepareStatement( "INSERT INTO gdb_koki(koka_id,geometrija,apraksts)" + "VALUES(gdb_koka_id_seq.NEXTVAL,?,'Koks nācis no Java')");//KonvertēJGeometry instanci uz DB STRUCT geomObj = JGeometry.store(jGeom, m_conn); ps.setObject(1, geomObj); ps.execute(); System.out.println("Ģeometrija ierakstīta datubāzē...");// Aizver visas konekcijas ----------------------------------- stmt.close(); rslt.close(); m_conn.close(); }}

Recommended