Hulp gevraagd bij opzetten server wandelroutes

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 ?

LAW’s, LF’s en knooppuntroutes zijn allemaal twee richtingen en hebben niet echt speciale startpunten (je kunt overal opstappen). Die hebben dus ook allemaal geen speciale tags voor richting en startpunt(en). Deze routes maken echter wel de bulk uit van alle gemapte routes in Nederland. Blijven over de lokale routes.

Bij de paar lokale rondjes die ik heb gemapped heb ik de relaties zoveel mogelijk voorzien van:

  • Een tag: oneway=yes (maar geen oneway=no voor tweerichtingsroutes)
  • Een tag: direction=clockwise|counterclockwise (natuurlijk weer niet voor tweerichtingsroutes)
  • Nodes met de role start

Nu ik dit zo teruglees zou het waarschijnlijk handig zijn om voor de tweerichtingsroutes de tag direction=both te gebruiken.

Ik heb ooit een discussie gehad met Eimai. Die vond de direction tag niet goed genoeg, omdat je er niet alle rare uitzonderingen als rondjes in de vorm van een 8 of 9 mee kon taggen. Hij vond dat voor een éénrichtingsroute (maakt niet uit hoe lang) alle wegen van een role=forward|backward voorzien moesten worden.

IMHO zijn tags die beginnen met dingen als mtb:route: erg fout. Dat moet duidelijk zijn uit de context, als je de tags op de juiste plaats zet, namelijk in de relatie zelf.

Dat zag ik … de examenroute als lcn :slight_smile:
Lokale wandelroutes/fietsrondjes/mtb routes hebben vaak meerdere opstappunten, gunstig gelegen bij een parkeerplaats of nog liever cafe. Nou vallen die routes zobiezo een beetje buiten de OSM doelstelling, en voel ik me ook niet geroepen daar in te gaan roeren. Maar om mijn idee te geven: ik zou het liefst bij een relatie de start als tag geven met als waarde een node-id ipv een tag start op de node zelf. En dan kun je ook meerdere tags start geven met meerder nodes. En liefst lengte en richting ook op de relatie.
Dat ik mtb:route:start als voorbeeld gebruikte is omdat als je op de node zelf tagt die node deel uit kan maken van meerdere relaties. Tag je de node op de relatie dan vervalt die onduidelijkheid.
Maar ook voor bv Pieterpad kun je Pieterburen/Maastricht als begin/eind taggen. Daar hoef je niet te beginnen natuurlijk maar het zou wel duidelijk maken of een route compleet is, vooral als het geen rondje is.

Blijft de vraag of dat allemaal wel in OSM thuishoort. Ik denk eigenlijk van niet, of althans niet in de hoofd database. Ik heb geloof ik al vaker een pleidooi gehouden voor meer gelaagdheid in de database ipv 1 gigantische brij. Omdat ik uit ervaring weet dat dat op den duur altijd problemen geeft. Maar goed, OSM is zoals het is, en het zal wel goed doordacht zijn …

Dat is toch precies wat er gebeurt as je één of meerdere node(s) aan de relatie toevoegt en de role “start” geeft. De mapper hoeft zo niet dat nummer over te typen, maar het zit wel in de relatie. Bovendien waarschuwt een goede editor als je dingen weggooit die onderdeel zijn van een relatie.

Da’s ook weer waar. Morgen eens kijken of ik daar markers voor kan bedenken.

DAT moet je me eens uitleggen ???

en WIKI Project Fietsroutes

Zou wel eens willen weten wat dan precies de doelstelling is… en wat is het verschil tussen een regionaal knooppuntenroutenetwerk en een regionaal MTB netwerk dan ?

OSM is een wegenkaart, zoals je eerste quote al aangeeft. Die is bedoeld om wegen en andere geografische features in te zetten. De keus om alles maar in die database te dumpen is ronduit fout. Natuurlijk is het leuk om de fietsroutes te laten zien, maar stop die aub niet in de wegendatabase. Zet voor die niet-geografische dingen een aparte database op en voeg het geheel dan samen bij het bekijken.
Alle data zelf willen ‘hebben’ is ook niet meer van deze tijd. Het internet is een grote gemeenschappelijke database en het is niet zinvol al die gegevens zelf op te gaan slaan. Bovendien moet je ze dan ook zelf bijhouden.

Neem nou het hier vaak besproken BAG, en zet dat eens naast de GBA. Niemand komt op het idee die op 1 hoop te gooien. Een gebouw en zijn bewoners zijn verschillende dingen. De koppeling is dat in de GBA staat in welk gebouw iemand woont, en je via die link uit de BAG weer informatie kunt halen over dat gebouw. En omgekeerd natuurlijk. Toch is dat bij elkaar gooien precies wat we in OSM nog steeds doen. Sterker: er is zelfs veel gepraat over het in de OSM database dumpen van BAG.

Of kijk eens naar Google. Die stopt echt zijn wegen en poi’s niet in dezelfde database. Die maakt layers die verwijzen naar verschillende databases en voegt het samen in zijn api.

Wat mij betreft heeft OSM hiet echt een afslag gemist door op ouderwetse ( jaren 80 ) voet alles bij elkaar te gooien. Wie met databases werkt weet allang dat dat niet hoort en uiteindelijk een oncontroleerbare gegevensset oplevert. Als daar geen fundamentele verandering in komt loopt OSM straks achter de feiten aan en verliest zijn positie.