|
16.01.2011., 13:39 | #1 |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Crtanje koordinata u JAVI
Tražim neki primjer kako jednostavno smjestiti hrpu koordinata 44-46 LAT i 14-17 LON na ekran veličine 1280x720 px. Ima li nekakva klasa koju samo ubacim i crtam do mile volje? |
17.01.2011., 12:00 | #3 | |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Citiraj:
Konkretnije, trebam postupak prenošenja Merkatorove kartografske projekcije (mercator map projection) koje koristi Google Maps na "papir" 1280x720px i tako da 14 bude lijeva stranica, 17 desna stranica, 44 donja i 46 gornja stranica "papir" tj. tog mog okvira - tako da sve točke budu jednoliko raspoređene unutar tog okvira. |
|
17.01.2011., 13:16 | #4 |
Premium
Datum registracije: Aug 2007
Lokacija: Samobor, HR
Postovi: 1,555
|
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); } } |
17.01.2011., 15:48 | #5 | |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Citiraj:
ako imaš nešto jednostavno što funkcionira u Pythonu/nečemu/bilo čemu... i da mogu samo "prepisati" svoje podatke unutra dapače budem sad ovo pogledao... |
|
17.01.2011., 16:44 | #6 |
Premium
Datum registracije: Aug 2007
Lokacija: Samobor, HR
Postovi: 1,555
|
Evo u pythonu, osakatio sam jedan drugi program pa probaj Code:
#!/usr/bin/env python # -*- coding: utf-8 -*- # numpy import numpy as np # matplotlib plotting module import matplotlib.pyplot as plt # matplotlib colormap module #import matplotlib.cm as cm # Matplotlib font manager #import matplotlib.font_manager as font_manager y,x=np.loadtxt('tocke.csv',unpack=True,skiprows=0,delimiter=';',usecols=(0,1),comments='#') graf = plt.figure(1) #ax = graf.subplots_adjust(hspace=0.5) #ax = graf.add_subplot(211) ax = graf.add_subplot(111) naslov=unicode("Naslov", "utf-8") xoznaka=unicode("Geografska dužina (°)", "utf-8") yoznaka=unicode("Geografska širina (°)", "utf-8") ax.set_title(naslov,family='serif', size='xx-large') ax.set_xlim(14, 17) ax.set_ylim(44, 46) plt.xlabel(xoznaka, size='large') plt.ylabel(yoznaka, size='large') plt.scatter(x, y, marker='s', cmap=None, norm=None,vmin=None, vmax=None, alpha=None, linewidths=0,verts=None, figure='f') #plt.colorbar() graf = plt.figure(1) imeslike="proba" #plt.savefig(''+imeslike+'.png', dpi=100) plt.show() 45.79880556;15.95253333 45.811575;15.97999444 45.79605278;15.95978333 45.80117222;15.94436944 45.80418889;15.94404167 45.79942778;15.92806667 45.77279444;15.98232778 45.82538889;15.93781667 45.81059722;15.89199167 45.81554444;15.97460556 45.81335833;15.96428333 45.80950278;15.98833889 45.81265556;15.97189722 45.80843889;16.01774444 45.82552222;15.97701944 45.81465278;15.97399444 45.77222778;15.98186667 45.8059;16.02977778 45.80943611;15.96471667 A ovo je izlazna slika |
20.01.2011., 00:04 | #7 |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Ja imam .txt fajl (8MB) sa mrežom - bilo bi dobro kad bi program bio .exe pa samo u njegov folder popikam svoje "resource" fajlove (mrežu i sam algoritam) i samo pokrenem. Znači imam .exe fajl/nešto što pokrenem , u njegov folder strpam "mreza.txt" i "algoritam.txt" čiji je sastav ovakav 45.815189,15.933249-45.815189,15.933249 45.815189,15.933249-45.813824,15.928523 45.815189,15.933249-45.812246,15.920229 45.815189,15.933249-45.811674,15.917397 45.815189,15.933249-45.813024,15.905263 45.815189,15.933249-45.811543,15.905375 ... Kad pokrenem program on povuče mrežu i nacrta je (sive tanke linije) iz datoteke mreza.txt. Nakon toga počinje crtati algoritam iz datoteke algoritam.txt - znači ista stvar kao i mreža ide red po red i crta linije - ovaj puta crvenom debljom bojom samo (da se vidi razlika). Ako naiđe na liniju koja počinje sa "G" npr. (kao "gotovo") crta ju samo zeleno. Ako počinje sa F crta debelo zeleno. Znači stalno ista stvar - samo druge boje/debljine. Nakon svake linije napravi delaj od 100ms npr. da se vidi kako algoritam "radi". mreza.txt = sve linije tanke sive algoritam.txt obicna linija = deblje crvene crte algoritam.txt linija pocinje sa slovom G = tanke zelene linije algoritam.txt linija pocinje sa F = debela zelena linija Nešto tipa ovo (naravno ne 3D i te fičre) - http://www.youtube.com/watch?v=jjpmuZEbtok Ima li zainteresiranih? Plaćam |
21.01.2011., 00:36 | #8 |
the luda ribetna
Datum registracije: Aug 2004
Lokacija: Riblja mjesta u zagrebu:D
Postovi: 3,947
|
kolko? platforma? python? java? nekaj mobilnog do kad? dodatna funkcionalnost? edit: output? mora li pratit strukturu citanja predefiniranu? |
21.01.2011., 20:57 | #9 |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,545
|
Moram priznati da te nisam tocno skuzio sto hoces jer sam samo bacio oko na brzinu, ali ako ti treba algoritam kako spojiti dvije koordinate linijom (apstrakciju prijenosa GPS koordinate na "papir" rijesi samostalno), prouci Bresenham's line algorithm.
__________________
Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest. |
22.01.2011., 01:17 | #10 | |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
stvar je vremena Citiraj:
|
|
|
|
Oglas
|
|
22.01.2011., 11:33 | #11 | |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,545
|
Citiraj:
BTW, mozda ce ti ovo pomoci, samo sto je vezano direktno za Google Maps API (to sam osobno koristio, i iako te jos uvijek ne shvatjam sto ti tocno treba, meni je za GPS pracenje i crtanje povijesti ruta posluzilo savrseno elegantno). http://www.svennerberg.com/2008/10/p...n-google-maps/ http://econym.org.uk/gmap/ HTH.
__________________
Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest. |
|
22.01.2011., 13:10 | #12 |
Premium
Datum registracije: Aug 2007
Lokacija: Samobor, HR
Postovi: 1,555
|
Njemu treba da mu prvo iscrta sve linije u jednoj boji (recimo sve ulice). To nije problem, mala modifikacija mog koda gore gdje umjesto plt.scatter ide plt.plot(x,y) gdje su x,y matrice koordinata početnih i završnih točaka linije. Nakon toga mu treba drugi dio program, koji će preko tih linija iscrtavati druge, redom, s malom pauzom i tako da mjenjaju boje. Algoritam koji traži put od neke točke/čvora, preko tih "ulica" iz prvog dijela do druge točke. Vjerujem da nije neki problem sve skupa iako mu je struktura samih ulaznih podataka malo zeznuta Ne kužim zašto 2 vrste delimitera, zašto je boja na početku i tako hehe :-) Samo je pitanje vremena |
22.01.2011., 15:08 | #13 | |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Citiraj:
inače ovo da - to mi treba prvo obična mreža, pa linije u bojama preko te iste mreže (vidi video iznad) |
|
26.01.2011., 23:33 | #14 |
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
bump, zar nitko ne zna ovo sklepati? |
28.01.2011., 14:03 | #15 |
the luda ribetna
Datum registracije: Aug 2004
Lokacija: Riblja mjesta u zagrebu:D
Postovi: 3,947
|
majstore mogu ti ja u cem god oces, samo sam tolko bez vremena da ak se mos stript jos tj-2 inace 4 money i prek noci |
|
|
Oglas
|
|
|
|