Hulp gevraagd bij opzetten server wandelroutes

Beste mensen,

Wellicht hebben jullie mijn wandelwebsite al eens gezien - Traildino http://www.traildino.com. Ik wil graag gebruik gaan maken van OSM.

Mijn eerste gedachte is om - anders dan Lonvia - selecties van wandelpaden te laten zien, en niet alle routes door elkaar. De bezoeker moet zelf een keuze kunnen maken. Ik hoop dat er iets ontstaat waar wandelaars veel aan hebben. En misschien stimuleert het wandelaars zelfs om actieve mapper te worden.

Het moet een flexibele oplossing zijn, die on the fly de route layers genereert (boven op de standaard OSM tiles), want het lijkt me ondoenlijk om van te voren van alle mogelijke combinaties van routes tiles te genereren.

Ik ben onvoldoende thuis in softwareland om de server die dit mogelijk maakt in elkaar te zetten. Dus jullie raden het al: ik zou ontzettend graag hulp hebben:

  • de ideale toolchain
  • de hardware specificaties
  • installatie en configuratie
  • functionaliteit (“dát zou handig zijn”)

Als jullie denken “waar begint die gozer aan”, dan moet je het eerlijk zeggen… (ik denk dat zelf wel eens).

Ik ben ontzettend blij met alle suggesties hier op het forum. Maar ik vrees dat ik ook een deskundig iemand nodig heb die samen met mij de doos in elkaar wil pluggen en de software helpt installeren en configuren. Het zou fantastisch zijn als iemand daar toe bereid is.

Ik hoop dat mijn vraag in goede aarde valt, en dank bij voorbaat iedereen die wil reageren.

Groet,
Henk

Is zo’n webkaartje voor fietsers niet iets om op je site op te nemen?
Dat kan je ‘gemakkelijk’ aanpassen door de queries in layerdef.js aan te passen op wandelaars.
De benodigde bestanden vind je hier.

Dat is een mooi begin, maar als ik de site van traildino bekijk zit hij meer hier aan te denken.
Mijn frans is net zo goed als mijn chinees, maar als je aan de rechterkant kijkt zie je de verschillende sites met GPX bestanden, die dan op een OSM kaart worden geprojecteerd.
klikje b.v GPSies aan, en pak je linksboven het “handje” dan verschijnt er een pop-up met info van de track asl je hem aanklikt , en kun je hem eventueel downloaden.

Maar ik zou eerst eens kijken of je met de gegevens die ligfietser hierboven heeft staan Zoiets kunt bouwen Onder Over deze kaart staat wel het e.e.a over de hardware,en een contactadres.

Ja, erg mooi.

Voordeel is dat ik dus helemaal geen map server nodig heb. Nadeel lijkt me dat ik niet een overzichtskaartje van bijvoorbeeld heel Nederland kan laten zien (te veel data). Ander nadeel is dat de data client side worden verwerkt (toch?). Aan de andere kant werkt de WMS server van die Franse website ook niet erg snel.

Mooi begin dus.

Zou er een mogelijkheid zijn om ook de osmc:symbol tag op te nemen in de route layer? Ik weet onvoldoende van de api, maar kan ik ook de bounding box van de data opvragen?

Alles kan. Dat de data clientside wordt verwerkt is eerder een voor dan een nadeel. Het gaat namelijk sneller dan png’s downloaden van een wms server.
Overzichtskaartjes lukken ook prima, je verandert de route dan in een marker, bij klikken zoom je in en laat je die route zien. Het is alleen … veel werk en studie.

Het tekenen van de routes is inderdaad eenvoudig. Dit zijn bijvoorbeeld alle routes van Stichting Wandelnet:

make_layer("http://overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][ref~'LAW|SP'](bbox);way(r)(bbox);node(w););out+skel;", "green",name="#l#LAW of SP", 3, false),

Ik heb wel wat vragen:

  1. De hoeveelheid data levert wel een probleem op. De Overpass api is vrij snel, maar soms te druk, en vervolgens moet de browser alle data nog verwerken. Kan ik dit oplossen?

  2. Ik zou de individuele paden binnen deze dataset graag een aparte kleur of icoon willen geven. Is dat eenvoudig op te lossen met de Overpass api of vergt dat programmeerwerk elders?

  3. Hoe kan ik recursief alle nodes van een route, die is opgesplitst in relaties en subrelaties, vinden? Het moet vast kunnen, maar het lukt me niet.

Bijvoorbeeld: in dit geval vind ik de nodes van de vier subrelaties waaruit de “Stelling van Amsterdam” is opgebouwd, maar NIET de twee subsubrelaties:

overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name='Stelling van Amsterdam'];rel(r);way(r);node(w););out+skel;

En in onderstaand voorbeeld vind ik wel alle nodes van de twee subsubrelaties, maar niet die van hun vier parents:

overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name='Stelling van Amsterdam'];rel(r);rel(r);way(r);node(w););out+skel;

Maar ik wil natuurlijk alle nodes hebben van alle relaties en subrelaties, en dat lukt me niet

En als je ze achterelkaar plakt?

overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name='Stelling van Amsterdam'];rel(r);way(r);node(w);relation[route~'hiking|foot'][name='Stelling van Amsterdam'];rel(r);rel(r);way(r);node(w););out+skel;

Je kan makkelijker recursen door een relation met: >>

Dit pakt alle wat onder de relatie hangt, inclusief sub relaties, way nodes, en member nodes.

Dank - beiden werkt! Ik ben nog wat dieper in de api gedoken, en er blijkt veel mogelijk te zijn.

Minder fraai is de hoeveelheid data die naar de client wordt overgehaald. Voor een klein pad is het OK, maar als ik de Via Alpina op deze manier wil bekijken, wordt het tricky (5MB “out+skel;”).

Vandaar nog twee vraagjes:

  1. kan ik de output van de api strippen van alle informatie die niet ter zake doet? Heb ik het goed dat alleen de lat/lon informatie van de nodes wordt gebruikt en de andere informatie wordt genegeerd? Zo ja, dan hoeft de output set niet alle ways en relations te bevatten.

  2. kan ik aan de client kant de hoeveelheid lon/lat punten die getoond worden uitdunnen? En dan nog liefst op een slimme manier die rekening houdt met zoomlevel en bounding box?

Wellicht weten jullie nog andere tricks om de client load te verminderen?!

Henk, weet je het zeker ? :laughing:

@Noordfiets: heb je misschien een voorbeeld hoe je een route in een marker om kunt zetten ?

Groeten,

Bert

ja of gewoon lui :roll_eyes:

1- de ways zijn nodig als je wegen wilt tekenen, anders weet de client niet welke nodes aan elkaar verbonden moeten worden. Welke query gebruik je ervoor?
2 - je kunt bij de layer als (extra) strategie ‘cluster’ opgeven. Dan worden dicht bij elkaar getekende punten slechts als 1 punt op de kaart getekend.

Deze:

http://overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name='Stelling van Amsterdam'];>>;);out+skel;

Dat kan vast efficienter.

Als ik dit toevoeg aan new OpenLayers.Layer.Vector ():

strategies : [new.OpenLayers.Strategy.Cluster({distance: 20, threshold: 3})]

Dan krijg ik een soort morse code: streepjes en puntjes door elkaar.

Maar dit wordt meer een OpenLayers cursus dan OSM. Ik kom er denk ik wel uit. Dit is absoluut de goede weg.

Mijn hersenspinsel:

Is de manier zoals hier gebruikt wordt niet iets?
Dat je bv eerst met markers werkt en daar dmv een click event de route uithaalt. de markers zoek je op mbv de boundingbox.
Zit het begin en het eindpunt van de route in de BBox dan laat je een marker zien, zit een deel van de route (een subrelatie) in de BBox dan haal je hem ook op.
Zo hoef je niet alle data eerst op te halen.
Misschien is er wel iets te doen met het zoomniveau.
Zo te zien zit je wat meer in het webpagina’s bouwen dan ondergetekende, ik probeer iets te maken om mijn Tracks vanuit een simpele SQL database op een kaart te krijgen met OSM en zit aan het bovenstaande te denken.

Edit: Ik zie dat Noordfiets dit ook zo benoemd hierboven…

Nauwelijks. Dat beetje data wat de relaties innemen is haast niks. En de rest is nodig. En het gaat redelijks snel toch? Het tekenen zelf kost trouwens heel weinig tijd van de client.
Eventueel moet dit nog werken:
relation[route~‘hiking|foot’][name=‘Stelling van Amsterdam’];rel(r);(way(r);node(w););out+skel;
Maar het scheelt echt heel weinig in data.

Ik heb wat met die kaarten gespeeld, maar het gaat redelijk snel, alleen het ophalen bij overpass is soms even traag.

Knap werk! :stuck_out_tongue:

Maar daar houdt het ook wel op. Ik kom er achter dat wandelroutes en mtb-routes niet echt consequent zijn ingevoerd, en dat veel info die je nodig hebt er niet instaat. Startpunt ontbreekt, richting van een route is er niet …
Om even MTB als voorbeeld te gebruiken: ik had verwacht dat de startpunten als node iets als mbt:route:start=yes zouden hebben en de relaties iets als mtb:route:clockwise = yes/no etc zouden hebben. Bij wandelroutes staat niet of er in 1 of 2 richtingen borden zijn etc.
Om een zinvolle kaart te maken moet je dus gewoon de info extern ophalen en over OSM laten zien. Of xml bestanden van de routes in OSM vorm met de eigen ingevulde info maken en vanaf de eigen server laden.

Dat is één probleem. Veel lange afstand wandelpaden zijn in stukjes en beetjes ingevoerd, met verschillende tags, soms opgedeeld in child en child-child relaties. En na verloop van tijd wordt alles weer vernaggeld :frowning: door andere gebruikers.

Maar ik ben toch een stapje verder. Met “>>” (tip sebastic) krijg ik alle geassocieerde relaties, en met “>” filter ik de relaties zelf er uit en hou ik alleen de ways en de nodes over. Dat scheelt 10% op een pad als de Stelling van Amsterdam.

overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name='Stelling van Amsterdam'];>>;);>;out+skel;

Mooi toch?!

Het tweede probleem zijn de echt lange paden. Een pad in Nederland laadt altijd snel. Maar een pad als de Via Alpina levert een XML bestand van 4,8 MB op. Door de recurse down query wordt dit slechts 100K minder. Ik vrees dat het niet anders is: die 4,7 MB moeten overgehaald worden naar de client.

overpass-api.de/api/interpreter?data=(relation[route~'hiking|foot'][name~'Via Alpina'];>>;);>;out+skel;

Maar dan nu het interessante! de cluster strategy in OpenLayers waar jij het over had! Wat ik zou willen, is bij verschillende zoom niveau’s zo efficient mogelijk lijnen tekenen. Daarmee voorkom ik het overbelasten van de browser (toch?). Heb jij hier meer ervaring mee?

Dit is een mooie oplossing voor kleine wandelroutes. Maar het kenmerk van Lange afstands wandelpaden (Traildino) is dat ze dwars door het land / continent lopen, en dat de bezoeker van Traildino wil weten hóe ze lopen.

Dat snap ik, en ik zou eerder zeggen dat locale routes geen marker nodig hebben omdat de downloadtijd erg laag is (weinig relaties).
Maar hoe ga je lange routes zichtbaar maken:

Wil je alle routes laten zien, dan zit de gebruiker eerst 5 minuten tegen een zandloper aan te kijken, je zult de data wel eerst moeten ophalen en omzetten. (dit was je commentaar ook op de Franse WMS)
Ik zou eerder zeggen dat een simpele marker (of een boundingbox die plaats aangeeft) met een info-ballon, met bv de naam en nadat je hier op klikt, je dan alle relaties ophaalt.

Voorbeeld: Noaberpad langs de grens: haal de lon en lat gegevens op voor de BBox en laat in de infobox de omschrijving en relevante data van je site zien, bv een waarderings cijfer. Klik ik hier op, wordt de data opgehaald.
Je kunt de data van de BBox bv eens per week ophalen en in een XML file op je eigen server zetten, hierdoor kun je snel een overzicht genereren.
De relevante gegevens haal je pas na het selecteren op.

Maar goed, het is natuurlijk jouw project, ben wel benieuwd of wat je wilt praktisch gaat werken, en dat is zeker niet negatief bedoeld :wink:

Edit: Moet zeggen dat me de snelheid me van deze niet tegenvalt vanavond, vanmiddag kreeg ik alleen een zandloper ?