ThinkGeo.com    |     Documentation    |     Premium Support

Street intersection minimmum speed

Hello 


I got the street intersection code and it draws the intersecting streets within 6 seconds is there any way to reduce this speed to 4 seconds and what is the hardware recommended in order to achieve this goal if possible.


Thanks 



Hello saddam, 
  
 Thanks for your post, the intersection calculate time deponed on the feature complexity and numbers, could you please give more information about this? 
  
 Regards, 
  
 Gary

Gary 
  
 The dbf file we are accessing is Riyadh dbf which i sent to you in earlier posts which has about 274000 records and for example if i want to find the intersection between two streets such as "الملك عبد الله" and "الملك عبد العزيز" in ST_NAME column it takes about 14 sec to draw the intersection could you help me speed it up 
  
 thanks

Saddam,


   I know that Riyad street shapefile and it is not normal it takes 14 sec to draw the interection of two streets. There must be some major ineficiencies in your code. There is a similar sample in the Code Community Street Intersection wiki.thinkgeo.com/wiki/Map_Suite_De...tersection that basically does the same thing as what you are doing. And you can see that it is really fast. I suggest you compare it with your code and see where could the inefficiencies be in your code. Thank you.



Val  
 I saw the sample code but i didnt change the code of the street intersection but what im wondering is the fact that we have 270,000 records in the dbf file while the sample dbf file has only 14000 records changes the time to find the street intersection?  
 Thanks

Saddam,


  In the sample Street Intersection  with the 14,000 record shapefile, it takes a fraction of a second to do the intersection logic. Your Riyadh shapefile is only 19 times bigger and it should not take that much longer. My suspicion is that you did not adapt very well the code from our sample to your app. Can you send us a little sample to see if you adapted it well with your data? Thank you.



Val


I've tested my code on the austin shapfile and in fact it drew the intersection very fast but using my shape file it takes longer here is a txt file with street intersection code that im using. Thanks 

Saddam



search_code.txt (15.6 KB)

Saddam,


 I did a test replacing the shapefile from the sample Street Intersection with your Riyadh shapefile. On my machine, it takes around 5 or 6 seconds. Most of the time is in the functions GetFeaturesByColumnValue. I think that the time it is taking is normal due to the size of your Riyadh shapefile. Below is the code I used for my test:


 



System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
stopWatch.Start();

mapEngine.CurrentExtent = new RectangleShape(46.6722, 24.7306, 46.6758, 24.7280);
mapEngine.BackgroundFillBrush = new GeoSolidBrush(GeoColor.StandardColors.LightGoldenrodYellow);

ShapeFileFeatureLayer streetLayer = new ShapeFileFeatureLayer(@"C:\ThinkGeo\Support\Posts\10161\data\riyadh.shp");
streetLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad2;
streetLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

//Gets the features according to the street name.
streetLayer.Open();
Collection<Feature> features1 = streetLayer.FeatureSource.GetFeaturesByColumnValue("FEAT_ID", "1246053121"); //"Speedway");
Collection<Feature> features2 = streetLayer.FeatureSource.GetFeaturesByColumnValue("FEAT_ID", "1246053120"); //"Martin Luther King Jr");
streetLayer.Close();

//InMemoryFeatureLayer for displaying the street candidates and the intersection point.
InMemoryFeatureLayer intersectionInMemoryFeatureLayer = new InMemoryFeatureLayer();
intersectionInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightPink, 3, true);
intersectionInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Red, 12);
intersectionInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

//Adds the street candidates feature and the intersection point feature to the InMemoryFeatureLayer
intersectionInMemoryFeatureLayer.Open();
intersectionInMemoryFeatureLayer.EditTools.BeginTransaction();

Collection<MultilineShape> multiLineShapes1 = new Collection<MultilineShape>();
Collection<MultilineShape> multiLineShapes2 = new Collection<MultilineShape>();

foreach (Feature feature1 in features1)
{
    MultilineShape multiLineShape = feature1.GetShape() as MultilineShape;
    multiLineShapes1.Add(multiLineShape);
    intersectionInMemoryFeatureLayer.EditTools.Add(new Feature(multiLineShape));
}
foreach (Feature feature2 in features2)
{
    MultilineShape multiLineShape = feature2.GetShape() as MultilineShape;
    multiLineShapes2.Add(multiLineShape);
    intersectionInMemoryFeatureLayer.EditTools.Add(new Feature(multiLineShape));
}

//Gets the intersection point (or points if this is the case)
intersectionInMemoryFeatureLayer.EditTools.Add(new Feature(GetIntersectionPoints(multiLineShapes1, multiLineShapes2, 50, DistanceUnit.Meter, GeographyUnit.DecimalDegree)));
intersectionInMemoryFeatureLayer.EditTools.CommitTransaction();
intersectionInMemoryFeatureLayer.Close();


mapEngine.StaticLayers.Add("StreetLayer", streetLayer);
mapEngine.DynamicLayers.Add("Intersection", intersectionInMemoryFeatureLayer);

DrawImage();

stopWatch.Stop();

long milliSeconds = stopWatch.ElapsedMilliseconds; //Around 5 or 6 seconds.


Val  
 Thank you very much i just wanted to make sure that the size of the data is the reason for it taking time to calculate and by that i made sure that there is no way to make it faster. Thank you  
  
 Saddam

Saddam,


 You are welcome. Good luck in your development.