Kwaliteit OpenStreetMap voor routeplanner toepassingen

Ik ben al een tijdje bezig aan routeplanner toepassingen op basis van de OpenStreetMap kaart. Voor Nederland zijn er nu ruim 16.000 knooppunten die niet bereikt kunnen worden wanneer men vanuit Zuid-Limburg met de auto op pad zou willen gaan door heel Nederland. Vaak zijn het kleine details die niet kloppen en handmatig moeten worden aangepast, waarna een groot aantal punten er achter opeens weer werken.

Hebben mensen ideeen hoe dit soort connectiviteit problemen het beste kunnen worden weergegeven? Ik denk aan een soort overzicht dat je als mapper op de hoogte bent van de problemen in jouw buurt en dat je ook direct weet wat er aan de hand is. Ik kan me voorstellen dat je een stukje netwerk ziet dat wel bereikbaar is, in kleur 1 en in kleur 2 het gebied wat dat niet is en mocht er volgens OpenStreetMap dataset wel een relatie zijn dat die dan wordt gemarkeerd met direct de reden waarom het gebied niet kan worden betreden.

Alle blauwe puntjes zijn problemen. Om in percentages te praten, het is minder dan 2% van de Nederlandse dataset.

Stefan, als ik zo even kijk naar wat blauwe klonten langs de Zuid Hollandse eilanden zijn dat gebieden waar volgens mij geen auto mag komen (fiets/wandelgebied). Bedoel je dan dat het probleem is dat de access tags niet strict genoeg zijn? Bijvoorbeeld tracks/paths zonder motor_vehicle=no waar dat wel nodig is en dat auto’s routetechnisch nu enkel door bollards/gates en dergelijke tegen worden gehouden?

Heb je dit als WMS beschikbaar zodat we gemakkelijker vanuit JOSM de issues kunnen oplossen?

Eigenlijk zou je zoiets naast voor auto’s dit ook willen kunnen zien voor andere soorten vervoermiddelen.

Stefan, hoe defineer je precies “bereikbaar”? Neem je de access-tags en evt. de conditionals mee? Je hebt er rare dingen ertussen zitten zoals motorcar en motor_vehicle, en ook “destination” c.s. kunnen een oorzaak zijn, afhankelijk met hoe jij ze verwerkt.

Het zou dus een probleem met de aansluitingen kunnen zijn (dat er geen gemeenschappelijke node is) maar evengoed ook een tagging-probleem.

Kun je dit onderscheid inzichtelijk maken?

Op Vlieland en Schiermonnikoog mogen geen auto’s van niet-eilanders komen (op Schier alleen met speciale vergunning gemeente).

Toevallig ontdekte ik er gisteren zo eentje… Nu was dat wel een onbelangrijk stukje weg, waar bijna geen hond met een auto komt, maar het was er toch.
Ben helaas even vergeten welke pagina dat dit ook weer zichtbaar maakt, misschien kan iemand die link ff posten. Dan zal ik in Oostelijk Zuid-Limburg in ieder geval op zoek gaan naar de knelpunten. :wink:

Om een hoop vragen te kunnen beantwoorden; ik ga uit van een auto die vanuit Maastricht vertrekt en naar een node toe wil rijden. Dus als je niet op Schiermonnikoog kunt komen want er is geen boot verbinding die de juiste access tags heeft, dan wordt dat gebied blauw. Stel dat je op Schiermonnikoog zou beginnen, dan is weer heel Nederland blauw omdat je niet van het eiland kan afkomen. Ik heb wat magie gebruikt om tot een veel kleinere lijst met punten te komen, dan je normaal zou verwachten. En ja SanderH ik behoud alles waar geen expliciete “je mag hier niet komen” op staat. Onderstaande is mijn interpretatie van OSM tags, mocht iemand zeggen “je mist nog wat!” roep het maar :wink:

Onderstaande bijgewerkt op basis van feedback.


if (strcmp(key, "highway") == 0) {
    attributes |= 1;
    if (strcmp(val, "motorway") == 0 || strcmp(val, "motorway_link") == 0) {
        attributes |= 2;
        maxspeed = 130;
    } else if (strcmp(val, "trunk") == 0 || strcmp(val, "trunk_link") == 0) {
        maxspeed = 100;

    } else if (strcmp(val, "primary") == 0 || strcmp(val, "primary_link") == 0 ||
                strcmp(val, "secondary") == 0 || strcmp(val, "secondary_link") == 0 ||
                strcmp(val, "tertiary") == 0 || strcmp(val, "tertiary_link") == 0 ) { 
        maxspeed = 80; 

    } else if (strcmp(val, "unclassified") == 0) {
        maxspeed = 60; 

    } else if (strcmp(val, "residential") == 0) {
        maxspeed = 30; 

    } else if (strcmp(val, "living_street") == 0 || strcmp(val, "track") == 0 ||
                strcmp(val, "service") == 0) {
        maxspeed = 15; 

    } else if (strcmp(val, "pedestrian") == 0 || strcmp(val, "footway") == 0 ||
            strcmp(val, "platform") == 0 || strcmp(val, "bus_guideway") == 0 ||
            strcmp(val, "bridleway") == 0 || strcmp(val, "steps") == 0 ||
            strcmp(val, "cycleway") == 0 || strcmp(val, "path") == 0) {
        maxspeed = 15; 
        attributes |= 4;

    } else if (strcmp(val, "raceway") == 0 || strcmp(val, "construction") == 0 || strcmp(val, "proposed") == 0) {
        ignore = true;
    }
} else
if (strcmp(key, "junction") == 0) {
    attributes |= 1;
    if (strcmp(val, "roundabout") == 0) {
        attributes |= 2;
    }
} else
if (strcmp(key, "motorroad") == 0) {
    if (strcmp(val, "yes") == 0) {
        attributes |= 2;
        maxspeed = 100;
    }
} else
if (strcmp(key, "maxspeed") == 0) {
    if (val[0] == 'n') { /* none, no */
        maxspeed_value = 130;
    } else {
        maxspeed_value = (uint8_t) atoi(val); /* TODO: protect */
    }
    maxspeed_tag = true;
} else
if (strcmp(key, "oneway") == 0) {
    oneway_tag = true;
    if (strcmp(val, "-1") == 0) {
        attributes |= 4;
        oneway_enabled = true;
    } else if (strcmp(val, "yes") == 0) {
        oneway_enabled = true;
    } else if (strcmp(val, "no") == 0) {
        oneway_enabled = false;
    } else {
        oneway_tag = false;
    }
} else

/* Ferries */
if (strcmp(key, "ferry") == 0) {
        attributes |= 1;
        maxspeed = 20;
} else
if (strcmp(key, "route") == 0) {
    if (strcmp(val, "ferry") == 0) {
        attributes |= 1;
        maxspeed = 20;
    }
} else

/* Access restrictions, now modelled for car */
if (strcmp(key, "motor_vehicle") == 0 || strcmp(key, "motorcar") == 0) {
    if (strcmp(val, "no") == 0) {
        ignore = true;
    } else if (strcmp(val, "yes") == 0) {
        attributes |= 2;
    }

} else
if (strcmp(key, "access") == 0) {
    if (strcmp(val, "no") == 0 || strcmp(val, "private") == 0) {
        ignore = true;
    }
}

Een paar dingen die me opvallen:

  1. highway=living_street heeft een officiele snelheidslimiet van “stapvoets”, wat tegenwoordig geinterpreteerd wordt als 15km/h
  2. Fietsstraten kunnen soms zijn getagd als highway=cycleway, motor_vehicle=yes. Juridisch zijn ze volgens mij gelijk aan een normale weg met hele brede fietsstroken die tot de middenlijn reiken. Je mag er in ieder geval gewoon op rijden. In je code zet je ignore=true bij highway=cycleway, maar dat maak je niet ongedaan als je bv. motor_vehicle=yes tegenkomt.
  3. Iets soortgelijks kom je ook tegen met highway=pedestrian waar autoverkeer gewoon is toegestaan, zij het soms slechts tussen bepaalde uren
  4. highway=trunk impliceert een autoweg, waar de standaardsnelheidslimiet 100km/h is. Ook bij motorroad=yes zie ik dat je 130 hanteert.

In je lijstje mis ik de track. Denk dat daar het grootste issue mee is wat betreft bereikbaarheid. Volgens https://wiki.openstreetmap.org/wiki/OSM_tags_for_routing/Access-Restrictions#The_Netherlands zijn die standaard toegankelijk voor auto’s, maar denk dat dat in de praktijk niet vaak zo is, maar niet zo gemapt is.
Even een stukje ingelezen in JOSM via overpass turbo van een stuk Zuid Holland/Zeeland en van de 13.900 wegen is maar 11x een access tag te zien, 5x een motorcar, 8x motor_vehicle, terwijl deze wegen vaak in natuurgebieden liggen.
Moet bekennen dat ik zelf ook zelden access tags voor auto’s erbij zet, en zo te zien ben ik niet de enige… Zal mijn mapping op dit punt proberen te verbeteren.
In hetzelfde gebied 728 barriers om eea tegen te houden, dus dat handjevol wegen met access tags moet vast fors meer worden. We kunnen flink aan de bak met z’n allen.

In je lijstje mis ik ook nog de service wegen.
Residential is denk ik in steeds meer delen van Nederland eerder max 30 dan 50.
Unclassified is ook nog in grote delen van het buitengebied te vinden en is dan vaak 80 of 60.

@The Maarssen Mapper @Sander H ik heb jullie feedback verwerkt. Die cycleway dat toch als motor_vehicle kan dienen is overigens wel een lastige. Ik heb de suggesties zo goed mogelijk proberen te verwerken in de originele post. Overigens de maximum snelheden worden dus gebruikt als het niet is getagd. Maar ik ga dit alleen gebruiken als we geen historische of realtime informatie over het segment hebben.

Ik heb nu een plaatje die gemaakt is met een andere routeplanner. In principe van Amsterdam naar alle postcodes in Nederland.

Eerste conclusie is dat de pondjes niet zijn meegenomen in de planner, dat is vast repareerbaar, maar we gaan toch maar eens kijken wat er zich nu op de overige locaties afspeelt.

Op de fiets zal je zeker, zonder of met omrijden, wat pondjes verliezen. Maar met het juiste pontje zal het wellicht meevallen! :smiley:

Bootjes er nu ook ingehangen.