ThinkGeo.com    |     Documentation    |     Premium Support

Symbol "Multilevel road junction"

Hello, ThinkGeo Team!



I've got an interesting question. Searched among your demo, the answer is not found. As the map, you can display a multi-level road junction? For example, I have two objects that represent the road. Assume that they intersect. In one case, I may be crossing in the other - the road can be on top of each other and constitute a two-tier road interchange. I would like to find out how you can locate on the map is second situation? From the crossroads of all understandable.


Even in the simplest case. For example in cross1.png shows a conventional intersection. A in cross2.png one way over another. Due to what you can achieve similar (or even better!) display multi-level road junctions? Due to the additional attributes or coordinates, or else in some way. If you have an example, I will be grateful. Thanks in advance.





 



cross1.png (1.79 KB)
cross2.png (1.91 KB)

I would also like to know the best way to show the Z order of streets…  That is one really nice thing that OSM is able to do (and provides in their data)  Thanks, 
  
 .Ryan.

Alex,


  You can use a custom LineStyle to have the effect of overpass and underpass as you can see in the screenshot. You can also see the code for that custom LineStyle. Usually this situation is resolved by how the data itself is organized not having to worry about that effect at the style level. Usually, you have the local roads data in a layer by itself and highways in another layer drawn on top. So when a highway goes over a local road, with the layer order you see the display of multilevel road junction.



 


 



public class LineTestStyle : ThinkGeo.MapSuite.Core.Style
{
    protected override void DrawCore(IEnumerable<Feature> features, GeoCanvas canvas, Collection<SimpleCandidate> labelsInThisLayer, Collection<SimpleCandidate> labelsInAllLayers)
    {
        GeoPen outerPen = new GeoPen(GeoColor.StandardColors.Black,6);
        GeoPen innerPen = new GeoPen(GeoColor.StandardColors.LightGray,4);

        foreach (  Feature feature in features)
    {
            canvas.DrawLine(feature, outerPen, DrawingLevel.LevelOne);
            canvas.DrawLine(feature, innerPen, DrawingLevel.LevelOne);
        }
           
    }
}


Thanks!! It’s great!

Alex,


 I am glad you are satisfied with the solution. Let us know if you have other questions. Thank you.