ThinkGeo.com    |     Documentation    |     Premium Support

CustomOverlays Render in Wrong Order

I have a Layer composed of highway lines which is not showing up above my other layers.  Instead it shows up just above my Base Overlay and is covered by all of my other Overlays.


Map.CustomOverlays.Add( BaseOverlay ); //Contains: 1 ShapeFileFeatureLayer - MultiPolygons

Map.CustomOverlays.Add( ZoneOverlay ); //Contains: 3 ShapeFileFeatureLayer - MultiPolygons

Map.CustomOverlays.Add( ZipOverlay ); //Contains: 1 ShapeFileFeatureLayer - MultiPolygons

Map.CustomOverlays.Add( CountyOverlay ); //Contains: 1 ShapeFileFeatureLayer - MultiPolygons

Map.CustomOverlays.Add( StateOverlay ); //Contains: 2 ShapeFileFeatureLayer - MultiPolygons

Map.CustomOverlays.Add( RoadOverlay ); //Contains: 4 ShapeFileFeatureLayer - Points + Lines

Map.CustomOverlays.Add( PlaceOverlay ); //Contains: 2 ShapeFileFeatureLayer - Points

Map.CustomOverlays.Add( BranchOverlay ); //Contains: 1 InMemoryFeatureLayer - Points Only

Map.CustomOverlays.Add( LabelOverlay );  //Contains: 1 InMemoryFeatureLayer - Text Labels on Points Only


Details on the 4 RoadOverlay Layers:

- 1 ShapeFile with the Highway Lines - Uses LineStyle to render

- 1 ShapeFile with Points for Highway Labels - Uses IconStyle to render the US Highway Shield

- 1 ShapeFile with the Interstate Lines - Uses LineStyle to render

- 1 ShapeFile with Points for Interstate Labels - Uses IconStyle to render the Interstate Shield.


The reason there is a ShapeFile with Points for the Labels is because we wanted the labels at exact locations.


Any idea why, even though I load the CustomOverlays in this order, the renderer is ignoring me?



FYI: The offending overlay is RoadOverlay.  In case it wasn’t clear.

I looked at the JSON that gets generated at the bottom of the page and they are in the right order.  Also, when I set a breakpoint on the server-side and debug, I see they are in the correct order.  Looks like something that happens on the client-side.  Gonna take a look at the OpenLayers API… Is this a known bug?



var OnMapCreated = function( map )
{
OpenLayersMap = map;

<%
for ( int i = 0; i < Map.CustomOverlays.Count; ++i )
{
Response.Write( String.Format( @"OpenLayersMap.setLayerIndex( OpenLayersMap.getLayer( ""{0}"" ), {1} ); ", Map.CustomOverlays[i].Name, i ) + Environment.NewLine );
}
%>
}



Solved.  Hope it helps someone else struggling out there…

Hi, Abner 
  
 Glad to see that you have solved this problem. This is not a known bug. I guess that problem is that you use LayerOverlay to load layers, and the LayerOverlay is base overlay by default and map just load one base overlay one time.  Please set the LayerSwitcher map tool to see what happened. 
  
 Thanks, 
 Khalil