ThinkGeo.com    |     Documentation    |     Premium Support

Map Control is Undefined on Javascript

Dear Support Team,



We have developed a map suite web MVC application and then deploy it and run it successifully to a machine running windows 7 32-bit. Now we have moved the application to a producation server running windows server 2008 64-bit. In this deployment the map control is not rendered successfully and therefore the entire map is not visible. On Javascript the following error occurs; “Map1 is undefined” whereas Map1 is the map control from map suite. Below is part of the code where the error occurs



Map rendering part of the code


  @Html.ThinkGeo().Map(“Map1”, System.Web.UI.WebControls.Unit.Percentage(100), 700)
           .MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#ffffff"))))
           .MapUnit(GeographyUnit.Feet)
            .MapTools(tools =>
             {
                 tools.MouseCoordinateMapTool().Enabled(true); 
                 
             })
.CustomOverlays(overlay =>
             {
                  //Wamis.Layers.MultiGeoRasterLayer multiGeoRasterLayer = new Wamis.Layers.MultiGeoRasterLayer(Model.Controller.GetProperty(“root”) + “Resources/Map/Image/referenceFile.txt”);
            //multiGeoRasterLayer.Open();
                 overlay.LayerOverlay(“Image”).IsVisible(true).Name(“Image”).IsBaseOverlay(false);
                 overlay.LayerOverlay(“Pipes”).IsVisible(true).Name(“Pipes”).IsBaseOverlay(false);
                 overlay.SimpleMarkerOverlay(“Customer_Point”).IsVisible(true).Name(“Customer_Point”).IsBaseOverlay(false);
                 overlay.LayerOverlay(“ScaleBar”).IsVisible(true).Name(“ScaleBar”).IsBaseOverlay(false);
              })
            
           .Render();

Scripting




<script language=“javascript” type=“text/javascript”>
      
    function LoadMap(controller, method, args) {
      ///alert(Map1);
        Map1.ajaxCallAction(’@ViewContext.RouteData.Values[“Controller”].ToString()’, method, { type: “” }, function (result) {
            var value = result.get_responseData();
            
            if (value == ‘’) {
                alert(“No place is found!”);
                 
            } else {
                var bounds = OpenLayers.Bounds.fromString(value, false);
                Map1.zoomToExtent(bounds, false);
            }
        })
}


Hi Vincent, 
  
 That works in WIN7 but not in Win server, I think that maybe related with the IE security in your server. 
  
 Could you try to set enable script in IE of server 2008? 
  
 BTW, for make sure that, maybe you can aceess the deploy from remote win7 machine at first. 
  
 Regards, 
  
 Don

Hi Don,

Thank you for the reply. The problem is, it appears like the server completely fails to load the map object. And I think that is why zoom bar is not visible. I have tried to uninstall Map suite MVC edition server and re-install it but still nothing works.



Is there incompatibility between map suite web MVC and windows server 2008 64-bit?



Best Regards,

Vincent

Hi Vincent, 
  
 Would you please provide us more information about client environment (such as ie version, javascript enabled?) to me?  and on your server, did you install MVC 3.0 components from asp.net
  
 Waiting for your further information. 
  
 Best Regards 
  
 Summer

Hi Summer,



We have discovered that the javascript event OnMapCreated does not fire at all (See the code below). Otherwise our application is comprised of modules which are running javascript and everything is working fine except when it comes to loading a map. So for that matter I am quite confident that MVC and javascript are well enabled in my deployment environment.




var Map1=null;
   var OnMapCreated = function (map) {
      Map1=map;
   }

Best Regards,

Vincent

This can be a big issue if it does not work on 64-bit server?



Could you please confirm that it works even deployed to 64-bit server!



Thanks,

Hi Vincent,


I have deploy a test server with Windows server 2008 R2, it works well as following snap shot:

Code:



image


I review your code statements, I found that you are using MultiGeoRasterLayer. I think you will install setup unmanaged dependencies 7.0.269.0.msi in daily build dll package or embed MapSuiteGeoRasterX64/ MapSuiteGeoRasterX86 merge module to your installer and deploy to your server.


Thanks,



Summer



Hi Sammer,



Thank you for the reply. I have tried the solution you have provided above, and still the problem persists. We have tried to deploy the application (with Mapsuite MVC Server installed) to 4 different PC three with windows 7 ultimate and one with windows 7 professional. The map has loaded only in one of thoses PCs which has windows 7 ultimate. When we tried to study the IIS setup and assembly compostion of the successful PC we could not establish any difference from the rest.



It seems we are going wrong somewhere in the deployment of the MVC application. 



Best Regards,

Vincent

Hi Vincent, 
  
 I get a useful website as asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs, it will help you to configure iis7.0. ECW raster is depended on ERDAS components, so the setup unmanaged dependencies 7.0.291.0.msi is necessary. 
  
 Regards, 
  
 Don

Hi Don,



Thank you for the reply. I have tried to make followup to the site you have provided as well as installing the version of msi specified above. The rest of my MVC application is working properly except the map part. The map control does not load. Is there anything else I can try? From the image below, the zoom bar should have at least be visible on the right pane of the application but it is not



 

Hi Vincent,



I think the problem is that you gives the map’s height as “*%”, but didn’t give a fixed height to all its parent elements. To prove the reason as what I described here, you can give the map’s width/height as a fixed value, such as “800px * 600px”, the map should show up. Here are 2 options for you:



1. Giving all its parent elements to a fixed height, including the  tag, the fixed value can be a “*%” or “*px”.

2. Using the following JavaScript to resize the map on client, in other words, giving its a fixed size after the document is loaded:


function resizeElementHeight() {
    var documentheight = $(window).height();
    // Todo: following you need to rewrite the code based on your requirement
    var mapDivH = (documentheight - $("#header").height() - $("#footer").height() - 1) + “px”;
    $("#map-content").height(mapDivH);
 
    // refresh the map.
    Map1.GetOpenLayersMap().updateSize();
}

Thanks,

Johnny

I noticed that too: that requirement should be documented if I did not miss it in the document.

Hi Guangming, 



Thanks for the comments, actually this is caused by the "doctype<doctype>" and just only happened when we use "*%" as the width/height of the map. We will do dome enhancements to the quick start guide later. 



Regards, 

Johnny</doctype>