View Single Post
Staro 17.01.2011., 13:16   #4
FitzTN
Premium
Moj komp
 
FitzTN's Avatar
 
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);
  }
}
FitzTN je offline   Reply With Quote