ThinkGeo.com    |     Documentation    |     Premium Support

Map displays red X after a while

Hi,


I am using Web 5.5 and with SQL Spatial database. After panning and zooming the map for like few minutes, all of the sudden the map only display red X at the top left corner. The map feature is still selectable when clicking on the map but nothing is displayed except the red X. I am using a 30 inch monitor and this problem occurred both on the development machine and server deployed machine and I also tested different release versions and the latest development build.


Is that because the size of the monitor that the map control couldn't handle processing? How to resolve this problem? Thanks.



Hello Ching, 
  
 Thanks for your post, could you please try to set  
  
 layer.DrawingExceptionMode = DrawingExceptionMode.ThrowException; 
  
 and see what’s the exception cause the red X? Most time the red x is because we keep drawing the feature when it has problem. 
  
 Regards, 
  
 Gary 


I set the DrawingExceptionMode to ThrowException and also checked throw exceptions under Debug -> Exceptions… in Visual Studio, no exception is thrown just Red X. 
  
 I also checked the database with STIsValid() = 0, there are no invalid objects.

Hello Ching, 
  
 Could you please check if it’s out of memory when all the map become red X, also is the red X shows in every extent once it happened? 
  
 Sorry I need more information and guide to reappear the problem, or if it’s a possbile to provide a self-contained sample that can recreate the problem directly, that will helps a lot. 
  
 Regards, 
  
 Gary

It still have over a gig of available memory left when it happens. 
 Yes the red X is showing on every extent once it happened. 
 Sometimes it comes back when I do zoom in or zoom out but most of the time it just shows red X from then on unless I refresh the page.

Hello Ching, 
  
 We tested the scenario with a database which has 700,000 line records in a 40 inches monitor, the resolution is 2560 * 2048(4 monitors with resolution 1280 * 1024 each), I zoom in and out and pan for a long time, but the red X doesn’t appear, so I think we need more information for how to recreate this problem. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 I really appreciate you taking the time to recreate this problem. 
 I tested to display the map on thinkgeo sample app with the same database. I cannot reproduce this red X. 
 Which means the problem is not the database nor the map control. 
 It would be nice if I can catch that error but at this point I don’t know what to do. 
 It could be ajax update panel causing the problem or it could be some javascript or css styling. 
 I will let you know if I figure out something.

Hello Ching, 
  
 You are welcome, please feel free to let us know your problems. 
  
 Regards, 
  
 Gary

I still haven’t find out what is the problem. I want to mention that another time that red X comes up is when the session timeout. It has the exact same behavious and no error message as well. May be this can be a clue to find out the real cause?

Hello Ching, 
  
 Sorry we still can’t recreate this problem, is there any other way? If you can provide a self-contained sample, we can find the root cause very quick. 
  
 Regards, 
  
 Gary

I caught this error a few times, when I click a button (that calls redraw of the map overlay) after the red X appears, not sure if it is related. 
 
Exception of type ‘System.Web.HttpUnhandledException’ was thrown.
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.maptest_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\ea3e2576\e0eb3d71\App_Web_0th54oin.1.cs:line 0
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Source Url : /MapTest.aspx
— Inner Exeception —
Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
   at ohM=.bBY=.qhY=(Object qxY=)
   at ThinkGeo.MapSuite.WebEdition.Map.ToJson()
   at ThinkGeo.MapSuite.WebEdition.Map.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
   at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)
   at ThinkGeo.MapSuite.WebEdition.Map.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.Control.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.UpdatePanel.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.UpdatePanel.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.PageRequestManager.RenderFormCallback(HtmlTextWriter writer, Control containerControl)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
   at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.HtmlFormWrapper.System.Web.UI.IHtmlForm.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.PageRequestManager.RenderPageCallback(HtmlTextWriter writer, Control pageControl)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.Page.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

— Inner Exeception —
The map unit is invalid, please set the MapUnit with a proper value.
Parameter name: mapUnit
   at ohM=.Yxc=.ehc=(GeographyUnit exc=)
   at ohM=.5hU=.6hU=(Double 6xU=, GeographyUnit 7BU=)
   at ThinkGeo.MapSuite.WebEdition.Map.get_ClientResolutions()
 


I understand but creating that self contained sample is not an easy task. 
 Without knowing which part of the project is causing the problem, the sample could means the entire project.

Hello Ching, 



Thanks for your further information, I saw this exception: 



The map unit is invalid, please set the MapUnit with a proper value. 

Parameter name: mapUnit 



Most time, this exception is because you call the map control before it initialized, could you please check any possible javascript? 



Regards, 



Gary



 Hi,


I have the same problem in my intranet in aspx with built in authentification.


I think that it happens when the session ends.


Let me know if this is possible.


Thank you.



Here is the javascript in the user control of the map control, some of them are probably not related but I just copy them all. 
 Can you take a look and let me know what is causing the problem and may be provide a work around? 
 Thanks. 
   
  
<script type=“text/javascript” language=“javascript”>
    // This holds the click event for the last Map click
    var _LastClickedMapEvent;

    // This holds the openlayer map object.
    var _Map;
     
    // e - The OnClick event fired.
    function MapClientClick(e) {
        // Caching the event
        _LastClickedMapEvent = e;
        RemoveEditMode();
        return true;
    }

    // This changes updates btnMove’s text and stores the 
    // map mode as a string within the hiddenMapMode control.
    function ToggleMove() {
        var txtvalue = document.getElementById(’<%= hiddenMapMode.ClientID %>’).value;
        if (txtvalue == “Normal”) {
            SetEditMode();
        } else {
            RemoveEditMode();
        }
    }

    // This function changes the DrawMode for the map control to the given mode. Its its own function
    // so that the serverside mark-up will be processed.
    //
    // mode - The mode to set
    function SetMapDrawMode(mode) {
        <%= Map1.ClientID %>.SetDrawMode(mode);
    }

    // This attaches a new event handler to the OnMapCreated event which
    // assigns the tgMap variable.
    var OnMapCreated = function(map) {
        _Map = map;
        document.getElementById(’<%= hiddenMapMode.ClientID %>’).value = “Normal”;
        //_Map.updateSize();
        //FullExtent();
    };

    function RemoveEditMode() {
        //remove selection
        try {
            var modifyControl = _Map.controls[10];
            if (modifyControl != null && modifyControl.selectControl != null) {
                modifyControl.selectControl.unselectAll();
                // Set the mode to Normal
                document.getElementById(’<%= hiddenMapMode.ClientID %>’).value = “Normal”;
                var btnMove = document.getElementById(‘btnMove’);
                if (btnMove != null)
                    btnMove.src = “theme/default/img/move_feature_off.gif”;
            }
        } catch(e) {
            alert(e.toString());
        } 
    }

    function SetEditMode() {
        // The next line is a breakpoint command for embedded Javascript
        //debugger;

        var editOverlay = _Map.getLayersByName(‘EditOverlay’);
        if (editOverlay[0] != null) {
            var feature = editOverlay[0].features[0];
            // The map has a ModifyFeature which allows you to edit a vector feature
            // Ref: docs.openlayers.org/library/controls.html#modifyfeature
            var modifyControl = _Map.getControl(‘Modify’);
            modifyControl.selectControl.select(feature);
            modifyControl.selectFeature(feature);
            // Set the mode to Move                
            document.getElementById(’<%= hiddenMapMode.ClientID %>’).value = “Move”;
            var btnMove = document.getElementById(‘btnMove’);
            if (btnMove != null) {
                btnMove.src = “theme/default/img/move_feature_on.gif”;
            }
        }
    }

    function FindPosition(obj) {
        var curleft = 0;
        var curtop = 0;
        if (obj.offsetParent) {
            do {
                curleft += obj.offsetLeft;
                curtop += obj.offsetTop;
            } while (obj = obj.offsetParent);
        }
        return [curleft, curtop];
    }

    function FullExtent() {
        //SetMapSize();
        var extent = new OpenLayers.Bounds(<%= minX %>, <%= minY %>, <%= maxX %>, <%= maxY %>);
        <%= Map1.ClientID %>.ZoomToExtent(extent);
    }

    function ZoomIn() {
        <%= Map1.ClientID %>.ZoomIn();
    }

    function ZoomOut() {
        <%= Map1.ClientID %>.ZoomOut();
    }

    function Track() {
        <%= Map1.ClientID %>.Track();
    }

    function Pan() {
        <%= Map1.ClientID %>.Pan();
    }
    
    function ShowImages() {
        window.open(‘FeatureImage.aspx’, ‘FeatureImages’, ‘width=800,height=600,resizable=1’);        
    }
</script>


Hello Ching, Gautier, 
  
 As you both mentioned it maybe a session problem, I want to know what’s your session timeout setting on your IIS? 
  
 It’s wired because Ching said “After panning and zooming the map for like few minutes, all of the sudden the map only display red X at the top left corner”, if you keep panning or zoom the map, the session won’t be time out unless you set it really a short time. 
  
 Regards, 
  
 Gary

I my case. there are two different causes, they just have the same symptom. 
 The session timeout is one cause, it will display red X when the page is inactive for a while. 
 The other cause I am still trying to figure out, it will display red X even when you are panning and zooming or clicking refresh button.

Hello Ching, 



Ok, this make sense now. 



So for your situation, you meet two kind of errors, one is because session time out which as same as Gautier, this problem is just as you said, session time out cause the request invalid, map control can not get anything useful to draw the map, to fix this, you need to extend the session time in your IIS or do a callbak(or similar operate)in period of time to keep the session live until customer close the map page. 



Another one as I guess is because script calls map control before it initialized, I saw your post code, but I can't find error with out debug it, is that possbile you can provide a sample(online sample is ok too) that I can visit and recreate the problem? Then I can debug the script to follow the error. 



Regards, 



Gary



Hi Gary, 
  
 What is your email address? I will send you the url and login info. 
  
 Ching

Hello Ching, 
  
 You can send to forumsupport@thinkgeo.com
  
 Regards, 
  
 Gary