ThinkGeo.com    |     Documentation    |     Premium Support

RtreeSpatialIndex

Hello,


Please give me a sample to show how to use this API. it is wrong as follows code:


string shpFile = @"D:\Road_AL.shp";


RtreeSpatialIndex.CreateRectangleSpatialIndex(shpFile ,RtreeSpatialIndexPageSize.SixteenKilobytes,RtreeSpatialIndexDataFormat.Double);Sorry,


I just want to know how to use it and see if it is useful for my app.


What is difference between CreatePointSatialIndex and CreateRectangleSpatialIndex?


I hope you can add new samples to show how to use new APIs.


it is inconvenience.



Carol, 
  
 We started to expose the DBF (GeoDbf) module and RTree(RTreeSpatialIndex) module only from last public release(4.0.0.0). So maybe some documentation are still missing, sorry for the inconvenience. 
  
 The static APIs CreateRectangleSpatialIndex and CreatePointSpatialIndex are used to create an empty RTree file, the second parameter is to specifies the bytes stored for each page, and the third is the value type stored in the file. 
  
 Normally, if you do not want to operate the RTree file separately, you do not need to use this module separately, you only need to know and understand the APIs in the ShapeFileFeatureSource and ShapeFileFeatureLayer which will handle all the files together. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Thanks for your reply, Yale 
 You update API, but no update samples. 
 I want to find whcih new APIs is useful that I can use in my app. 
  
 I’d like to know if I change RtreeSpatialIndexPageSize/RtreeSpatialIndexDataFormat.  
 Does it affect Map performance? 
  
  


Carol,  
  
 The RTreeSpatialIndexPageSize will affect the map performance , while this kind of effects can be ignored. The DataFormat will affect the precision of data stored in the RTree. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Thanks for your reply, Yale 
 How long you can release RtreeSpatialIndex and UpdateColumnName? 
  
 And, I’d like to know the progress of Ticket 2788. 


Carol, 
  
 It seems our support is out of office yesterday, the ticket 2788 is still on moderate state. 
  
 I think you can get the latest version to see both of the issues should be fixed. 
  
 Thanks. 
  
 Yale 


Yale, 
 Could you give me a sample to show how to use CreateRectangleSpatialIndex API? 
 I still can’t work in version 4.0.23.0. 


Carol, 
  
 Thanks for your post and questions. 
  
 Try following code snippet, after it was run, two files(a.idx, a.ids) will be recreated in the folder C:\temp, while it is empty index files up to now. 
  
 string fileName = @"C:\temp\a.idx"; 
 RtreeSpatialIndex.CreateRectangleSpatialIndex(fileName); 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Thanks for your reply, Yale 
 It works well. 
 And, you said,"The RTreeSpatialIndexPageSize will affect the map performance , while this kind of effects can be ignored." 
  
 could you explain why this kind of effects can be ignored?.. 
  
 Thanks a lot! 


Carol, 
  
 Thanks for your inputs. 
  
 I am not sure I can make it clear, hope my following answer can give you some help.  
  
 This parameter specifies the content for each page, which is the OS, will read how many kilobytes were stored in each page when stored on disk. If this value is set to too small, more pages need to be read, while other wise, if it is set to too large, each page will cover too much content. We provided four options: 4Kb, 16KB, 32KB, 8KB, our default value is 8 KB. I think these values will have minor effects on current machines which have enough RAM and fast enough CPU. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Thanks for your reply, Yale 
 if I want to operate the RTree file separately, how do I do? 
 could you give me a sample? 


Carol,


See following code snippet to get the count contained in the RTree file:


string rTreeFileName = @"C:\Program Files\ThinkGeo\Map Suite Desktop Evaluation Edition 3.0\Samples\SampleData\Data\Countries02.idx";
 
RtreeSpatialIndex rTreeIndex = new RtreeSpatialIndex(rTreeFileName, RtreeSpatialIndexReadWriteMode.ReadOnly);
 
rTreeIndex.Open();
 
try
{
      int count = rTreeIndex.GetFeatureCount();
}
finally
{
      rTreeIndex.Close();
}

 
Any more questions just feel free to let me know.
 
Thanks.
                 
Yale

Why can’t I do as follows code: 
  ShapeFileFeatureLayer Road = new ShapeFileFeatureLayer(@“D:\indexRoad.shp”); 
  RtreeSpatialIndex.CreateRectangleSpatialIndex(@“D:\indexRoad.idx”, RtreeSpatialIndexPageSize.FourKilobytes, RtreeSpatialIndexDataFormat.Double); 
  RtreeSpatialIndex testIndex = new RtreeSpatialIndex(@“D:\indexRoad.idx”, RtreeSpatialIndexReadWriteMode.ReadWrite); 
  Road.Open(); 
  Feature feature = Road.QueryTools.GetFeatureById(“3”, ReturningColumnsType.AllColumns); 
  testIndex.Add(feature); //Error Message: Error on delete point. 
   Road.Close();

Carol,


Thanks for your post and code.
 
Try following code to insert only one feature to the index file. One thing I want to point out is that after this, the record number in the shape does not match with the record in the RTree index file.

 

string shapeFile = @"D:\indexRoad.shp";
string rTreeFileName = @"D:\indexRoad.idx";
            RtreeSpatialIndex.CreateRectangleSpatialIndex(rTreeFileName, RtreeSpatialIndexPageSize.FourKilobytes, RtreeSpatialIndexDataFormat.Double);
ShapeFileFeatureLayer Road = new ShapeFileFeatureLayer(shapeFile);
Road.Open();
Feature feature = Road.QueryTools.GetFeatureById("3", ReturningColumnsType.AllColumns);
Road.Close();
 
RtreeSpatialIndex testIndex = new RtreeSpatialIndex(rTreeFileName, RtreeSpatialIndexReadWriteMode.ReadWrite);
testIndex.Open();
testIndex.Add(feature);
testIndex.Close();


Any more questions just feel free to let me know.
 
Thanks.
 
Yale