ThinkGeo.com    |     Documentation    |     Premium Support

Very long running time

Hello all,


I just came accross an interesting issue and i appologise in advance if it has been answered before. So I am trying to execute the following:


Dim allFeatures As Collection(Of Feature) = aLayer.QueryTools.GetFeaturesIntersecting(aLineShape, ReturningColumnsType.AllColumns)


the "aLayer" is of type FeatureLayer and the "aLineShape" is of type LineShape. This code has been executing for the past 7 hours with not return yet. My layer (aLayer) is quite big as it has about 57000 Lines/Polylines.


I am thinking that this might well be an indexing problem. Any help/advice will be much appreciated.


Kind Regards


Yiannis


 



Ioannis, 
  
 Which FeatureLayer you use? If it’s a ShapeFileFeatureLayer, do you build index for it? Or it is not provided by MapSuite that you create by yourself, let me know how you implement this custom FeatureLayer, maybe you can override the GetFeaturesInsideBoundingBoxCore to make it better performance.  
  
 Spatial Query is very complex, take a long time is normal. If you have better algorithm to calculate two LineShapes intersect, you can create a custom line shape inherit from LineBaseShape and override IntersectsCore, if you test the new logic is speed up, please let us know, we can integrate your code to MapSuite. 
  
 Thanks 
 James

Hello, 
  
 I noticed that the safest option when working with ShapeFile layer is to always recreate the index when opening the file as it seems that if you crash during a previous run, the index is unusable. As for other layers like an Inmemory one, I have to do some more experiments to see if I can speed it up at all. Do you have to suggest any "indexing" technique for the Inmemorylayers? Otherwise I will probably prefer to caclulate my interections as part of my database stored procedures. If this turn to be slow as well, then I will override and keep you posted with new code. 
  
 Thanks again 
 Yiannis

Ioannis, 
  
 I will try to catch the exception and remove the unusable index file from disk when I use shapeFile layer. 
  
 When you use InMemoryLayer, you can call BuildIndex method to increase the access speed. Advanced, you can implement your own index by inherit from SpatialIndex class, our RtreeSpatialIndex is a good sample to show you how it works. 
  
 I will think another way to make your application better performance. 
  
 James