ThinkGeo.com    |     Documentation    |     Premium Support

Web Service Access Methods and Questions

Hello,


  We are building an asp.net web application that loads the World Map Data Kit, a layer for points (to limit extent), and a dynamic layer for markers with hover popups and right click popups.  Each user may see a different view based on some data value associated with their logon.   All dynamic data will be loaded from a db query run at startup.  The points will have different colored markers (to indicate a boolean state) depending on an array of values retrieved from an XML Web Service.  I am assuming that the web app will have to poll for this data through the use of a timer.  The dynamic map layer will only be redrawn if the data from the web service has changed from the current data in the web application.   My questions are: what is the best way to accomplish the polling from the client side?  Will the code have to delete the dynamic layer with the markers and popups and completely redraw the layer on refresh, or can it just change one value and leave the others in their current state.  Will the code have to redraw the hover popup and the right click popup on every map redraw?


Thanks,


  Steven



Steven, 
  
 I guess you need to set a timer on the client which is listener to see whether the data is changed first; if it changed just refresh automantically. When you call removing and re-adding the popups and markers through the code, it doesn’t actually draw them immediately; so I recommend removing all of them and re-add again. Because it won’t cost much performance but the code looks nicer. 
  
 If you choose Postback, all the popups and context menu will redraw. But if you implement on the client side, it won’t. Hope it makes sense. 
  
 Let me know if you have more queries. 
  
 Thanks, 
 Howard

Howard,


  Thanks for your reply.  I found some code in the Discussion forum that demonstrates how to modify the map using a timer (server side) or javascript and a timer (client side).  The code I am interested in is the client side method.  Please explain to me the functions in the javascript in DefaultByJavaScript.aspx.  Where are these functions defined?  What are they doing?  How does this javascript work with the timer in DefaultByJavaScript.aspx.  I know how to use a timer but I am unclear on the purpose of the javascript.  Feel free to ask questions if I am not clear.


Steven



1196-Post4905ForTony.zip (95.3 KB)

Steven, 
  
 Actually, it’s a little complicate, but I’ll be my best to explain. 
  
 First of all, the JavaScript method using in the DefaultByJavaScript.aspx is not public, so you cannot find it in the JavaScript documentation. Actually, it requests the markers from server asynchronizely, after receiving the result from the server, it removes all the markers on the client and re-add again. 
  
 I think you have notice a timer control but it’s contained by an update panel. What I want to do is update the markers position on the server and raise a asynchronize function on the client side. 
  
 The markers are stored in the session; in the server side, we can change the properties of them and affect to the client. 
  
 On the other hand, if you familiar with JavaScript, you can write you own function as I mentioned above. 
  
 Hope it makes sense; let me know if you have any queries. 
  
 Thanks, 
 Howard

Howard, 
   In this project we need to change the markers image to indicate state, for example, from red to green and vice versa.  I am using the Map1.MarkerOverlay construct to display the markers at page_load.  The state data will be coming from the backend thru the previously mentioned web service and this data will change ‘on the fly’ so I need to dynamically update the markers.  Should I be using an InMemoryMarkerOverlay instead?  Or perhaps an InMemoryFeatureLayer?  If so, how would I load the WMK in CustomOverlays? 
  
 Regards, 
   Steven

Steven, 
  
 Actually, the Map.MarkerOverlay is a shortcut of InMemoryMarkerOverlay. You can create an InMemoryMarkerOverlay and add into the Map.CustomOverlays collection as well. One thing I want to point out is that if you use CustomOverlays, the StaticOverlay, DynamicOverlay, BackgroundOverlay and MarkerOverlay properties will be unavailable by default. 
  
 On the other hand, InMemoryMarkerOverlay is better than InMemoryFeatureLayer which cannot implement hover popup, context menu and some related stuffs; also, if InMemoryFeatureLayer will be rendered as an image on the client, if the server changed, the image need to refresh so that you’ll notice the flickering of the map. 
  
 I’m not sure the meaning by “In this project we need to change the markers image to indicate state”. Do you mean the image is changed by the timer or different markers has different images at one time? 
  
 Please feel free to let me know if you have any questions. 
  
 Thanks, 
 Howard

Howard, 
   The images will be changed by the timer depending on boolean state, either 0 or 1. After the initial load, the timer will fire every 5 seconds and make the  call that will access a web service that will indicate the state.  If the state is the same, no action will be taken; if the state has changed, the current  marker will be replaced by a marker of another color, and the dynamic layer redrawn.  For example, a pushpin marker of color green could indicate the 0 state and a pushpin marker of color red could indicate the 1 state.  If the state is 0, then a green colored pushpin will display until the state changes to 1, where a red pushpin marker will be drawn where the green pushpin marker location was; and vice versa. 
  
 Steven

Steven, 
  
 From your description, I think you can use both InMemoryMarkerOverlay or InMemoryFeatureLayer. The technical point for you is how to add different style by the boolean state and refresh the map. 
  
 Here is our installed sample for setting different styles by value. 
 \Samples\Styles\DrawFeaturesBasedOnValues.aspx 
  
 On the other hand, we have ValueMarkerStyle for InMemoryMarkerOverlay which has almost the same code as ValueStyle. 
  
 Please let me know if there is any misunderstanding. 
  
 Thanks, 
 Howard