ThinkGeo.com    |     Documentation    |     Premium Support

How can I ignore certain types when building the .rtg file?

Hello,


I am creating a .rtg and .rtx file in order to use the routing and in my attempts to create a distance matrix.


There are couple types of roads that I would like to omit from routing (bridleways, foothpaths, construction and so on). I have their weight set to a very high number (and I am getting that number back from the .rtg file). I fear that that is slowing the calculations down and the results have routes in them that contain the penalty.


Is there a simple way to extract the unwanted roads from the .shp file ? I have imported the shape file into sql server, but I don't know how to get it back into a shapefiles.


Tomas



 


Tomas,
The routing extension allow us to filter the features based some factors during building the .rtg file, please have a look at the installation sample “Samples/BuildingRoutingData.cs”.
You also can create an entire new shapefile which bases on the old one and omit some unexpected features. Please try the attached sample, which export the feature in SQL Server into shapeFile. You can add some custom code between the “Todo” comment to filter some features during the processing.
Thanks,
Johnny

ExportShapeFileFromSQLByFilter.zip (12.2 KB)

Johny, 
  
 thanks for the second part. I was using the sample you mentioned as my starting point of exploring what I can do. 
 I tried sending the RtgRoutingSource an indexed ShapeFileFeatureSource, but it went and created the graph for all links including the ones out of the index. While displaying the same feature source displayed only thing on the index. 
 Is this by desing ? 
  
 I suspect the only way is to have the file filtered as you suggested. 
  


Johny, 
  
 Thank you for the export example it helped a lot. One thing that is dubious is that the .dbf file created is 4GB in comparison with the original 23.4 MB file. That seems rather odd to me. Would you have any idea what could cause it and how to remedy it ? 
  
 One more minor question  - how can one estimate the total number of links that will be processed in the RtgRoutingSource ? 


 


Tomas,
The big DBF file is caused by unknown length of certain dbf column. For instance, “NVarchar” is a kind of SQLServer type, it’s hard to know how long the column is, and so I take the maxlength. I have updated the code, please replace the GetDbfType method with the following:
        private DbfColumn GetDbfType(FeatureSourceColumn featureSourceColumn)
        {
            int decimalLength = featureSourceColumn.MaxLength < 6 ? featureSourceColumn.MaxLength : 6;
 
            DbfColumn col;
            switch (featureSourceColumn.TypeName.ToLower())
            {
                case "bigint":
                case "int":
                    col = new DbfColumn(featureSourceColumn.ColumnName, DbfColumnType.Integer, featureSourceColumn.MaxLength, 0);
                    break;
                case "float":
                case "double":
                    col = new DbfColumn(featureSourceColumn.ColumnName, DbfColumnType.Double, featureSourceColumn.MaxLength, decimalLength);
                    break;
                case "date":
                    col = new DbfColumn(featureSourceColumn.ColumnName, DbfColumnType.Date, featureSourceColumn.MaxLength, decimalLength);
                    break;
                case "memo":
                    col = new DbfColumn(featureSourceColumn.ColumnName, DbfColumnType.Memo, featureSourceColumn.MaxLength, decimalLength);
                    break;
                default:
                    col = new DbfColumn(featureSourceColumn.ColumnName, DbfColumnType.String, 50, 0);
                    break;
            }
            return col;
        }
The number of links processed by RtgRoutingSource can be calculated by:
                Number of links = ((Bytes of .rtx file) – 16) / 49
 
Thanks,
Johnny