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
- PostGIS – Den 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)