Jump to content
Nokioteca Forum

Il Traffico Dell'autostrada Sul Cellulare, Gratis!


JumpJack_
 Share

Recommended Posts

E' gia' possibile adesso, per il GRA di Roma, ma in forma non molto comoda:

http://www.baluardoproductions.com/gra/

Pero', se qualcuno fosse in grado di tirarne fuori un'applicazione grafica... b)

Il sito è molto misterioso, non vorrei si fossero "agganciati di soppiatto" al sito octotelematics... a cui da mesi chiedo il permesso di scrivere una midlet per mostrare su cellulare i loro dati, senza che si degnino di rispondere...

Link to comment
Condividi su altri siti

Ho completato la parte grafica, ora il programma riproduce quasi fedelmente sul display del cell la pagina della Octotelematics (http://traffico.octotelematics.com/) per il GRA!

...pero' l'adsl di libero mi ha di nuovo abbandonato, a casa, quindi non posso uppare i sorgenti finche' non me l'aggiustano...

L'ho annunciato solo per due motivi:

1 - non c'e' bisogno che qualcun altro provi a completare il sorgente

2 - mi serve aiuto per scrivere una midlet analoga; so gia' come scaricare il file, ma non ho mai... disegnato in j2me: come si disegna una linea sullo schermo in una midlet?

Link to comment
Condividi su altri siti

un'alternativa per leggere la tabella con i nomi e gli int ed ext:

f = open("c:\\traffic.txt","r")
html = f.read()
f.close()

html = html[html.find("</td></tr>")+11:] #init
html = html[0:html.find("</table>")]

st = html.split("<tr>")
arr=[]

for s in st:
   if(s!=""):
       line = s[0:len(s)-1]
       st1 = line.split("<td>")
       for s1 in st1:
           if(s1!=""):
               zona = s1[0:s1.find("</td>")]
               ln = s1[len(zona)+5:]
               st2 = ln.split("</td>")
               int = st2[0]
               int = int[len(int)-1:]
               ext = st2[1]
               ext = ext[len(ext)-1:]
               arr.append((zona,int,ext))

print arr
print " "
#stampa array:

for a in arr:
   print a[0]+"\t"+a[1]+"\t"+a[2]

Link to comment
Condividi su altri siti

un'alternativa per leggere la tabella con i nomi e gli int ed ext:

f = open("c:\\traffic.txt","r")
html = f.read()
f.close()

html = html[html.find("</td></tr>")+11:] #init
html = html[0:html.find("</table>")]

st = html.split("<tr>")
arr=[]

for s in st:
   if(s!=""):
       line = s[0:len(s)-1]
       st1 = line.split("<td>")
       for s1 in st1:
           if(s1!=""):
               zona = s1[0:s1.find("</td>")]
               ln = s1[len(zona)+5:]
               st2 = ln.split("</td>")
               int = st2[0]
               int = int[len(int)-1:]
               ext = st2[1]
               ext = ext[len(ext)-1:]
               arr.append((zona,int,ext))

print arr
print " "
#stampa array:

for a in arr:
   print a[0]+"\t"+a[1]+"\t"+a[2]

mmmh... b)

non ho capito niente. b)

puoi aggiungere qualche commento, e spiegare SPLIT cosa fa?

Intanto aggiorno il sorgente: ecco la VERSIONE CON GRAFICA FUNZIONANTE!

A breve aggiungero' i numeri delle uscite.

Link to comment
Condividi su altri siti

Ho uppato una nuova versione grafica, che mostra i numeri delle uscite e le separazioni tra i tratti di strada.

In pys60 si puo' disegnare una linea che invece di andare da un punto a esattamente un altro, va VERSO quel punto, ma solo per una certa lunghezza? b)

Dai, si poteva fare col commodore 128... b)

Il programma richiede in c:\nokia\others l'immagine in allegato.

gra_num.png

Modificato da JumpJack_
Link to comment
Condividi su altri siti

ho provato a commentarlo, spero che ci si capisca qualcosa xD

f = open("c:\\traffic.txt","r")
html = f.read()
f.close()

html = html[html.find("</td></tr>")+11:]
html = html[0:html.find("</table>")]

# le 2 assegnazioni qui sopra fanno in modo di tagliare il sorgente html in modo da avere in html come inizio questa riga:
#<tr><td> 1-Aure-Bocc</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>
#e come fine quest'altra:
#<tr><td>33-Pesc-Aure</td><td style="background-color: rgb(0, 255, 255)">B</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>

#con il metodo split divido in array tutto il codice html, scegliendo un parametro per separare la stringa, in questo caso <tr>, l'array generato dalla funzione qui sotto è::

# ['', '<td> 1-Aure-Bocc</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>\n',
#'<td> 2-Bocc-Cass</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>\n',
#'<td> 3-Cass-CassB</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>\n',
# ecc...

st = html.split("<tr>")
arr=[]

#scorro l'array st ignorando le stringhe vuote
for s in st:
   if(s!=""):
       #alla stringa s, tolgo 1 carattere che è quello di fine lineaa
       line = s[0:len(s)-1]
       #faccio lo split secondo il parametro di separazione <td> per ottenere un array di questo genere (ottengo un array per ogni stringa s):
       st1 = line.split("<td>")
#['', ' 1-Aure-Bocc</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>'] 1o array
#['', ' 2-Bocc-Cass</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>'] 2o array
#['', ' 3-Cass-CassB</td><td style="background-color: rgb(0, 255, 0)">V</td><td style="background-color: rgb(0, 255, 0)">V</td></tr>'] 3o array
#ecc...
       #scorro l'array e trascuro le stringhe vuote, quindi in pratica analizza sempre il secondo elemento dell'array, dato che il primo è sempre vuotol
       for s1 in st1:
           if(s1!=""):
               #per ottenere la zona, divido la stringa s1 da 0, fino a quando non trova la stringa </td>
               zona = s1[0:s1.find("</td>")]
               #a questo punto in ln memorizzo tutta la stringa s1 esclusa la zona e la stringa </td>
               ln = s1[len(zona)+5:]
               #taglio la stringa in diversi array, secondo il parametro </td> per ottenere un array del genere:
               st2 = ln.split("</td>")
               print st2
               # ['<td style="background-color: rgb(0, 255, 0)">V', '<td style="background-color: rgb(0, 255, 0)">V', '</tr>'] 1o array
               # ['<td style="background-color: rgb(0, 255, 0)">V', '<td style="background-color: rgb(0, 255, 0)">V', '</tr>'] 2o array
               #int ed ext sono le lettere che, nell'array compaiono nella stringa di indice 0 ed 1, accedo a quella stringa, e prendo l'ultimo carattere per ottenere int ed ext
               int = st2[0]
               int = int[len(int)-1:]
               ext = st2[1]
               ext = ext[len(ext)-1:]
               #aggiungo all'array arr una terna di valore che corrispondono (ad 1 altro array ovviamente) ai valori zona, int ed ext
               arr.append((zona,int,ext))

print arr
print " "
#stampa array:

for a in arr:
   print a[0]+"\t"+a[1]+"\t"+a[2]

Link to comment
Condividi su altri siti

Ho uppato una versione"ripulita" del codice python.

Ecco invece una prima bozza di versione j2me:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

import java.io.*;
import javax.microedition.io.*;
import java.lang.String.*;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import java.lang.Math;

/**
* @author luca
*/
public class mTrafficLC extends MIDlet implements CommandListener {

   public int DEBUG_FLAG = 1; // Set to 0 to prevent debug messages from being displayed.
   public String VERSION = "0.0.1"; // 

public int[][] Segments =  {{40,66}, 
                             {41,53},
                             {41,53},
                             {56,27},
                             {64,25},
                             {74,23},
                             {89,21},
                             {104,22},
                             {116,29},
                             {126,39},
                             {134,51},
                             {138,60},
                             {138,73},
                             {137,80},
                             {133,87},
                             {129,97},
                             {126,109},
                             {122,117},
                             {108,120},
                             {93,121},
                             {77,126},
                             {63,127},
                             {49,118},
                             {40,102},
                             {39,87}};

public int[][] Colors =       {{0,0,0}, 
                             {20,20,20},
                             {41,53,20},
                             {56,27,20},
                             {64,25,20},
                             {74,23,20},
                             {89,21,20},
                             {104,22,20},
                             {116,29,20},
                             {126,39,20},
                             {134,51,20},
                             {138,60,20},
                             {138,73,20},
                             {137,80,20},
                             {133,87,20},
                             {129,97,20},
                             {126,109,20},
                             {122,117,20},
                             {108,120,20},
                             {93,121,20},
                             {77,126,20},
                             {63,127,20},
                             {49,118,20},
                             {40,102,20},
                             {39,87,20}};
 private Display display;

 private MyCanvas canvas;

 public mTrafficLC() {
   display = Display.getDisplay(this);
   canvas = new MyCanvas(this);
 }

   /**
    * Called when MIDlet is started.
    * Checks whether the MIDlet have been already started and initialize/starts or resumes the MIDlet.
    */
 protected void startApp() {
        System.out.println("startApp.");

        try {
           getViaStreamConnection("http://www.baluardoproductions.com/gra/");
         } catch (IOException e) {
           System.out.println("IOException " + e);
           e.printStackTrace();
         }        
   display.setCurrent(canvas);
 }

 protected void pauseApp() {
 }

 protected void destroyApp(boolean unconditional) {
 }

 public void exitMIDlet() {
   destroyApp(true);
   notifyDestroyed();
 }

 public Display getDisplay() {
   return display;
 }    
   //<editor-fold defaultstate="collapsed" desc=" Generated Fields ">//GEN-BEGIN:|fields|0|
   private Command exitCommand1;
   private Command exitCommand;
   private Command okCommand;
   private Command okCommand1;
   private Form txtRisultato;
   private ImageItem imageItem;
   private Image image1;
   //</editor-fold>//GEN-END:|fields|0|

   //<editor-fold defaultstate="collapsed" desc=" Generated Methods ">//GEN-BEGIN:|methods|0|
   //</editor-fold>//GEN-END:|methods|0|

   //<editor-fold defaultstate="collapsed" desc=" Generated Method: initialize ">//GEN-BEGIN:|0-initialize|0|0-preInitialize
   /**
    * Initilizes the application.
    * It is called only once when the MIDlet is started. The method is called before the <code>startMIDlet</code> method.
    */
   private void initialize() {//GEN-END:|0-initialize|0|0-preInitialize
       // write pre-initialize user code here
//GEN-LINE:|0-initialize|1|0-postInitialize
       // write post-initialize user code here
   }//GEN-BEGIN:|0-initialize|2|
   //</editor-fold>//GEN-END:|0-initialize|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Method: startMIDlet ">//GEN-BEGIN:|3-startMIDlet|0|3-preAction
   /**
    * Performs an action assigned to the Mobile Device - MIDlet Started point.
    */
   public void startMIDlet() {//GEN-END:|3-startMIDlet|0|3-preAction
       // write pre-action user code here
       switchDisplayable(null, getTxtRisultato());//GEN-LINE:|3-startMIDlet|1|3-postAction
       // write post-action user code here
   }//GEN-BEGIN:|3-startMIDlet|2|
   //</editor-fold>//GEN-END:|3-startMIDlet|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Method: resumeMIDlet ">//GEN-BEGIN:|4-resumeMIDlet|0|4-preAction
   /**
    * Performs an action assigned to the Mobile Device - MIDlet Resumed point.
    */
   public void resumeMIDlet() {//GEN-END:|4-resumeMIDlet|0|4-preAction
       // write pre-action user code here
//GEN-LINE:|4-resumeMIDlet|1|4-postAction
       // write post-action user code here
   }//GEN-BEGIN:|4-resumeMIDlet|2|
   //</editor-fold>//GEN-END:|4-resumeMIDlet|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Method: switchDisplayable ">//GEN-BEGIN:|5-switchDisplayable|0|5-preSwitch
   /**
    * Switches a current displayable in a display. The <code>display</code> instance is taken from <code>getDisplay</code> method. This method is used by all actions in the design for switching displayable.
    * @param alert the Alert which is temporarily set to the display; if <code>null</code>, then <code>nextDisplayable</code> is set immediately
    * @param nextDisplayable the Displayable to be set
    */
   public void switchDisplayable(Alert alert, Displayable nextDisplayable) {//GEN-END:|5-switchDisplayable|0|5-preSwitch
       // write pre-switch user code here
       Display display = getDisplay();//GEN-BEGIN:|5-switchDisplayable|1|5-postSwitch
       if (alert == null) {
           display.setCurrent(nextDisplayable);
       } else {
           display.setCurrent(alert, nextDisplayable);
       }//GEN-END:|5-switchDisplayable|1|5-postSwitch
       // write post-switch user code here
   }//GEN-BEGIN:|5-switchDisplayable|2|
   //</editor-fold>//GEN-END:|5-switchDisplayable|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Method: commandAction for Displayables ">//GEN-BEGIN:|7-commandAction|0|7-preCommandAction
   /**
    * Called by a system to indicated that a command has been invoked on a particular displayable.
    * @param command the Command that was invoked
    * @param displayable the Displayable where the command was invoked
    */
   public void commandAction(Command command, Displayable displayable) {//GEN-END:|7-commandAction|0|7-preCommandAction
       // write pre-action user code here
       if (displayable == txtRisultato) {//GEN-BEGIN:|7-commandAction|1|33-preAction
           if (command == exitCommand1) {//GEN-END:|7-commandAction|1|33-preAction
               // write pre-action user code here
               exitMIDlet();//GEN-LINE:|7-commandAction|2|33-postAction
               // write post-action user code here
           } else if (command == okCommand1) {//GEN-LINE:|7-commandAction|3|31-preAction
               // write pre-action user code here
//GEN-LINE:|7-commandAction|4|31-postAction
               // write post-action user code here
           }//GEN-BEGIN:|7-commandAction|5|7-postCommandAction
       }//GEN-END:|7-commandAction|5|7-postCommandAction
       // write post-action user code here
   }//GEN-BEGIN:|7-commandAction|6|
   //</editor-fold>//GEN-END:|7-commandAction|6|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand ">//GEN-BEGIN:|18-getter|0|18-preInit
   /**
    * Returns an initiliazed instance of exitCommand component.
    * @return the initialized component instance
    */
   public Command getExitCommand() {
       if (exitCommand == null) {//GEN-END:|18-getter|0|18-preInit
           // write pre-init user code here
           exitCommand = new Command("Exit", Command.EXIT, 0);//GEN-LINE:|18-getter|1|18-postInit
           // write post-init user code here
       }//GEN-BEGIN:|18-getter|2|
       return exitCommand;
   }
   //</editor-fold>//GEN-END:|18-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand ">//GEN-BEGIN:|22-getter|0|22-preInit
   /**
    * Returns an initiliazed instance of okCommand component.
    * @return the initialized component instance
    */
   public Command getOkCommand() {
       if (okCommand == null) {//GEN-END:|22-getter|0|22-preInit
           // write pre-init user code here
           okCommand = new Command("Ok", Command.OK, 0);//GEN-LINE:|22-getter|1|22-postInit
           // write post-init user code here
       }//GEN-BEGIN:|22-getter|2|
       return okCommand;
   }
   //</editor-fold>//GEN-END:|22-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: txtRisultato ">//GEN-BEGIN:|25-getter|0|25-preInit
   /**
    * Returns an initiliazed instance of txtRisultato component.
    * @return the initialized component instance
    */
   public Form getTxtRisultato() {
       if (txtRisultato == null) {//GEN-END:|25-getter|0|25-preInit
           // write pre-init user code here
           txtRisultato = new Form("Stato del traffico", new Item[] { getImageItem() });//GEN-BEGIN:|25-getter|1|25-postInit
           txtRisultato.addCommand(getOkCommand1());
           txtRisultato.addCommand(getExitCommand1());
           txtRisultato.setCommandListener(this);//GEN-END:|25-getter|1|25-postInit
           // write post-init user code here
       }//GEN-BEGIN:|25-getter|2|
       return txtRisultato;
   }
   //</editor-fold>//GEN-END:|25-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: okCommand1 ">//GEN-BEGIN:|30-getter|0|30-preInit
   /**
    * Returns an initiliazed instance of okCommand1 component.
    * @return the initialized component instance
    */
   public Command getOkCommand1() {
       if (okCommand1 == null) {//GEN-END:|30-getter|0|30-preInit
           // write pre-init user code here
           okCommand1 = new Command("Ok", Command.OK, 0);//GEN-LINE:|30-getter|1|30-postInit
           // write post-init user code here
       }//GEN-BEGIN:|30-getter|2|
       return okCommand1;
   }
   //</editor-fold>//GEN-END:|30-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand1 ">//GEN-BEGIN:|32-getter|0|32-preInit
   /**
    * Returns an initiliazed instance of exitCommand1 component.
    * @return the initialized component instance
    */
   public Command getExitCommand1() {
       if (exitCommand1 == null) {//GEN-END:|32-getter|0|32-preInit
           // write pre-init user code here
           exitCommand1 = new Command("Exit", Command.EXIT, 0);//GEN-LINE:|32-getter|1|32-postInit
           // write post-init user code here
       }//GEN-BEGIN:|32-getter|2|
       return exitCommand1;
   }
   //</editor-fold>//GEN-END:|32-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: imageItem ">//GEN-BEGIN:|26-getter|0|26-preInit
   /**
    * Returns an initiliazed instance of imageItem component.
    * @return the initialized component instance
    */
   public ImageItem getImageItem() {
       if (imageItem == null) {//GEN-END:|26-getter|0|26-preInit
           // write pre-init user code here
           imageItem = new ImageItem("Grande Raccordo Anulare", getImage1(), ImageItem.LAYOUT_DEFAULT, "<Missing Image>");//GEN-LINE:|26-getter|1|26-postInit
           // write post-init user code here
       }//GEN-BEGIN:|26-getter|2|
       return imageItem;
   }
   //</editor-fold>//GEN-END:|26-getter|2|

   //<editor-fold defaultstate="collapsed" desc=" Generated Getter: image1 ">//GEN-BEGIN:|29-getter|0|29-preInit
   /**
    * Returns an initiliazed instance of image1 component.
    * @return the initialized component instance
    */
   public Image getImage1() {
       if (image1 == null) {//GEN-END:|29-getter|0|29-preInit
           // write pre-init user code here
           try {//GEN-BEGIN:|29-getter|1|29-@java.io.IOException
               image1 = Image.createImage("/gra-num.png");
           } catch (java.io.IOException e) {//GEN-END:|29-getter|1|29-@java.io.IOException
               e.printStackTrace();
           }//GEN-LINE:|29-getter|2|29-postInit
           // write post-init user code here
       }//GEN-BEGIN:|29-getter|3|
       return image1;
   }
   //</editor-fold>//GEN-END:|29-getter|3|

void getViaStreamConnection(String url) throws IOException {
}
void getViaStreamConnection2(String url) throws IOException {
       StreamConnection c = null;
       InputStream s = null;
       StringBuffer b = new StringBuffer();
       TextBox t = null;
       try {
         c = (StreamConnection)Connector.open(url);
         s = c.openInputStream();
         int ch;
         while((ch = s.read()) != -1) {
            b.append((char) ch);
         }
       } finally {
          if(s != null) {
             s.close();
          }
          if(c != null) {
             c.close();
          }
       }
   }
}

class MyCanvas extends Canvas implements CommandListener {
 private Command exit;

 private mTrafficLC mTrafficLC;

 private Image imm_image; // Immutable image (to be loaded from filesystem)
 private Image mut_image; // Mutable image (i.e. drawable).

 public MyCanvas(mTrafficLC mTrafficLC) {
   this.mTrafficLC = mTrafficLC;
   exit = new Command("Exit", Command.EXIT, 1);
   addCommand(exit);
   setCommandListener(this);
   try {
       imm_image = Image.createImage("/gra-num.png"); // Load image from disk
   }
   catch (Exception e) {
       System.out.println("ERROR: Image gra-num.png not found.");
       e.printStackTrace();
   }
   // Create mutable image same size of just loaded (and immutable) image:
   mut_image = Image.createImage(imm_image.getWidth(),imm_image.getHeight());
 }

 protected void paint(Graphics g) {
   Graphics offGrap = mut_image.getGraphics(); // Get a working copy (=graphics) of the mutable image for drawing on it.
   offGrap.setColor(0xff0000);
   offGrap.drawImage(imm_image, 0, 0, 0); // Copy immutable (loaded) image into mutable image.
   for (int i=0; i<=23; i++) {
       offGrap.setColor(mTrafficLC.Colors[i][0],mTrafficLC.Colors[i][1],mTrafficLC.Colo
rs[i][2]);
       offGrap.drawLine(mTrafficLC.Segments[i][0],mTrafficLC.Segments[i][1],mTrafficLC.
Segments[i+1][0],mTrafficLC.Segments[i+1][1]);
   }
   g.drawImage(mut_image, 0,0, Graphics.LEFT | Graphics.TOP);  
 }

 public void commandAction(Command command, Displayable display) {
   if (command == exit) {
     mTrafficLC.exitMIDlet();
   }
 }
}

Non è ancora molto utile, visto che le linee sono sottilissime e nere (peccato non ci sia un modo in j2me per specificare la larghezza delle linee), ma è un inizio.

Utile sia per chi non ha python... sia per chi vuole confrontare java con python.

Il sorgente è stato in parte creato automaticamente da Netbeans.

Notare che per poter disegnare su un'immagine caricata da disco (in genere marcata per default come "immutable" dal sistema), bisogna creare un'immagine di appoggio con createImage(x,y), che cosi' risulterè MUTABLE (cioe' disegnabile), e copiarci dentro l'immagine usando :

	Graphics offGrap = mut_image.getGraphics(); // Get a working copy (=graphics) of the mutable image for drawing on it.
offGrap.setColor(0xff0000);
offGrap.drawImage(imm_image, 0, 0, 0); // Copy immutable (loaded) image into mutable image.

Ne risulta questo metodo paint() nella classe Canvas:

  protected void paint(Graphics g) {
Graphics offGrap = mut_image.getGraphics(); // Get a working copy (=graphics) of the mutable image for drawing on it.
offGrap.setColor(0xff0000);
offGrap.drawImage(imm_image, 0, 0, 0); // Copy immutable (loaded) image into mutable image.
for (int i=0; i<=23; i++) {
	offGrap.setColor(mTrafficLC.Colors[i][0],mTrafficLC.Colors[i][1],mTrafficLC.Colors[i][2]);
	offGrap.drawLine(mTrafficLC.Segments[i][0],mTrafficLC.Segments[i][1],mTrafficLC.Segments[i+1][0],mTrafficLC.Segments[i+1][1]);
}
g.drawImage(mut_image, 0,0, Graphics.LEFT | Graphics.TOP);  
 }

Link to comment
Condividi su altri siti

  • 2 settimane dopo...

Ho messo i sorgenti su GoogleCode.

La versione Python funziona, quella java è solo una versione alfa: disegna il raccordo... ma i dati sono inventati, non ho ancora implementato la procedura di elaborazione dei dati scaricati. Pero' la midlet dovrebbe girare su qualunque cellulare, anche i piu' antichi.

Chi ha voglia di provarlo?

http://trafficlc.googlecode.com/svn/trunk/...ficLC-0-0-1.jar

Modificato da JumpJack_
Link to comment
Condividi su altri siti

ma dov'è la versione in python?

grazie

è la stessa del post #2 .

Comunque il link per scaricarla da googlecode è:

http://trafficlc.googlecode.com/svn/trunk/...lc/TrafficLC.py

Pero' mi interessa di piu' qualcuno che provi la versione java: sul mio cell va bene, sul motorola a1000 anche, ma sull'emulatore l'immagine non è centrata... b)

Link to comment
Condividi su altri siti

Sull'emulatore appare cosi':

emuyu6.jpg

mentre sul sito allo stesso momento appare cosi':

sitoin4.jpg

E' normale?

certo: da qualche parte ho spiegato (mi pare...) che la versione java al momento è solo una "alfa": non mostra dati reali, serve solo a vedere se:

- e' compatibile coi vari cell

- riesce a scaricare i dati

- riesce a caricare l'immagine

- riesce a colorare l'immagine CON COLORI PREMEMORIZZATI

Vedo per esempiop che sul mio 6600 non funziona lo scaricamento, mentre sul 6680 si'.... Ci sto lavorando.

Link to comment
Condividi su altri siti

Il sito è quello che hai indicato al primo post:

http://traffico.octotelematics.it/

poi clicchi su RM

quando esce il GRA premi il tasto STAMP (sulla tastiera) e poi incolli l'immagine o in Piant o PhotoShop (il classico cattura schermata e incolla in Paint)

Modificato da Oper
Link to comment
Condividi su altri siti

Se poi vuoi anche la gif con il raccordo anulare in tempo reale:

[url="http://traffico.octotelematics.it/dyn/1.gif"]http://traffico.octotelematics.it/dyn/1.gif[/url]

1.gif

e se cambi il nome (invece di 1.gif metti 2.gif e cosi' via) ottieni gli altri pezzi di autostrada italiana.

2 è Napoli

3 è Firenze

4 è Bologna

5 è Milano

6 è Torino

Per tutta l'italia abbiamo:

http://traffico.octotelematics.it/dyn/italia.gif

Modificato da Oper
Link to comment
Condividi su altri siti

Se poi vuoi anche la gif con il raccordo anulare in tempo reale:

[url="http://traffico.octotelematics.it/dyn/1.gif"]http://traffico.octotelematics.it/dyn/1.gif[/url]

1.gif

e se cambi il nome (invece di 1.gif metti 2.gif e cosi' via) ottieni gli altri pezzi di autostrada italiana.

2 è Napoli

3 è Firenze

4 è Bologna

5 è Milano

6 è Torino

Per tutta l'italia abbiamo:

http://traffico.octotelematics.it/dyn/italia.gif

Grazie, il metodo del copia-incolla dal sito octotelematics lo sapevo anch'io b) , ma non è ovviamente attuabile col cell! ;)

ma siccome so che presto o tardi qualcuno si accorgerà di aver dimenticato, nel sito chiuso BaluardoProductions, lo script che crea la pagina wap a cui mi appoggio... b) mi serve un "piano B": quando lo script verrà cancellato, potro' appoggiarmi al sito originale; sarà un po' piu' dispendioso in termini di download, ma che ci vuoi fare... ;)

Link to comment
Condividi su altri siti

Il file gif del GRA pesa una quarantina di kb

In python con:

import urllib

urllib.urlretrieve("http://traffico.octotelematics.it/dyn/1.gif", "c:\\mappaGRA.gif")

ti crei il file sul drive C: di nome mappaGRA.gif

E poi dovresti incollarlo in una immagine possibilmente con lo sfondo nero perchè così si vedono bene i caratteri e i colori.

Link to comment
Condividi su altri siti

Il file gif del GRA pesa una quarantina di kb

In python con:

import urllib

urllib.urlretrieve("http://traffico.octotelematics.it/dyn/1.gif", "c:\\mappaGRA.gif")

ti crei il file sul drive C: di nome mappaGRA.gif

E poi dovresti incollarlo in una immagine possibilmente con lo sfondo nero perchè così si vedono bene i caratteri e i colori.

il punto è che è inutile mostrare l'immagine originale, perche' bisognerebbe rimpicciolirla troppo, perdendo in definizione, e i nomi delle strade diventerebbero completamente illeggibili. Per questo ho... fatto salti di gioia quando ho scoperto la versione wap!

E' su quella che si basa il mio programma, al momento: la versione in python è gia' completa: scarica i dati, li elabora, e li rappresenta graficamente.

Ma sembra tanto una versione non ufficiale o clandestina, quindi credo che presto o tardi sparirà... E allora dovro' inventarmi di scaricare l'intera immagine.

Ma voglio ricrearla io, non semplicemente mostrarla; dovrebbe essere sufficiente esaminare il colore di un pixel per ogni segmento di raccordo, e usare questa informazione per decidere di che colore tracciare il segmento.

Per i nomi delle strade, che non entreranno mai sullo schermino, ho optato per i semplici numeri delle uscite: il cel pre-carica un'immagine che contiene il raccordo completamente bianco e i numeri delle strade, e poi ci disegna sopra i segmenti colorandoli opportunamente.

Per adattare il programma alla versione grafica del sito, basta che qualcuno scriva una funzione che memorizza in segment_color i colori di tutti i segmenti di raccordo, secondo questo formato:

segment_color =[[[0,0,0],[0,0,0]],\
			[[0,0,0],[0,0,0]],\
....  
]

Ci sono 24 coppie di valori: il primo valore di ogni coppia è la terna RGB per il segmento della carreggiata interna, il secondo è per la carreggiata esterna.

Come dicevo, pero', questa funzione è inutile finche' dura il sito wap...

Invece potrebbe essere piu' utile un'altra funzione: lo zoom.

Siccome non tutti i cellulari hanno schermi uguali, potrebbe essere utile ridimensionare l'immagine secondo le dimensioni dello schermo. I segmenti disegnati costituiscono infatti un'immagine vettoriale: ci vuole un algoritmo che modifichi queste coordinate sapendo che sono valide per uno schermo largo 176 e alto 144.

Pero' poi c'e' il problema dei numeri delle uscite: al momento, come dicevo, stanno su un'immagine precaricata, ma sarebbe utile che anche quelli fossero disegnati, per poter anch'essi essere adattati con lo zoom. Se qualcuno ha voglia di scrivere una funzione che traccia i vari numeri...

Poi io metto tutto insieme e viene fuori un bel programmino! b)

Link to comment
Condividi su altri siti

Pero' con due righe di python piuttosto che implementare funzioni come zoom, disegno di uscite, ecc.

import urllib
import appuifw, graphics, os

urllib.urlretrieve("http://traffico.octotelematics.it/dyn/1.gif", "c:\\mappa.gif")

appuifw.app.body = canvas = appuifw.Canvas(redraw_callback=None)

imm=graphics.Image.open('C:\\mappa.gif')
imm.load('C:\\mappa.gif')
_w_, _h_ = imm.size

img=graphics.Image.new((_w_,_h_))
img.rectangle([0,0, _w_, _h_], 0, 0, width=1)

img.blit(imm)

img.save('C:\\mappa.png')

appuifw.Content_handler().open_standalone("c:\\mappa.png")

in questo modo fai aprire l'immagine creata con il programma associato, in questo casa la galleria e hai fatto.

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy