[Talk-it] OSMNavigator/API 0.5 e varie

Niko! niko at unina.it
Wed Oct 10 14:51:00 BST 2007


On Wednesday 10 October 2007 10:43:33 Maurizio Napolitano wrote:
> Mi mancano dei pezzi :)
> OSMNavigator e' scritto in java? C?

E' scritto in C++, con le librerie Qt-4.3 e la libgps per il collegamento con 
il daemon gpsd (sotto windows è disabilitato).

> L'idea e' di avere qualcosa come un assistente alla navigazione
> oppure sostituire qualcosa?

In più di un anno mi sono venute dante di quelle idee che forse più che 
chiamarlo OSMNavigator andrebbe chiamato OSMStudio :)
Riassumo le caratteristiche principali:

*) Tile cacher/browser, basta definire uno o più file xml con una serie di 
parametri che indicano tipo di proiezione (attualmente mercator 
e "regolare"), sorgente http di tiles, vari parametri e diventa una specie di 
navigatore di mappe in tempo reale, con relativo caching e quindi navigazione 
successiva velocissima (rispetto ai browser online non c'è paragone). 
Attualmente vi sono plugin che scaricano da Nasa, mapnik layer, osmarender 
layer, relief maps, più una serie di siti commerciali verso i quali non so 
quanto sia giusto farlo, e che uso per verificare i miei edit (mai per 
derivare dati!).
*) Backend di dati OSM permanente, i dati scaricati dal server OSM oppure 
importati da file .osm vengono parsati ed inseriti un un DB locale, ci sono 
diversi backend supportati, sqlite, mysql, postgres e postgres/postgis. Ogni 
volta che si fa il download di un area questa viene eliminata dal db e 
ricaricata. Il db mantiene anche i punti raw gps importati direttamente dai 
file gpx o scaricati sempre dal server OSM. I dati "nuovi" o modificati 
risiedono anche essi nel db e rimangono come "pending" fino al loro upload. 
Durante la fase di upload essi vengono man mano eliminati. Questa cosa 
permette di riesumare l'upload anche nel caso OSMNavigator crashi, caschi la 
rete, o semplicemente perchè si sta facendo un grosso upload e si desidera 
ultimarlo in più tappe. Inoltre la struttura a DB permette durante l'import 
di effettuare i lookup direttamente nel DB e non in RAM, in pratica è 
possibile caricare il planet.osm anche su un pc con pochissima ram.
*) Renderer realtime, data la posizione sulla mappa viene effettuata la query 
sul db, vengono estratti nodi, segmenti e way, queste vengono trasformati in 
oggetti grafici del motore canvas (QGraphicsView) di QT. A seconda delle tag 
associate vanno a matchare una serie di regole definite in un file .rs 
(render settings) in xml che ne determina grandezza, zvalue, colori etc.
*) Rendering di dati provenienti da Postgis, per il quale abbiamo caricatori 
di tutti i tipi tipo gdal/ogr shp2postgis etc. in modo da poter visualizzare 
dati gis come layers sulla mappa. Questi vengono associati ai dati osm ed 
alla cache dei tiles e visti come layers.
*) Editor grafico dei render settings, ossia una tabella tipo excel dove si 
inseriscono le tag, larghezze, colori, font etc. I render settings hanno 
profili multipli quindi una combobox permette di sceglierli comodamente, 
nello stesso file abbiamo i profili "mapnik", "osmnavigator" che ricalcano un 
pò gli stili preesistenti, stile "uk", stile "italy", 
stile "personale", "basic" etc. 
*) Editor, reso il più banale e semplice possibile, modalità di build way 
molto potente, la posizione del mouse determina diverse modalità 
autoselezionate, se siamo vicini ad un nodo questo viene "linkato" se siamo 
lontani ne viene creato uno nuovo e lo stesso viene linkato al precedente se 
presente. Comodo tag editor ad elementi grafici combobox.
Non vi elenco la gestione dei segmenti, merge/split way in quanto ora è 
completamente invalidata. Caratteristica fondamentale l'editor sfrutta il 
motore di rendering realtime, quindi è un editor WYSIWYG.
*) Funzioni di export tagliate sull'area correntemente visualizzata o 
sull'area selezionata, che permettono di produrre una mappa .osm facilmente e 
senza dover calcolare coordinate e ricorrere a script + o meno intuitivi.
*) Funzioni di export raster dell'area correntemente renderizzata o 
selezionata, per produrre mappe raster di grosse dimensioni.
*) Funzioni di Tile Rendering on demand, ed integrazione con openlayers che 
trasformano osmnavigator in un renderer alla mapnik/t at h. Consentono in 
pratica di creare facilmente una mappa webbrowsabile con il proprio 
rendersettings. (Stavo anche pensando di scrivere una funzione wizard che 
generasse automaticamente l'html ed il javascript per un deploy immediato)
*) Integrazione con i webservices di geonames, per poter cercare luoghi e 
posizionarvici sopra in realtime.
*) Posizionamento automatico sulla mappa in base alla posizione restituita 
dall'antenna GPS, e dump automatico dei punti rilevati nel database (con 
relativa funzione di export gpx)
*) Supporto primordiale dei dati GIS in formato GML, che permettono di 
importare quindi dati di tipo GIS all'interno del DB, per l'utilizzo o il 
successivo upload sul server OSM, funzione che avevo implementato per 
importare i confini amministrativi Istat.
*) Integrazione con gpsbabel, in modo da importare gpx ed nmea con la 
possibiltà di spuntare un checkbox per l'autoriduzione del numero di punti 
quando è troppo densa.
*) GPX Wizard per la trasformazione di una parte di un file gpx direttamente 
in un layer vettoriale OSM.

Questo ed altre cosette minori è quello che è stato implementato fin'ora.
Per il futuro ho ancora tante altre idee, a parte l'implementazione di A* e la 
navigazione assistita in tempo reale, una cosa che mi piacerebbe tanto vedere 
un giorno è il calcolo del percorso minore in base alle tags, ad esempio, 
voglio visitare tutti i castelli che si trovano in questa area, fammi un 
percorso e guidamici in modo da percorrere il minor tratto di strada 
possibile, oppure mentre si naviga verso una determinata destinazione avere 
festival che "sintetizza" qualcosa del tipo "alla vostra destra potete 
ammirare il monastero xyz", "alla vostra sinistra la famosa statua di xyz" 
etc. :)

> PS: sai se esiste un assistente alla navigazione scritto in java me che si
> basa sui dati OSM?

Mi sa che non esiste neanche in altri linguaggi, anche se qualche esperimento 
è stato fatto trasformando i dati osm in altri formati utilizzati da roadmap 
o navit se non sbaglio.

ciao

	Niko




More information about the Talk-it mailing list