Gps Trip Organizer

Oppdatering på http://www.atlefren.net/post/2011/09/mineturer-beta/

Jeg har flere ganger skrevet om hvordan man kan legge GPX filer over kartverkets WMSer, og dermed slippe unna “stygge” løsninger med Google Maps og særs dårlig detaljgrad på kartene. Dog, løsningene jeg har skissert før har krevd at man aktivt legger en GPX-fil på en webserver og deretter inkorporerer den i JavaScript kode.

Jeg har flere ganger også nevnt at det smarteste ville være å lagre GPX-filas geometrier i en PostGIS base, og dermed slippe å forholde seg til løse GPX-filer. Dette krever dog litt mer “jobb” enn en enkel JavaScript-side, man trenger noe serverside-kode, og man trenger en installasjon av PostGIS. Uansett, dette er jo ting jeg jobber ganske mye med til vanlig, så jeg tenkte å teste litt.

Mine “weapons of choice” er:

  • OpenLayers – Det mest kjente OpenSource kartrammeverket for Javascript
  • Java og Spring – Mest fordi jeg begynner å kjenne dette rammeverket ganske godt, men også fordi det gir meg tilgang til GeoTools
  • GeoTools og JTS, Java-biblioteker for å håndtere geometrier
  • PostGISDen ledende OpenSource romlige databasen
  • jQuery- JavaScript rammeverk som gjør livet så mye enklere!
  • Flot, et fint lite JS-bibliotek for å lage grafer

I tillegg tok jeg endel andre beslutninger ganske tidlig:

  • Jeg ville ha kartet mitt i EPSG:900913-projeksjonen (“Google”-projeksjonen), da kan jeg bruke kart både fra Kartverket, Google Maps og OpenStreetMap (blant andre)
  • Jeg ville lagre geometriene i EPSG:4326 (WGS84 Lengde-/Breddegrad). Dette er koordinatene som brukes i GPX-filer, dermed mister jeg ikke noe nøyaktighet ved å transformere
  • Planen var i utgangspunktet å lagre tracks i GPX-filene som MULTILINESTRINGer i PostGIS i XYXM (lat,lon,høyde og tid), men det viste seg at jeg med GeoTools ikke klarte å lagre 4D-geometrier. Løsningen ble å dobbeltlagre geometriene, både som en 2D-Multilinestring og som en samling 2D-punkter med høyde og tid som ekstra attributter. Ja, redundant, men da kan jeg hente ut kun linjegeometriene når jeg trenger det, og all informasjon for å generere høyde- og fartsprofiler
  • Jeg tenkte meg fort en løsning med innlogging, der man kan se alle sine opplastede tracks, og en mulighet for å hente ut en “permalenkle” man kan dele med andre
  • Jeg så fort at dette ville bli en “thick client”-applikasjon, som gjør bruk av mange AJAX-kall mot server-side funksjoner
  • Jeg ville at kartet skulle fungere for GPX-filer fra hele verden. Dermed er transformsjon til UTM sone 33 ikke en mulighet. Det viste seg at OpenLayers har en fin avstandsberegningalgoritme, som var lett å porte til Java.

Så, oppdaget jeg også endel problemområder:

  • Det å generere høydeprofiler var greit, her er man bare begrenset av høydeunøyaktigheten i GPS-enheten som har genrert GPX-fila. Dog, fartsgrafer er et problem, de blir så utrolig “hakkete”.
  • Det å bruke GeoTools for å kommunisere med PostGIS var utrolig krøkkete, dermed har jeg endt med å bruke WKT, ikke en helt optimal løsning
  • Jeg er elendig på GUI-design, og spesielt på grafiske ting. Dermed ser ting ikke helt optimalt ut.
  • Siden dette er en Java Web App, som kjører med PostGIS, duger ikke webhotellet mitt hos Subsys. Det betyr at jeg må se på en dedikert server, eller en Cloud-løsning. Enn så lenge har Alexander gitt meg tilgang på kj0leskap, en grei boks, men ikke noe high performance ;)
  • GeoTools har ikke noen skikkelig GPX-parser. Istedenfor å leite opp en skikkelig GPX-parser endte jeg opp med å skrive min egen med hjelp av SAXParser, noe som gikk ganske glatt når jeg gløtta litt mot GPX-spesifikasjonen. Dog, “routes” veit jeg ikke helt om er relevant.

Dog, på tross av dette (og det faktum at jeg kun jobber med dette på fritiden) har jeg kommet meg et stykke på vei, og på lørdag kveld la jeg ut en liten preview på http://geomatikk.eksplisitt.net/GpxUpload. Du kan teste den med brukernavn/passord test/test. Test gjerne å laste opp en GPX-fil, og skulle noe tryne er det fint om du sender meg en mail og sier fra om hva som gikk galt. Jeg blir også veldig glad om du legger ved GPX-fila du prøvde å laste opp, slik at jeg kan få feilsøkt litt. Jeg har nemlig funnet ut at ikke alle GPX-filer er like.

I tillegg har jeg lagt ut kildekoden til prosjektet på BitBucket, se https://bitbucket.org/atlefren/gpsorganizer/, under en BSD-lisens. Der har jeg også en TODO-fil, med følgende innhold (denne kommer jeg nok til å legge over i Issue-trackeren på BitBucket). TODOen min ser pr i dag slik ut:

in no particular order:
-handle different kinds of errors with gpx files
-find a solution for speed graph
- add labels to graph
- clustering on trip points
- change markers for trip points
- find a faster server than kj0leskap
- make it possible to delete trips
- make it possible to edit trip info
- consider displaying a simplified version of the geomerey
- make a "merge trips" function
- make a user register page
- use a database-table for user management
- write tests(!)
- some gui-improvements
- some kind of documentation?
- prettier login-page
- some kind of logo?
- make it possible to change color for a trip (and use another default color)
- discard waypoints? Or at least find a nicer presentation
- figure out if "routes" is relevant
- check for more GPX-types (tested qstarz and mytracks)
- prettify the upload-page
- blank out fields on upload page for next upload
- more inituitive layer-switcher
- more maps (from where?)
- consider flicker-integration
- handle error with large GPX-files
- fix charset hell

Så? Hva synes du? Er dette en tjeneste du kunne tenke deg å bruke? Er det noen ting du ikke synes fungerer? Har du oppdaget noe feil? Har du lyst til å bidra? Skrik ut, ting går sakte fremover her, så ikke forvent mirakler på kort tid, se det mer som et prosjekt jeg kjører for å lære meg endel ting, men som jeg håper andre kan ha nytte av.

OBS: Jeg tror ikke brukerhåndteringen er så glad i flere samtidige brukere, så opplever du problemer kan det være årsaken :\)

(PS: Det jeg har ute nå er bare en testversjon, så ikke regn med at linker vil fungere i fremtiden, eller at oppetiden er noe å skryte av. Regn ei heller med at dataene du laster opp vil ligger her i all evighet. DS)

12 thoughts on “Gps Trip Organizer

  1. Martin Bekkelund

    Du vet at jeg liker dette! Og du vet at jeg har lengtet etter en slik løsning lenge! Setter derfor stor pris på at du gidder og at du er like glad i slike sære kartting som meg. :-)

    Når det gjelder GUI-ting tar jeg gjerne på meg jobben med å lage et design. Jeg er ingen designer, men jeg har da skrudd sammen noen design som fungerer bra og har fått bra tilbakemelding. Det er bare å ta kontakt på e-post!

    Opplasting av GPX-filer i testløsningen fungerer fint. Jeg har tatt utgangspunkt i min Garmin Forerunner 305, lastet opp data til webløsningen Garmin Connect, og eksportert GPX-filer derfra.

    Til oppgavelisten din kan du jo putte på muligheten for mod_rewrite for penere lenker på permalenkene, om mulig.

    Ellers digger jeg tanken på en Flickr-integrasjon. Kunne vært fint å fått det i en lightbox ala Fancybox.

    Det kunne også vært kjekt å velge Statens kartverks topokart 1, de som ser ut som N50-serien.

    Så ja, dette er definitivt en tjeneste jeg kunne tenke meg å bruke. Idealet hadde selvfølgelig vært å kunne drifte dette på eget webhotell, men en nettjeneste er selvfølgelig heller ikke å forakte. Jeg har en dedikert server som muligens kan benyttes til noe fornuftig, dersom du har behov…

  2. Atle Post author

    Hehe, jeg må inrømme at jeg hadde en liten følelse av at du kom til å trigge på dette Martin ;) Dog, det er artig å jobbe med noe slikt som dette uansett, om det gleder andre er det bare en bonus!

    Kjempeflott om du har mulighet til å bidra til litt design av ting, trenger ikke de helt store tingene, men alt jeg tar i får en veldig “ingeniør-design”-feeling over seg. Sender deg en mail ila dagen eller morgendagen.

    Flott å høre at opplasting fungerte bra for deg, har sett noen andre tilfeller som ikke fungerer, men skal feilsøke litt ved neste nerdeanledning ;)

    Flicker-integrasjon er for tiden kun på “artig-ide”-stadiet, men om de har mulighet for å hente inn geotaggede bilder basert på brukernavn burde det jo la seg gjøre. Når andre ting begynner å nærme seg ferdig er nok det noe jeg vil se på.

    Såklart burde jeg jo få inn flere kart fra Kartverket, jeg legger det til i TODOen min. Det samme gjør jeg med tanken om å få til “penere” permalenker.

    Det å kjøre på eget webhotell tror jeg blir vanskelig, all den tid jeg har valgt litt “sære” komponenter, men jeg ser jo at flere cloud-løsninger støtter det jeg trenger. Tar kontakt om det blir aktuelt å låne serverplass hos deg, enn så lenge fungerer nok kj0leskap ;)

  3. Sindre Haverstad

    Minner litt om et prosjekt vi hadde i GIB2 i våres hvor jeg stod for programmeringa. Riktignok lagde vi vår applikasjon mer retta mot orienteringsløpere og gpx-tolkinga som jeg gjorde i PHP var nok en del enklere enn din. Alt var vel rett og slett mer simpelt i vår løsning.

    Det gikk mye tid på å forstå hvordan jeg skulle få OpenLayers, PostGIS, JavaScript og PHP til å prate sammen. Det eneste jeg hadde gjort litt av tidligere var noe PHP. Vi hadde ambisjoner om å gjøre mer analyser på strekk, men det ble det ikke tid til. Dessuten hadde vi også problemer med å få henta den fjerde dimensjonen (tid) ut på en nyttig måte fra PostGIS. Vi brukte også mye tid på å prøve å få til en god georeferering av orienteringskart.

    For å vise StatKarts WMS i OpenLayers tok vi utgangspunkt i noe du, Atle, hadde gjort tidligere.

    En kortfatta rapport fra det prosjektet kan dere om det er interessant finne på http://dl.dropbox.com/u/19081422/GIB2-prosjekt.pdf

    Om dere skulle være interessert i å se en demo eller kildekode er det bare å ta kontakt med meg på e-post fornavn æt etternavn dot com :)

  4. Alexander Salveson Nossum

    Kult at du har fått opp dette! Og ikke minst hyggelig at Kj0leskap kan få litt rotering på diskene sine i ny og ne :) Når det kommer til hosting av dette så har kanskje noen cloud-hostere en konfig som passer?

    En funksjonalitet jeg umiddelbart kunne sett nytten i var å lage en tjeneste for brukerne slik at de selv kunne hente inn GPX-ruten i fks. GeoJSON/KML og legge direkte på egne GMaps eller tilsvarende. I tillegg kunne tjenesten ha gitt ut høydeplottet som et statisk bilde eller kanskje som en mer dynamisk javascriptsak?

    Bra arbeid!

  5. Atle Post author

    @Sindre:

    Jeg fikk rapporten deres av André i sommer, artig prosjekt dere hadde der! 4D har jeg også slitt, med, men min løsning ble å lagre alt som punkter, med ekstra attributter for høyde og tid. Tanken om å legge inn georefererte O-kart er også kul, og for orienteringsløpere er jo dette en kul funksjon, strekkanalyser etc er også nyttig (men litt “smalere” enn mitt scenarie).

    @Alex: Vi må jo passe på å rotere diskene der litt, sant det! Jeg har sett litt på forskjellige cloud-løsninger, http://www.heroku.com/ ser ut til å støtte både java og PostGIS, mens Amazon e3 kan man (etter hva jeg har forstått) sette opp alt slikt selv på. Så mange muligheter, men vil avvente det skrittet til jeg faktisk har noe mer enn en demo.

    Når det gjelder funskjonalitet er eksport til KML/GeoJSON genialt, i tillegg burde jeg vel faktisk lagre selve GPX-fila, slik at man kan hente ut denne senere.

    Jeg hadde jo et prosjekt (https://bitbucket.org/atlefren/heightprofile/overview) med å generere et statisk høydeprofil-bilde fra GPX, så å inkorporere dette som en option er jo en mulighet. Ellers kan man jo på samme måte som for kart lage en permalink for høydeprofil?
    Jeg noterer uansett forslagene dine!

  6. Magnus

    Dette var porno, Atle :) Funker som smør.

    Litt pimpa brukergrensesnitt med brukerkontoer så kan dette bli en virkelig lekker sak.

    Veldig bra arbeid!

  7. Atle Post author

    Du veit du har gjort noe rett når det sammenlignes med porno, selv med ingeniørdesign;)

    satser på at formen blir bedre, så jeg får på plass brukerkontoer ila helga! Og så får vi se om Martin får gjort noe css-mirakler her..? ;)

  8. Pingback: HC SVNT DRACONES » MineTurer Beta

  9. Pingback: Friprogsenteret – MineTurer.org — en enkel studie i fri programvare

  10. hans jørgen woxen

    Har lastet opp en gpx fil, ser jo ok ut, har en annen løsning som gir deg mye og den heter sportstrack fra five zone, men ingen av disse gir meg det jeg er på jakt etter, nemlig muligheten for å få ut en høydeprofil med stignings prosenter, jeg har en utmerket applikasjon fra ciclosport som gir meg dette, men her er det ikkke mulig å importere gpx filer -

    mh hans jørgen woxen

  11. Atle Post author

    Hei og takk for kommentar!

    Det finnes mange løsninger som gjør mye av det samme som mineturer, men jeg har enda ikke funnet noen andre (web-baserte) løsninger som bruker norgeskartet.

    Jeg er ikke helt 100% sikker på hva du ønsker, en graf med tid eller avstand på x-aksen og og prosentvis stigning i punktet på y-aksen? Dette høres jo ikke umulig ut, jeg gjør gjerne et forsøk på å implementere det når jeg får mulighet til å sette meg ned med dette igjen

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>