17.01.2011., 13:16
|
#4
|
Premium
Datum registracije: Aug 2007
Lokacija: Samobor, HR
Postovi: 1,612
|
Ja sam se nešto osnovno s tim bavio, povlačio sam poligone iz baze podataka (sql) i iscrtavao, ali se nisam previše zezao pa sam sve prebacio u lokalni sustav ekrana i to je to bilo, ali vjerujem da se mogu postaviti granice sustava. Obrati pažnju na to da ti je ishodište ekrana gore ljevo i da su koordinatne osi obratne.
Mislim da bi ti sve skupa bilo lakše u pythonu s matplotlib, ali ako treba biti java, nek bude
Ti nisi moja struka, a stalno tu navračaš
Evo ti kod tog mog, nemoj se zgražat, nije mi se dalo optimirat
Code:
import java.awt.Graphics;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.sql.*;
import org.freehep.graphics2d.VectorGraphics;
import org.freehep.util.export.ExportDialog;
public class Baza extends JPanel {
public void paint(Graphics g) {
//Povecanje prikaza
double povecanje=2;
boolean brp=true;
//Uredjivanje
Font arialV_B_I = new Font ("Arial",Font.BOLD | Font.ITALIC,18);
Font arialM_N = new Font ("Arial",Font.PLAIN, 14);
//Podaci za spajanje na bazu
String url="jdbc:postgresql://localhost/postgis2";
String kor_ime="postgres";
String sifra="sifra";
Connection baza=null;
Statement stmt=null;
ResultSet rset=null;
VectorGraphics vg = VectorGraphics.create(g);
//Spajanje na bazu
try {
Class.forName("org.postgresql.Driver");
baza=DriverManager.getConnection(url,kor_ime,sifra);
stmt = baza.createStatement();
rset = stmt.executeQuery("Select gid, contents, asText(the_geom) AS geom from zadatak.zadatak");
while (rset.next()) {
//Podaci iz baze
Integer gid=rset.getInt("gid");
String brojparcele=rset.getString("contents");
String geometrija=rset.getString("geom");
String geom1=geometrija.replace("POLYGON((", "");
String geom2=geom1.replace("))", "");
String geom2a=geom2.replace(" ", ",");
String [] geom3=null;
geom3=geom2a.split(",");
int duljina=geom3.length;
double Y []=new double [duljina/2];
double X []=new double [duljina/2];
int i=0;
double doublegeom [] = new double [geom3.length];
for (i=0;i<geom3.length;i++){
doublegeom [i] = Double.parseDouble(geom3[i]);
}
int j1=0;
int k=0;
for (int j=0;j<doublegeom.length;j=j+2){
j1=j+1;
Y[k]=doublegeom[j];
X[k]=doublegeom[j1];
k=k+1;
}
int br_tocaka=Y.length;
double Y1 []=new double [Y.length];
double X1 []=new double [X.length];
for (int m=0;m<X.length;m++){
Y1[m]=(Y[m]-5575300)*povecanje; //Lokalno
}
for (int n=0;n<X.length;n++){
X1[n]=(-X[n]+5074250)*povecanje; //Lokalno
}
vg.drawPolygon(Y1, X1, br_tocaka);
if (brp==true) {
double Ydod=0;
double Xdod=0;
for (int o=0;o<Y.length;o++){
Ydod=Ydod+Y1[o];
Xdod=Xdod+X1[o];
}
double Ysr=(Ydod/br_tocaka)-(povecanje*5);
double Xsr=(Xdod/br_tocaka)+(povecanje*5);
vg.drawString(brojparcele,Ysr, Xsr);}
}
stmt.close();
rset.close();
baza.close();
} catch (Exception e) {
vg.setFont(arialV_B_I);
vg.drawString("Problem: " + e.getMessage(),'-',100);
;}
vg.setFont(arialV_B_I);
vg.drawString("Vizualizacija podataka iz baze - zadatak 53", '=', 20);
vg.setFont(arialM_N);
vg.drawString("Podaci su prikazani u lokalnom koordinatnom sustavu", '=', 40);
if (povecanje!=1 | povecanje<1) {vg.drawString("Povecanje ="+povecanje+" x",'=',80);}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new Baza());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,800);
frame.setLocationRelativeTo(null);
frame.setTitle("Vizualizacija podataka iz PostgreSQL baze podataka");
frame.setVisible(true);
}
}
|
|
|