ThinkGeo.com    |     Documentation    |     Premium Support

Intersections

Hello, 


is there a way to combine two segment together, to remove the intersect, for cases such as bridges and tunnels .....


 


 


 



 Combining an intersection into a bridge/tunnel is more a data issue than a routing issue. The routing works and finds routes based on the data. If an intersection is in fact a bridge or a tunnel then it should have been created as such with 2 lines instead of four. You would need to get back to your data and do some editing to have it in consistence with what it really is.


For doing the editing of your data, you need to delete the 4 features making up the intersection and add the 2 new features resulting from the combination of 2 of the 4 line features as you can see in the attached picture. The red dots represent the end and start nodes of each line feature. After you are finished modifying your data, you need to rebuild the routing index.




Hello, 
  
  
 what does it mean when "index was outside the bounds of the array " appear on the upper left side of the map ???

I am not sure I have ever seen that exception message "on the upper left side of the map". Can you send us a screenshot of what you are seeing? We will have a better idea of what is going on. Thank you.

 Hello,


 


after replacing the four features with the two new features, at the intersection with the green circle around it, and building the index file, i tried the new features with a small code that highlight the clicked feature and show its name as a tool tip.


as you can see the name is has appeared but the highlight didn't, and the following sentence appear in the upper left corner of the map"Index was outside the bounds of the array".


 




I want to make sure that after editing the street layer, you follow those steps: 
  
 -Rebuild the spatial index (the ids and idx files) 
 -Rebuild the routing index (the rtg and rtx files) 
  
 I think that you are not building the spatial index before building the routing index, that is why you have this error. Let us know if this is the case. Thank you.

Hello, 
  
 No I am building them in order, but I found the error in the shape file it self -there is no ID for the new street- I don’t know how does that happened. 
  
 sorry for that, 
 Thank you… 
 Rami.

I did a quick test for a case similar to your case using some sample street data. I actually create a new shapefile from the existing one and I can build the routing index without a problem on the new shapefile. And, I never encounter the error "Index was outside the bounds of the array". Please, look at my code, although, it is a little bit rough, I think it will help you:


 



//Original street layer
            ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"..\\..\\Data\\Routing\\austinstreetssubset.shp");
            shapefileFeatureLayer.Open();

            //The two street feature that we want to merge into one feature
            Feature feature1 = shapefileFeatureLayer.QueryTools.GetFeatureById("47", ReturningColumnsType.AllColumns);
            Feature feature2 = shapefileFeatureLayer.QueryTools.GetFeatureById("50", ReturningColumnsType.AllColumns);

            //Gets the MultiLineShape from merging the two features.
            MultilineShape newMultiLineShape = new MultilineShape();
            MultilineShape multiLineShape1 = (MultilineShape)feature1.GetShape();
            MultilineShape multiLineShape2 = (MultilineShape)feature2.GetShape();

            LineShape newLineShape = new LineShape();
            newLineShape.Vertices.Add(multiLineShape2.Lines[0].Vertices[0]);
            foreach (Vertex vertex in multiLineShape1.Lines[0].Vertices)
            {
                newLineShape.Vertices.Add(vertex);
            }
            newMultiLineShape.Lines.Add(newLineShape);

            //Creates the new street shapefile with no feature
            ShapeFileFeatureLayer.CloneShapeFileStructure(shapefileFeatureLayer.ShapePathFileName,@"..\\..\\Data\\Routing\\newaustinstreetssubset.shp");
            ShapeFileFeatureLayer newShapefileFeatureLayer = new ShapeFileFeatureLayer(@"..\\..\\Data\\Routing\\newaustinstreetssubset.shp",ShapeFileReadWriteMode.ReadWrite);

            //Editing for adding the new features. We do not not add the two features we want to add.
            newShapefileFeatureLayer.Open();
            newShapefileFeatureLayer.EditTools.BeginTransaction();
            Collection<Feature> features = shapefileFeatureLayer.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);
            foreach (Feature feature in features)
            {
                if ((feature.Id != "47" )&&(feature.Id != "50"))
                {
                    newShapefileFeatureLayer.EditTools.Add(feature);
                }
            }
            //Adds the new feature from the merging of the two streets.
            //For real world scenario, we want to also add column attributes. Here they are all empty.
            Feature newFeature = new Feature(newMultiLineShape);
            newShapefileFeatureLayer.EditTools.Add(newFeature);
            newShapefileFeatureLayer.EditTools.CommitTransaction();
            newShapefileFeatureLayer.Close();
            shapefileFeatureLayer.Close();

            //After doing that, you can create the routing index and it should work.


VAL, 
  
 Thank you very much, you have been a great help… 
  
 Rami

You are welcome. Any other questions, let us know.