ThinkGeo.com    |     Documentation    |     Premium Support

Changing layers

Hi All,


I'm looking for some info about how to properly remove and re-add non-cached files.  To set up the situation, I have access to weather shapefiles that are generated every five minutes, and wish to display these files on top of a cached 'world' overlay.  Largely, this has been successful.  I am doing this by adding several different layers of weather into one LayerOverlay, and adding this LayerOverlay to my map as a CustomOverlay.  On the same page as the map, I have a timer that ticks every five minutes that is supposed to refresh the weather, but leave the underlying 'world' overlay.  To do this, I am refrencing the weather overlay, removing it from the map, and readding it using the same method above, just with a the new shapefile. As I said before, this works wonderfully for quite sometime.  However, after a while of letting this refresh cycle happen (sometimes hours), I start getting pink tiles all over the map, making it completley inoperable.  What causes this? Is there a better way to go about doing this? Thanks for your help!


-Dustin



Dustin, 
  
   Just to throw my two cents in here.  One thing you could do maybe soemthing like below. 
  
 1. On timer tick go to the existing layer and make sure the layer.featuresource is closed 
 2. Cast that feature source to a shapefile featuresource 
 3. change the shapefile name & path to the new shapefile 
  
 This should point the feature source to the new shapefile.  What I wonder though is why the tiles come up pink.   
  
 Are you getting any errors at all?   
  
 Is it that maybe the shapefile isn’t being generated correctly after awhile?   
  
 Do you have any ideas or hunches what might be happening beyond what you have written?   
  
 Could it be that the map is refreshing at the same time the 5 minute internal fires and there is contention on the shapefile?  
  
  Does this happen even if you just let it set and refresh without any user interaction?  Are you building the idx and ids files for the new weather shapefiles? 
  
 Sorry more questions than answers… 
  
 David

Hi David, 
 Thanks for your quick response.  I’m not sure I’m following you on the feature source parts.  When I’m creating the layers, I simply create a ShapeFileFeatureLayer with a file url as the parameter, and then add that layer to the overlay later on.  
  
 As of now, I have not gotten an error, Javascript or otherwise.  I’m pretty certain the shapefiles are being correctly generated, because a simple page refresh fixes all the problems. I just don’t want to have to do this, because it’s meant to be a permanent display. My first idea was that it may be some sort of memory leak in the javascript, but since I’m terribly unfamiliar with OpenLayers, and even more unfamiliar with how Map Suite interacts with it, I have no idea how to even begin debugging this. I have seen contention between the files occasionally, but since I am only refreshing the weather portion, I simply get ‘file x is in use by another process’ overlayed over my existing world overlay, so I doubt that that’s what’s causing this, I just haven’t gotten around to checking for file locks yet.   This problem occurs when there is no user interaction.  I’ve never actually seen it happen when someone is working with the product, only when it’s idling and refreshing with the timer, but that’s not to say it can’t.   
  
 If you’d like, I can set you up a user account to the site so you can see what’s going on yourself, but I warn you it may take as long as a couple of hours to finally break.  Thanks for your help. 
 -Dustin

Dustin, 
  
   I would love to see it in action.  Send the username etc to support@thinkgeo.com and have them forward it to David. 
  
 You use a file url?  What does that look like, can you show the line of code for that.  You can just rename any secret stuff in the code to make it postable.  I really want to see the line of code that sets up the shape file layer and if you use a url what that basically looks like. 
  
 David 


David, 
 I hope this isn’t too convoluted, but here we go… 
  
 First, I’m storing all the Layer information (URL, Style info, etc) in a SQL database, so I’m pulling all of that for a given Layer into a DataRow… but the actual creation of the layer goes something like this… 
  
             ShapeFileFeatureLayer sffl= new ShapeFileFeatureLayer(Layer[“LayerURL”].ToString());             
             ShapeFileFeatureLayer.BuildIndexFile(Layer[“LayerURL”].ToString()); 
             sffl.Name = Layer[“LayerID”].ToString(); 
             sffl.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level10; 
             sffl.DrawingQuality = DrawingQuality.HighSpeed; 
  
 I then go on to set styles, and so forth.  
  
 Also, I’ve sent the email regarding the username/access. 
  
 -Dustin

Dustin, 
  
   I have the site and I have to say it looks really nice!  I am wondering is the LayerURL to the shape file is a real url like ‘weatherstuff.com/weathernow.shp’ or something like that?  If so I didn’t even know that could work.  Are you sure it is not a path somewhere on the local disk?  Also what is your website session timeout set to?  Is it possible the session is timing out or something? 
  
 David

David, 
 Yeah, it is a url to something on local, I didn’t mean to give you the impression that it was held offsite. I suppose I need to work on my terminology. The authentication session is set to 365 days (the max ASP.NET will allow) while the session state timeout in IIS is 20 minutes.  The thing is, the error generally happens long after the session state expires.   
 -Dustin

As an update, I ran it all day yesterday in Firefox and it seemed to run flawlessly.  Also, I ran it in IE without with weather, and it still bugged, so it apparently isn’t the weather.   I’m starting to speculate that it’s something not sitting right with the IE javascript engine…

Dustin, 
  
   That is strange but doesn’t surprise me.  Let me know any other clues you find.  I would try and strip it down to a very simple sample and try and re-create it.   Also does the IE compatibility stuff have anything to do with it?   
  
 David