In deze blog laat ik aan de hand van een vereenvoudigd voorbeeld zien hoe je de Python package OSMnx kan gebruiken om straatnetwerken te analyseren. We kijken of deze package bruikbaar is voor een model waarmee je ‘graafafstanden’ kunt inschatten voor een wijk waar een glasvezelnetwerk aangelegd moet worden.

Wat is OSMnx?

OSMnx is een Python package voor het modelleren, analyseren en visualiseren van straatnetwerken uit OpenStreetMap. Zo kun je eenvoudig verschillende routes bepalen aan de hand van een graaf van het betreffend gebied. Zie onderaan deze blog de referenties met uitgebreide beschrijving en voorbeelden hiervan. Het voordeel van het gebruik van deze package is de flexibiliteit en dat je zonder API-key (en bijbehorende kosten voor bijvoorbeeld de Google Maps API) aan de slag kunt.

De netwerkgraaf ophalen van Ridderkerk

Om de graaf van de benodigde wijk (Slikkerveer) op te halen, gebruik ik de functie graph_from_point met als referentiepunt de coördinaten van een punt in het midden van de wijk. We krijgen dan het gebied dat hierboven met een gestippeld vierkant is aangegeven:

Met OSMnx is het mogelijk om voor een specifieke plaats of gebied een graaf op te halen. Deze is vervolgens met de folium package te visualiseren op een kaartweergave:

Voor het voorbeeld heb ik een selectie van enkele willekeurige adressen en drie verdeelpunten (de grijze kastjes die je langs de stoep vaak tegenkomt) gemaakt in de wijk Slikkerveer.

Eerst bepaal ik voor ieder adres welk verdeelpunt het dichtst bij ligt op basis van de afstand hemelsbreed. Deze afstanden zie je als blauwe lijntjes in de volgende kaart terug, waarbij de blauwe punten de adressen zijn en de rode punten de verdeelpunten:

Voor ieder adres en verdeelpunt bepaal ik vervolgens het dichtstbijzijnde knooppunt (node) in de graaf. Tussen deze twee nodes bereken ik de wandelroute als benadering van de afstand die je open zou moeten graven als je de oude Coax-kabels zou willen vervangen door glasvezel. Hierbij doe ik de aanname dat de huidige kabels voor het grootste deel onder de stoep zullen liggen, wat de wandelroutes geschikt maakt in dit model.

De uitkomst:

Als je bij het berekenen van de totale afstand (de groene routes in onderstaande afbeelding), dan heb je een benadering van de graafafstanden te pakken. Hierbij heb ik al gecorrigeerd voor de afstand die soms tussen de adressen ligt en de dichtstbijzijnde node (vaak ligt die op de hoek van de betreffende straat). Bij de afstanden tel ik de afstand van adres tot de eerste node bij de routeafstand op.

Daarnaast corrigeer ik voor alle routesegmenten die in meerdere routes van adres naar verdeelpunt voorkomen.

Conclusie

Een eerste model laat zien dat je vrij snel een gebied kunt doorrekenen.

Om de nauwkeurigheid te verbeteren, is het nodig om verfijningen aan te brengen:

  • Afstanden van de voordeuren tot de straat zijn in dit voorbeeld buiten beschouwing gelaten.
  • Om inzicht te krijgen in edge cases is het handig om meerdere wijken door te rekenen.

Meer weten?