We have several high quality road networks available from several sources (Open Street Map, TomTom ...). These sources contain more information than we need, effectively blocking our calculations. Filtering out minor roads is easy. Our main problems are the representation of highways (two roads in opposite directions), complex crossings on the highway (various exit routes, crossings are not points). For our purposes, a more “topological” road network would be ideal.
Very detailed data source:

Ideal simplified network:

Are there any algorithms that will help us extract a simplified road network? If .NET even has an implementation, it will be a real winner.
UPDATE:
The source data is presented as polylines with some limited metadata attached. The metadata indicates the identification of the road (name or number), the "rank" of the road (highway, primary, secondary, etc.), as well as some details, such as speed limits, whether it is a section of the line — a bridge or tunnel. The data quality is very good, we can easily combine the segments of the polyline, which together form a road based on the identification of the road. Similarly, it is very easy to ignore secondary roads. Accelerated / decelerated lanes on the highway exit are also clearly marked in their rank, so they are also easily filtered.
We see two main problems:
1) Highways: replace two (or more) roads with one road
2) Crossings on the highway: determine the central point of junctions and make sure that our simplified roads are connected with this.
UPDATE 2: Data is stored in EZRI Shape files . Using the SharpMap library , they are relatively easy to parse or perform geospatial searches. The source data is segmented by country, one country - one form file (if the country is too large, like the USA, Germany), it is further divided into smaller regions. And yes, this separation causes an additional problem. How to make sure that simplified roads on the border of France and Germany meet each other?
Thanx for attention