I’ve tried it using the generated index files and it’s still slow.
Strangely it is not much faster with a much smaller set of files which I have filtered to a particular geographic area.
The layers I have got on the map are: 00, 01, …, 07, 08 (roads), wa (water areas), and rr (railways), the largest file of which is 47MB, this is the 06 file (local roads). A zoom in, zoom out, or pan operation will cause an approx. 3 to 4 second wait for the map to refresh. Should it be this slow or do you suspect something is amiss?
This is hte code which I am using:
public partial class Window1 : Window
{
private const string path = @“c:\teleatlasdata”;
private readonly List<string> files;
public Window1()
{
InitializeComponent();
files = new List<string>(Directory.GetFiles(path, “*.shp”));
Loaded += delegate
{
AddRoadLayer(“08”, “LocalRoad4”);
AddRoadLayer(“07”, “LocalRoad4”);
AddRoadLayer(“06”, “LocalRoad3”);
AddRoadLayer(“05”, “LocalRoad3”);
AddRoadLayer(“04”, “MajorRoad3”);
AddRoadLayer(“03”, “MajorRoad1”);
AddRoadLayer(“02”, “SecondaryRoad1”);
AddRoadLayer(“01”, “SecondaryRoad1”);
AddRoadLayer(“00”, “Highway5”);
AddWaterLayer(“wa”);
AddRailwayLayer(“rr”);
map.CurrentExtent = new RectangleShape(new PointShape(-1.268, 53.140), new PointShape(-1.220, 53.118));
map.Refresh();
};
}
private void AddRoadLayer(string suffix, string lineStyle)
{
Debug.WriteLine("Adding " + suffix);
foreach (var filename in from f in files where f.EndsWith(suffix + “.shp”) select f)
{
var lineStylesMethod = typeof (LineStyles).GetProperty(lineStyle, BindingFlags.Static | BindingFlags.Public);
var shapeLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = (LineStyle) lineStylesMethod.GetValue(null, new object[0]);
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(shapeLayer);
var textStylesMethod = typeof (TextStyles).GetMethod(lineStyle, BindingFlags.Static | BindingFlags.Public);
var labelNameLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
labelNameLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = (TextStyle) textStylesMethod.Invoke(null, new[] {“NAME”});
labelNameLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(labelNameLayer);
}
}
private void AddWaterLayer(string suffix)
{
foreach (var filename in from f in files where f.EndsWith(suffix + “.shp”) select f)
{
var shapeLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.River1;
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Water1;
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(shapeLayer);
var labelLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
labelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Water1(“NAME”);
labelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(labelLayer);
}
}
private void AddRailwayLayer(string suffix)
{
foreach (var filename in from f in files where f.EndsWith(suffix + “.shp”) select f)
{
var shapeLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
shapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Railway1;
shapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(shapeLayer);
var labelLayer = new ShapeFileFeatureLayer(filename, ShapeFileReadWriteMode.ReadOnly);
labelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Railway1(“NAME”);
labelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
map.StaticOverlay.Layers.Add(labelLayer);
}
}
}