ThinkGeo.com    |     Documentation    |     Premium Support

Address look up from shapefiles - performance issues

Hi support team,


I need to implement an lookupaddess function, and currently experience performance issues.  I very much appreciate your help!


 


For a counrtry's map data, I have a shape file for provinces, a shape file for cities and another shape file for all the streets.


Right now, to find a specific address upto the street level, I do the following:


1)open the province shape file and get the bounding box the province


2)open the city shape file and get the bounding area of the city within the bounding box of the province


3)open the street shape file and get the the features of the street within the bouding area of teh city. 


The issue is .. it's really slow when it gets to query the street shape file because it contains millions of records.  Do you have any suggestion for me to speed up the performance?   Combine all the shape files into one indexed file (my street shape file doesn't have the city or province coloumn)? Split the streets shape files by cities?..  How do I combine the files or split the files? or you have a better solution?


Thanks a lot!


 


Roson


 


 



Hi Roson,


I want to clarify one thing from you. Have you tried to get all the streets within the bounding box of the specific city from the street shape file, and then added them to an InMemoryFeatureLayer, at last execute a query from the InMemoryFeatureLayer? This costs much memory if the size of the shape file is very big. And I think splitting the streets shape file by cities could be a good idea. To split a shape file, you can use the following code:

ShapeFileFeatureLayer streetShapeFile = new ShapeFileFeatureLayer(sourceShapePathFilename);
Collection<Feature> features = streetShapeFile.QueryTools.GetFeaturesInsideBoundingBox(cityBoundingbox, ReturningColumnsType.AllColumns);

ShapeFileFeatureLayer.CloneShapeFileStructure(sourceShapePathFilename, targetShapePathFilename);
ShapeFileFeatureLayer newLayer = new ShapeFileFeatureLayer(targetShapePathFilename);
newLayer.Open();
newLayer.EditTools.BeginTransaction();
foreach (Feature feature in features)
{
    newLayer.EditTools.Add(feature);
}
TransactionResult result = newLayer.EditTools.CommitTransaction();
// Check the result to see if edit success.

Any more questions please let me know.
Thanks.
Sun 

Hi Sun, 
  
 That worked pretty nicely! 
 I did used inMemoryFeatureLaye. not any more. 
 Thanks a lot!  
  
 Roson

Hi Sun, 
  
 That worked pretty nicely! 
 I did used inMemoryFeatureLayer. not any more. 
 Thanks a lot!  
  
 Roson

You are welcome, Roson.


Any more questions please let me know.
Thanks,
Sun