Passa ai contenuti principali

Treni e passaggio a livello

Appunti sparsi per app (appybuilder) che consiglia se girare verso il sottopasso o verso il passaggio a livello.

Il concetto-base sta in un tutorial di Taifun (a sua volta ispirato da una scoperta di Stefan Anca riportata in una risposta di stackoverflow).

Questo "trucco" o meglio "magia" serve nel WebViewer component per farsi spedire da qui i treni, i loro numeri, in viaggio verso Crema (esclusi merci), usando il metodo di questo vecchio post.


Fatto questo , estratti i numeri di treno in viaggio, si potrebbe interrogare con il componente Web componendo la richiesta così, treno per treno (NNNNN è il numero di treno):
http://mobile.viaggiatreno.it/vt_pax_internet/mobile/scheda?dettaglio=visualizza&numeroTreno=NNNNN&tipoRicerca=numero&lang=IT

La risposta contiene la posizione del treno (dove c'è il commento <!-- FERMATE NON ANCORA EFFETTUATE -->)  e soprattutto la stima dell'ora di arrivo a Crema:

<div class=""corpocentrale"">
                <h2>CREMA</h2>         
                    <p>Arrivo Programmato: <br />
                        <strong>20:28</strong>
                    </p>
                    <p>Arrivo previsto: <br />
                        <strong>20:28</strong>
                    <br>
                    <br>
                    Binario
                    Previsto:<br>
                                    <strong>1</strong>
                    <br>
                    Binario
                    Reale:<br>
                               --
  </div>

La posizione del treno può essere visualizzata sulla mappa interpolando le posizione delle due stazioni prima e dopo il commento, interrogando ogni minuto o due il sito dei treni.
Questa mappa però esiste già  (ma sarà in tempo reale? mah!)

In realtà quel che serve si può ottenere interroando un'altra pagina di viaggiatreno.

La raccomandazione se con l'auto girare a destra o a sinistra dipende invece dall'ora di arrivo -partenza stimata dalla stazione di Madignano (treni verso Treviglio) o Casaletto (treni verso Cremona). Più semplicemente: se è già partito verso Crema da quelle stazioni, le sbarre hanno altissima probabilità di essere già giù.

Il trucco di Stefan/Taifun.

Osservando nel sorgente-pagina (tasto destro mouse - Sorgente Pagina)   come Trenitalia vuole la richiesta di quali treni sono in arrivo alla stazione


Fra l'altro, la risposta, inserendo 'Crema', in treni non è affatto strutturata:



ma questo lo vedo dopo.

Ora il trucco.

Dopo aver inserito un WebViewer nella GUI e assegnatogli come home url quella di
http://www.viaggiatreno.it/vt_pax_internet/mobile/stazione
con questi blocchi (due sono in forma di funzione-procedura per poterli riutilizzare) si passa "Crema" e l'ordine di cliccare (submit):

in pratica si passa al WebViewer un "url" cosiffatto :
javascript:(function() {document.getElementById('stazione').value = 'Crema';document.getElementById('submit').click();})()
che riallaccia le cose così:

Facendo DoIt sul blocco blu, viene compilato il campo del form con "Crema" e inviato: la pagina risponde correttamente.

Ora il problema , che Taifun non menziona , è riportare tutto dal Viewer ad appinventor /kodular.
La soluzione è la seguente, che usa il metodo visto nel vecchio post per trasferire le info attraverso setWebViewString :



Ricapitolando.

Parte la app (una Label sopra e un WebViewer sotto) e il Viewer va alla home di viaggiatreno:


parte la injection di Taifun e compaiono nel Viewer i treni in arrivo:




poi inietto il secondo blocco javascript e porto tutto nella Label:




A questo punto si tratta di processare il testo per calcolare gli orari previsti in base al ritardo e stimare l'orario della discesa delle sbarre.

Per prima cosa gli spazi e le andate a capo fanno schifo, quindi vanno spurgati.

Per fortuna si può rimanere in javascript e usare le regex:


così sostituisco gli a-capo \n  e spazi \s+  dappertutto (g) con nulla (""):


Elenco treni in arrivo e in partenza , sotto forma di lista, sfruttando il fatto che sono racchiusi fra i tag <h2> e </h2>:




per comodità mia l'interfaccia utente sarà così :



non ho voglia ora di sistemare i minuti (3 in 03) in alto


una variabile conta i treni in arrivo

l'altra è una lista di cose, ciascuna cosa contiene le info relative ad un treno in arrivo (numero, ora d'arrivi, ritardo)


il blocco che compila la tabella:









ancora da sistemare però le scritte "inorario" e "inritardo di" e il calcolo della somma orario d'arrivo + ritardo per decidere se svoltare a destra o a sinistra.





to be continued...





Commenti

Post popolari in questo blog

UMAP: mappare con fotografie nel popup

Premessa: come esempio non userò alberi perché non ho il tempo di uscire , ma foto di Crema del passato prese da Gruppi facebook. I dati saranno messi in un Google Sheet: ogni riga un segnaposto sulla mappa ogni colonna una proprietà del segnaposto della mappa per il tutorial di un prof per alunni delle medie, vedere qui:   https://sites.google.com/view/lucascalzullo/tutorial/umap  Cosa serve modificare nel LAYER della mappa? 1. La cosa che si vuol far apparire quando il mouse passa sopra il segnaposto (in questo caso l'autore ) 2. l'elenco delle colonne da importare nel popup , okkio al numero di parentesi graffe: 3 per le foto le possibilità sono: *asterisco per l'italico* **due asterischi per il testo marcato** # un cancelletto per l'intestazione principale ## due cancelletti per le intestazioni di secondo livello ### tre cancelletti per intestazione di terzo livello Link semplice: [[http://example.com]] Link con testo: [[http://example.com|te

Esportare tracciati (e reimportarli) in umap

------------------  Fase1. Preparare una mappa umap "d'appoggio" in cui lo sfondo è una mappa (*) sulla quale tirare delle linee o poligoni come tracciati che poi verrano esportati in un formato re-importabile in un'altra umap. esempio:  https://umap.openstreetmap.fr/it/map/moruzzi_408788#16/45.3632/9.6832 (*) metodo illustrato qui Fase2. una volta tracciata la linea ( anche più di una linea in realtà), andare sull'unico layer (dove risiede quindi la linea) e scegliere Azioni Avanzate -> Scarica si aprirà un'altra pagina web con il codice geojson : per controllarlo, importarlo (anche con un 'seleziona tutto" e  copia incolla) in geojson.io : (fra l'altro geojson è collegabile a github ) FASE3. salvarlo come 'geojson' nel PC  e importarlo nella umap desiderata cliccando sulla icona "freccia verso l'alto", formato geojson, scegli file risultato

mapwarper e sovrapposizione mappe

come sovrapporre mappe alla mappa di openstreet map? Vediamo come sovrapporre una delle meravigliose mappe di T. Moruzzi alla mappa di Crema su openstreetmap. mura venete , di T Moruzzi Si usa  http://mapwarper.net  . Cliccare sulla linguetta  Upload Map e caricare l'immagine della mappa di Moruzzi. Dopo di che occorre "rettificare" in modo che si adatti (venga "stirata") sulla mappa di osm. Cliccare sulla linguetta Rectify . Appaiono le due mappe una accanto all'altra : per far capire a mapwarper come stirarla occorre piazzare dei punti di riferimento sull'una e sull'altra , usando l'iconcina segnalibro azzurra in alto e poi cliccando sul bottone in basso per aggiungere la coppia di punti e dopo averne piazzati almeno 3 (coppie), cliccare il comando warp image! corrispondenze esecuzione comando Cliccando la linguetta Preview , si possono vedere le mappe una sull'altra, dosando la trasparenza col cursore: