<div dir="ltr"><p class="MsoNormal"><span lang="EN-US">I have
created a small .Net webapplication that creates a Mapguide 2.2 session and I
use the SessionID to create a map with Openlayers 2.13.1 client side. I have tiled
the outmost layers and the map performs okay except for one thing: when the
mapguide session is timing out the user get a pink map and he/she have to
reload the whole page to get a new session. My mapguide server has the
connection timeout set to 180 seconds in the serverconfig.ini and I do not want
to change that setting because I have other maps running on the same MapGuide
server.</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">I have
tried to call a map.GetScale() with the setInterval function from javascript to
avoid the session from timing out but with no luck. If the user search for an
address on the page I can check serverside that the session is valid and if not
I create a new session. There is another problem that needs to be handled if
the user leaves the map for 180 seconds and then comes back and either pan’s or
zoom’s in the map then he/she get the pink map. I would like to renew the
session from openlayers and the second best solution would be to inform the
user to reload the page because the session has timed out. Does any one have a
good solution to that problem? </span></p>
<p class="MsoNormal"><span lang="EN-US">I have
pasted in the javascript code maybe I’m doing something wrong.</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">var map,
layer, selectControl;</span></p>
<p class="MsoNormal"><span lang="EN-US">var url =
MAPAGENTFULLURL;</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">var
metersPerUnit = 111319.4908; //value
returned from mapguide</span></p>
<p class="MsoNormal"><span lang="EN-US">var
inPerUnit = OpenLayers.INCHES_PER_UNIT.m * metersPerUnit;</span></p>
<p class="MsoNormal"><span lang="EN-US">OpenLayers.INCHES_PER_UNIT["dd"]
= inPerUnit;</span></p>
<p class="MsoNormal"><span lang="EN-US">OpenLayers.INCHES_PER_UNIT["degrees"]
= inPerUnit; </span></p>
<p class="MsoNormal"><span lang="EN-US">OpenLayers.DOTS_PER_INCH
= 96;</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">// Read a
page's GET URL variables and return them as an associative array.</span></p>
<p class="MsoNormal"><span lang="EN-US">function
getUrlVars() {</span></p>
<p class="MsoNormal"><span lang="EN-US"> var vars = [], hash;</span></p>
<p class="MsoNormal"><span lang="EN-US"> var hashes =
window.location.href.slice(window.location.href.indexOf('?') +
1).split('&');</span></p>
<p class="MsoNormal"><span lang="EN-US"> for (var i = 0; i < hashes.length; i++)
{</span></p>
<p class="MsoNormal"><span lang="EN-US"> hash = hashes[i].split('=');</span></p>
<p class="MsoNormal"><span lang="EN-US"> vars.push(hash[0]);</span></p>
<p class="MsoNormal"><span lang="EN-US"> vars[hash[0]] = hash[1];</span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> return vars;</span></p>
<p class="MsoNormal"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">var extent
= new OpenLayers.Bounds(558039.925296475, 6203996.72440874, 588823.764743925,
6244575.71467263);</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">function
initUnTiled() {</span></p>
<p class="MsoNormal"><span lang="EN-US"> var tempScales = [200000, 175000, 150000,
125000, 100000, 75000, 50000, 40000, 30000, 20000, 10000, 5000, 4000, 3000,
2000, 1000, 500, 250, 100];</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var mapOptions = {</span></p>
<p class="MsoNormal"><span lang="EN-US"> maxExtent: extent,</span></p>
<p class="MsoNormal"><span lang="EN-US"> restrictedExtent: extent, </span></p>
<p class="MsoNormal"><span lang="EN-US"> scales: tempScales,</span></p>
<p class="MsoNormal"><span lang="EN-US"> units: "m",</span></p>
<p class="MsoNormal"><span lang="EN-US"> projection: 'EPSG:25832' </span></p>
<p class="MsoNormal"><span lang="EN-US"> };</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> map = new OpenLayers.Map('map',
mapOptions);</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var params = {</span></p>
<p class="MsoNormal"><span lang="EN-US"> mapdefinition: KORTDEFINITION,</span></p>
<p class="MsoNormal"><span lang="EN-US"> basemaplayergroupname:
"DETALJEKORTTILED",</span></p>
<p class="MsoNormal"><span lang="EN-US"> session: MAPGUIDESESSION </span></p>
<p class="MsoNormal"><span lang="EN-US"> };</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var options = {</span></p>
<p class="MsoNormal"><span lang="EN-US"> isBaseLayer: true,</span></p>
<p class="MsoNormal"><span lang="EN-US"> transitionEffect: "resize",</span></p>
<p class="MsoNormal"><span lang="EN-US"> buffer: 1,</span></p>
<p class="MsoNormal"><span lang="EN-US"> useOverlay: false,</span></p>
<p class="MsoNormal"><span lang="EN-US"> useAsyncOverlay: false, </span></p>
<p class="MsoNormal"><span lang="EN-US"> singleTile: false </span></p>
<p class="MsoNormal"><span lang="EN-US"> };</span></p>
<p class="MsoNormal"><span lang="EN-US"> // Coordinates from url</span></p>
<p class="MsoNormal"><span lang="EN-US"> var xkoord = getUrlVars()["X"];</span></p>
<p class="MsoNormal"><span lang="EN-US"> var ykoord = getUrlVars()["Y"];</span></p>
<p class="MsoNormal"><span lang="EN-US"> var mbr = getUrlVars()["MBR"];</span></p>
<p class="MsoNormal"><span lang="EN-US"> var point = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(xkoord, ykoord));</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var my_style = new OpenLayers.StyleMap({</span></p>
<p class="MsoNormal"><span lang="EN-US"> "default": new
OpenLayers.Style(</span></p>
<p class="MsoNormal"><span lang="EN-US"> {</span></p>
<p class="MsoNormal"><span lang="EN-US"> pointRadius: 5,</span></p>
<p class="MsoNormal"><span lang="EN-US"> strokeColor: "#ff0000",</span></p>
<p class="MsoNormal"><span lang="EN-US"> fillColor: "#ff0000",</span></p>
<p class="MsoNormal"><span lang="EN-US"> fillOpacity: 0.2,</span></p>
<p class="MsoNormal"><span lang="EN-US"> strokeWidth: 1,</span></p>
<p class="MsoNormal"><span lang="EN-US"> fontColor: "blue",</span></p>
<p class="MsoNormal"><span lang="EN-US"> fontSize: 10,</span></p>
<p class="MsoNormal"><span lang="EN-US"> fontFamily: "Arial",</span></p>
<p class="MsoNormal"><span lang="EN-US"> fontWeight: "bold"</span></p>
<p class="MsoNormal"><span lang="EN-US"> })</span></p>
<p class="MsoNormal"><span lang="EN-US"> });</span></p>
<p class="MsoNormal"><span lang="EN-US"> var soegtlayer = new
OpenLayers.Layer.Vector("Din adresse",</span></p>
<p class="MsoNormal"><span lang="EN-US"> {</span></p>
<p class="MsoNormal"><span lang="EN-US"> isFixed: false,</span></p>
<p class="MsoNormal"><span lang="EN-US"> styleMap: my_style</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> });</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> soegtlayer.addFeatures([point]);</span></p>
<p class="MsoNormal"><span lang="EN-US"> var layer = new
OpenLayers.Layer.MapGuide("kort med Driftsforstyrrelser", url,
params, options);</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var dynoptions = {</span></p>
<p class="MsoNormal"><span lang="EN-US"> isBaseLayer: false,</span></p>
<p class="MsoNormal"><span lang="EN-US"> useOverlay: false, //false</span></p>
<p class="MsoNormal"><span lang="EN-US"> useAsyncOverlay: false, // false</span></p>
<p class="MsoNormal"><span lang="EN-US"> singleTile: true</span></p>
<p class="MsoNormal"><span lang="EN-US"> };</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> var dynparams = {</span></p>
<p class="MsoNormal"><span lang="EN-US"> mapdefinition: KORTDEFINITION,</span></p>
<p class="MsoNormal"><span lang="EN-US"> session: MAPGUIDESESSION</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> };</span></p>
<p class="MsoNormal"><span lang="EN-US"> untiledlayer = new
OpenLayers.Layer.MapGuide("Ledninger", url, dynparams, dynoptions);</span></p>
<p class="MsoNormal"><span lang="EN-US"> map.addLayers([untiledlayer, layer, soegtlayer]);</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span>map.addControl(new
OpenLayers.Control.MousePosition());</p>
<p class="MsoNormal"><span lang="EN-US"> map.addControl(new
OpenLayers.Control.Scale());</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> // TEST af select feature</span></p>
<p class="MsoNormal"><span lang="EN-US"> map.addControl(new
OpenLayers.Control.LayerSwitcher());</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> selectControl = new
OpenLayers.Control.SelectFeature(</span></p>
<p class="MsoNormal"><span lang="EN-US"> [soegtlayer],</span></p>
<p class="MsoNormal"><span lang="EN-US"> {</span></p>
<p class="MsoNormal"><span lang="EN-US"> clickout: true, toggle:
false,</span></p>
<p class="MsoNormal"><span lang="EN-US"> multiple: false, hover:
false,</span></p>
<p class="MsoNormal"><span lang="EN-US"> toggleKey:
"ctrlKey", // ctrl key removes from selection</span></p>
<p class="MsoNormal"><span lang="EN-US"> multipleKey:
"shiftKey" // shift key adds to selection</span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> );</span> </p>
<p class="MsoNormal"><span lang="EN-US"> map.addControl(selectControl);</span></p>
<p class="MsoNormal"><span lang="EN-US"> selectControl.activate();</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> // Pings map to avoid timeout</span></p>
<p class="MsoNormal"><span lang="EN-US"> setInterval(function () {</span></p>
<p class="MsoNormal"><span lang="EN-US"> var mLayers = map.GetScale(); </span></p>
<p class="MsoNormal"><span lang="EN-US"> }, 30000);</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> //oprindelig ZOOM i kort</span></p>
<p class="MsoNormal"><span lang="EN-US"> if (xkoord != null &&
ykoord != null) {</span></p>
<p class="MsoNormal"><span lang="EN-US"> map.setCenter(new OpenLayers.LonLat(xkoord,
ykoord), 14); </span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> else {</span></p>
<p class="MsoNormal"><span lang="EN-US"> // Hvis parameteren er en MBR
rektangel zoomes til rektangel</span></p>
<p class="MsoNormal"><span lang="EN-US"> if (mbr != null) {</span></p>
<p class="MsoNormal"><span lang="EN-US"> var koordSet =
mbr.split(",");</span></p>
<p class="MsoNormal"><span lang="EN-US"> // udregn nyt centerpunkt</span></p>
<p class="MsoNormal"><span lang="EN-US"> var centerX =
(parseFloat(koordSet[0]) + parseFloat(koordSet[2])) / 2;</span></p>
<p class="MsoNormal"><span lang="EN-US"> var centerY =
(parseFloat(koordSet[1]) + parseFloat(koordSet[3])) / 2;</span></p>
<p class="MsoNormal"><span lang="EN-US"> var zoomLevel = new
OpenLayers.Bounds(koordSet);</span></p>
<p class="MsoNormal"><span lang="EN-US"> var nytZoom =
map.getZoomForExtent(zoomLevel, true);</span></p>
<p class="MsoNormal"><span lang="EN-US"> // Det beregnede zoom
fratrækkes 1 for at få lidt margin i kortet</span></p>
<p class="MsoNormal"><span lang="EN-US"> map.setCenter(new
OpenLayers.LonLat(centerX, centerY), nytZoom - 1); </span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> else {</span></p>
<p class="MsoNormal"><span lang="EN-US"> map.zoomToMaxExtent();</span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span lang="EN-US"> }</span></p></div>