AllTrails har härlett delsträckor från OpenStreetMap-data och lagrat dessa i en separat, härledd databas. Databasen används för att skapa kartrutorna för AllTrails-karttypen och vårt verktyg för att skapa anpassade kartor.
I det här dokumentet offentliggörs metoden för att ändra den ursprungliga OSM-databasen enligt kraven i avsnitt 4.6.b av ODBL-licensen.
Till skillnad från OSM-databasen, som bygger på noder och vägar (där vägarna motsvarar hela vägar/leder och noderna motsvarar vägarnas/ledernas ändpunkter), bygger vårt material på konceptet delsträckor (dvs. enskilda sträckor som bildar en väg och som börjar och slutar där vägarna möts). OSM-databasen innehöll tidigare delsträckor, men dessa togs bort i oktober 2007 för att förenkla datamodellen (enligt följande dokumentation: https://wiki.openstreetmap.org/wiki/Segment).
Algoritmen för att skapa vår härledda databas är följande:
1. Använd Overpass API för att ladda ner OSM-vägdata i 2 x 2 graders rutor, mellan latituderna -58 och +72:
"http://www.overpass-api.de/api/xapi?way[highway=path|track|footway|steps|bridleway|cycleway][bbox=#{lng},#{lat},#{lng+TILE_DIM},#{lat+TILE_DIM}]"
Data laddas ner i formatet .osm.
2. Konvertera varje 2 x 2-ruta från .osm- till .geojson-format med hjälp av OsmToGeojson för att underlätta tolkningen.
3. Iterera över de vägar som ingår i varje ruta och lagra väginformationen i en hash med väg-id som nyckel (detta krävs eftersom samma väg kan förekomma i flera 2 x 2-rutor)
4. Iterera över varje väg (A) som finns i hashen. För varje väg (A), iterera över punkterna för alla andra vägar (B) och jämför punkterna med den ursprungliga vägen (A) tills en matchning har hittats. Vid den punkt där vägarna stämmer överens, lagra en post i en annan hash, som också har väg-id som nyckel, men med ett värde som motsvarar en matris över alla korsningar av den här vägen (A) med alla andra vägar (B).
5. Iterera över varje väg (A) igen, och dela den här gången upp varje väg i delsträckor vid varje korsning som har hittats och lagrats i den hash som skapades i föregående steg.
6. Beräkna det totala avståndet för varje delsträcka genom att beräkna det kartesiska avståndet mellan punkterna på sträckan och sedan summera värdena.
7. Beräkna avgränsningsrutan för delsträckan genom att hitta lägsta och högsta latitud och longitud för alla punkter på vägsträckan och sedan skapa respektive hörn av rutan som varje unik kombination av de fyra lägsta och högsta värdena.
8. Skicka varje korsning och/eller delsträcka till Geojson eller något annat format och lagra unika data för delsträckor efter behov, till exempel:
Korsningar – id (godtyckligt men unikt), latitud, longitud
Delsträckor – ursprungligt OSM-väg-ID, points_data, intersection_start_id, intersection_end_id, distance_total, bounding_box, private_access (access=private, access=no), bicycle_accessible (bicycle=yes)