[Gfoss] Openlayers Tracks Editor

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano

Ciao Stefano.
Progetto interessante.
Ti butto lì un’altra ipotesi, giusto per condividere idee. Per quanto la soluzione al riattacco delle spezzate sia comunque utile in tanti altri casi, per il problema dello spostamento sulla mappa io mi preoccuperei di trovare un modo user-friendly per permettere all’utente di fare un pan senza dover interrompere l’editazione della linea attuale. Es., valutare ogni tot la posizione del mouse rispetto agli estremi della mappa e, in base ad un offset stabilito, eseguire un pan da codice. Oppure switchare in modalità pan con un mouse click col tasto destro. O, ancora, fare il pan con le frecce della tastiera…

giovanni

Il giorno 22 marzo 2011 10:41, Stefano <stefano.cudini@gmail.com> ha scritto:

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

ciao giovanni
innanzi tutto grazie della veloce risposta

un modo user-friendly credo di averlo gia inserito, infatti ho creato delle shortcut per ogni modalita Pan(tasto Esc), tracciamento Linea(tasto T),
inserimento punti (tasto P), quindi senza usare il mouse l’utente può cambiare modalità.
Le tue idee sono molto interessanti credo siano fattibili e comode per quando riguarda la navigazione-tracciamento in contemporanea.

Solo che il mio problema principale rimane unire insieme tracce disegnate in tempi differenti! Esattamente come accade su Potlatch(l’editor online di OSM)

Il giorno 22 marzo 2011 10:59, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Stefano.
Progetto interessante.
Ti butto lì un’altra ipotesi, giusto per condividere idee. Per quanto la soluzione al riattacco delle spezzate sia comunque utile in tanti altri casi, per il problema dello spostamento sulla mappa io mi preoccuperei di trovare un modo user-friendly per permettere all’utente di fare un pan senza dover interrompere l’editazione della linea attuale. Es., valutare ogni tot la posizione del mouse rispetto agli estremi della mappa e, in base ad un offset stabilito, eseguire un pan da codice. Oppure switchare in modalità pan con un mouse click col tasto destro. O, ancora, fare il pan con le frecce della tastiera…

giovanni

Il giorno 22 marzo 2011 10:41, Stefano <stefano.cudini@gmail.com> ha scritto:

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Name indicates what we seek.

An address indicates where it is.
A route indicates how we get there.
Jon Postel (1943-1998) RFC 791,“Internet Protocol”, 1981

Solo che il mio problema principale rimane unire insieme tracce disegnate in tempi differenti! Esattamente come accade su Potlatch(l’editor online di OSM)

Dalla tua prima emial mi sembra di capire che, anzitutto, vorresti gestire uno snapping guidato, giusto? Avrai sicuramente visto questo esempio: http://openlayers.org/dev/examples/snapping.html
Partendo da questo potresti integrarlo con delle regole per guidare lo snapping in base agli attributi dei punti che compongono la linea. Penso ad es. ad un progressivo per indicare l’ordine di inserimento. Via via che lo snapping ti individua possibili agganci, li puoi filtrare in base al fatto che siano vertici col progressivo massimo rispetto alla linea di appartenenza…
Sono idee buttate così, sicuramente esisteranno strade più smart… Comunque mi hai dato la curiosità di esplorare meglio il controllo OpenLayers.Control.Snapping :wink:

giovanni

Il giorno 22 marzo 2011 10:59, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Stefano.
Progetto interessante.
Ti butto lì un’altra ipotesi, giusto per condividere idee. Per quanto la soluzione al riattacco delle spezzate sia comunque utile in tanti altri casi, per il problema dello spostamento sulla mappa io mi preoccuperei di trovare un modo user-friendly per permettere all’utente di fare un pan senza dover interrompere l’editazione della linea attuale. Es., valutare ogni tot la posizione del mouse rispetto agli estremi della mappa e, in base ad un offset stabilito, eseguire un pan da codice. Oppure switchare in modalità pan con un mouse click col tasto destro. O, ancora, fare il pan con le frecce della tastiera…

giovanni

Il giorno 22 marzo 2011 10:41, Stefano <stefano.cudini@gmail.com> ha scritto:

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Name indicates what we seek.

An address indicates where it is.
A route indicates how we get there.
Jon Postel (1943-1998) RFC 791,“Internet Protocol”, 1981


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Già è possibile definire tra i target del controllo il tipo di snapping da gestire. Per es., per agganciare solo i punti iniziale e finale basta definire come esclusivo tipo di target i “node”, escludendo “vertex” ed “edge”.

Il giorno 22 marzo 2011 11:33, G. Allegri <giohappy@gmail.com> ha scritto:

Solo che il mio problema principale rimane unire insieme tracce disegnate in tempi differenti! Esattamente come accade su Potlatch(l’editor online di OSM)

Dalla tua prima emial mi sembra di capire che, anzitutto, vorresti gestire uno snapping guidato, giusto? Avrai sicuramente visto questo esempio: http://openlayers.org/dev/examples/snapping.html
Partendo da questo potresti integrarlo con delle regole per guidare lo snapping in base agli attributi dei punti che compongono la linea. Penso ad es. ad un progressivo per indicare l’ordine di inserimento. Via via che lo snapping ti individua possibili agganci, li puoi filtrare in base al fatto che siano vertici col progressivo massimo rispetto alla linea di appartenenza…
Sono idee buttate così, sicuramente esisteranno strade più smart… Comunque mi hai dato la curiosità di esplorare meglio il controllo OpenLayers.Control.Snapping :wink:

giovanni

Il giorno 22 marzo 2011 10:59, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Stefano.
Progetto interessante.
Ti butto lì un’altra ipotesi, giusto per condividere idee. Per quanto la soluzione al riattacco delle spezzate sia comunque utile in tanti altri casi, per il problema dello spostamento sulla mappa io mi preoccuperei di trovare un modo user-friendly per permettere all’utente di fare un pan senza dover interrompere l’editazione della linea attuale. Es., valutare ogni tot la posizione del mouse rispetto agli estremi della mappa e, in base ad un offset stabilito, eseguire un pan da codice. Oppure switchare in modalità pan con un mouse click col tasto destro. O, ancora, fare il pan con le frecce della tastiera…

giovanni

Il giorno 22 marzo 2011 10:41, Stefano <stefano.cudini@gmail.com> ha scritto:

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Name indicates what we seek.

An address indicates where it is.
A route indicates how we get there.
Jon Postel (1943-1998) RFC 791,“Internet Protocol”, 1981


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

hahahaha col cavolo che lo avevo visto!!! :slight_smile:
grazie mille!!!
ho cercato ma evidentemente non mi è venuto in mente di cercare attraverso le parole giuste…“snapping” ad esempio! :slight_smile:

è veramente eccezionale l’elenco di esempio di OL!

Il giorno 22 marzo 2011 11:33, G. Allegri <giohappy@gmail.com> ha scritto:

Solo che il mio problema principale rimane unire insieme tracce disegnate in tempi differenti! Esattamente come accade su Potlatch(l’editor online di OSM)

Dalla tua prima emial mi sembra di capire che, anzitutto, vorresti gestire uno snapping guidato, giusto? Avrai sicuramente visto questo esempio: http://openlayers.org/dev/examples/snapping.html
Partendo da questo potresti integrarlo con delle regole per guidare lo snapping in base agli attributi dei punti che compongono la linea. Penso ad es. ad un progressivo per indicare l’ordine di inserimento. Via via che lo snapping ti individua possibili agganci, li puoi filtrare in base al fatto che siano vertici col progressivo massimo rispetto alla linea di appartenenza…
Sono idee buttate così, sicuramente esisteranno strade più smart… Comunque mi hai dato la curiosità di esplorare meglio il controllo OpenLayers.Control.Snapping :wink:

giovanni

Il giorno 22 marzo 2011 10:59, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Stefano.
Progetto interessante.
Ti butto lì un’altra ipotesi, giusto per condividere idee. Per quanto la soluzione al riattacco delle spezzate sia comunque utile in tanti altri casi, per il problema dello spostamento sulla mappa io mi preoccuperei di trovare un modo user-friendly per permettere all’utente di fare un pan senza dover interrompere l’editazione della linea attuale. Es., valutare ogni tot la posizione del mouse rispetto agli estremi della mappa e, in base ad un offset stabilito, eseguire un pan da codice. Oppure switchare in modalità pan con un mouse click col tasto destro. O, ancora, fare il pan con le frecce della tastiera…

giovanni

Il giorno 22 marzo 2011 10:41, Stefano <stefano.cudini@gmail.com> ha scritto:

Buon giorno a tutti

Sto sviluppando un sistema di tracciatura di percorsi e waypoint con interfaccia javascript utilizzando Openlayers e jQuery.

Sono partito da uno degli esempi ufficiali disponibili nella libreria di OL:
http://openlayers.org/dev/examples/editingtoolbar.html
L’applicativo permette poi con dei pulsanti di salvare tutto quello che si è disegnato sopra la mappa, inviando un pacchettone(fatto di punti e linee) GeoJson al server, il quale lo converte in un semplice file gpx.

Ma ho un problema: durante l’operazione di disegno di una traccia, se la linea che traccio è più grande della vista della mappa sono costretto a spezzarla! cioè usare il pan per spostare la mappa e poi disegnare un’altra linea, solo che in questo modo mi ritrovo due oggetti geometrici(feature in OL) differenti e separati, vorrei trovare un qualche modo per proseguire una traccia dal suo ultimo punto inserito.

Ora la mia idea era di implementare un sistema che individua la posizione del click iniziale di una linea e permette di fonderla all’ultimo punto della linea che si trova piu vicino, secondo una certa distanza massima (in pixel).
Questo sarebbe utile non solo per poter disegnare tracce molto lunghe ma anche per aggiungere segmenti ad una traccia gia esistente.

Qualcuno di voi ha mai visto una cosa del genere implementata utilizzando OL? mi basterebbe anche solo un sito di esempio, xke io non riesco a trovare nulla del genere eppure mi sembra una funzionalità abbstanza utile! e sulla documentazione ufficiale non ho trovato nulla!

grazie infinite
Stefano


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Name indicates what we seek.

An address indicates where it is.
A route indicates how we get there.
Jon Postel (1943-1998) RFC 791,“Internet Protocol”, 1981


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e’ una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell’Associazione GFOSS.it.
502 iscritti all’11.2.2011

Name indicates what we seek.

An address indicates where it is.
A route indicates how we get there.
Jon Postel (1943-1998) RFC 791,“Internet Protocol”, 1981

Ciao Stefano,
magari hai già risolto, ma scrivo lo stesso un altro paio di possibilità.

Il pan con comandi da tastiera è già implementato in uno dei controlli, basta aggiungerlo alla mappa e l’utente potrà muoversi con le freccette della tastiera.
Anche la panzoombar permette di spostarsi senza “interrompere” il controllo drawing.
Potresti inoltre mettere fuori dalla mappa i controlli di pan, non so se una di quelle barre è “spostabile” in un div, ma puoi sempre fare tu un paio di funzioni, prendendo spunto dal codice dei controlli OL che fanno il pan (il codice di OL è di facile lettura).
Infine, puoi suggerire all’utente di modificare il tracciato che stava disegnando: disegna una parte, interrompe per zoomare (o altro) e poi riprende in modalità modifica (con l’apposito controllo).

Ciao

Francesco

Stefano ha scritto: