routing
routing copied to clipboard
Implement a better isochrones algorithm.
Implement a better isochrones algorithm, a more detailed description can be found here.
If you are a new contributor this is perfect, get in touch by responding below. Your code will end up in our next release after finishing. What we think you can learn:
- More about geo-algorithms.
- More about routing/itinero.
- Maybe some C#.
- How to contribute to open-source projects.
What you need:
- A computer with Linux, Windows or MacOS.
We'll help you get started and we can offer personal guidance.
Hi @xivk, I'd be interested in having a go at this, it would be great if you could throw me a few pointers on where to start.
Hi @LukeStanislaus , that's awesome!
I suggest you start with getting it to work and write the result(s) as geojson. A few examples of the current output:
http://geojson.io/#id=gist:anonymous/881edef7c53e6f845d5e8f27640f5467&map=10/51.2460/4.7502
Issues in the current implementation:
http://geojson.io/#id=gist:anonymous/92efaf559971eb8fa180890e4ebdfb4e&map=14/49.8647/5.9885
- [ ] Roads that should be included are not.
- [ ] Also the isochrones you see in this output are tile-based. I would be better to implement CONREC, more info is in the description of the feature.
A few pointers:
- Try to implement this without refactoring things, I know the code look like old C# sometimes, refactoring that is for later. Your new code can use all of the C# 7.2 goodies.
- Don't worry too much about performance, first get things to work as expected, then we optimize for performance.
- If you need to make breaking changes to the current implementation it's ok to build an brand new set of classes/code to implement this, deprecating but not breaking the current implementation.
- Try to implement this out in the open, meaning push to github once something works/doesn't work. I can give you nice quick feedback. Best make a clone of this repo.
Getting started:
The code is in the namespace Itinero.Algorithms.Networks.Analytics.Isochrones. You can start by using the extension methods and run through the code to see what happens. Writing this to geojson can be done using this extension method. This will help you get a feel for the code. Also you need to load a router/routerdb, you can find how to do that in the docs, you best load a small test-area.
Don't worry, this looks like a lot, but the idea is collaborate on this so there are no silly questions and just ask if you need more info!
Hi @xivk,
I've had a look through ToGeoJSON, and I'm not sure how to turn an entire RouterDB into a polygon list in order to run it through the methods.
I've tried turning the RouterDB into a route and then through the ToGeoJSON method using this code.
But the result, as you can see here, is as expected - simply a route. I see the TilesToPolygon class, so maybe there is a way to turn the RouterDB to a list of tiles, then to a list of polygons, then through the ToGeoJSON method, in order to output an area like you have in your examples?
Thanks for the great help,
Luke
Hi @xivk ,
I'm a fairly recent CS grad and happened to stumble upon your project while looking for some free software to map isochrones.
I have experience working within larger codebases but no open source contributions yet. I have been actively looking for a good starting place to get into open source and this seems perfect as I also enjoy working with maps.
I see this is a fairly old issue however and that Luke already expressed interest in this, so are you still looking for someone to implement this?
Hi @ohlordyitsordy, I found this issue while searching for open source isochrone implementations. If you're interested in another OpenStreetMap-based project, I'm exploring the idea of 15-minute neighborhoods in this issue. A simple prototype is in place, but it needs lots of work. A small group will be working on it through an online civic tech hackathon this Saturday.
Hey, @ohlordyitsordy sorry for the late reply, yes we could some help with this if you are still interested.
We are however also working on a new version of Itinero apart from this repository (will be public soon), it could also be an option to do the work in the new codebase.