[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