<%@ enablesessionstate=false language=javascript %> <% // return " " for empty text and use server encoder otherwise function encode(text) { return (text != "")? Server.HTMLEncode(text): " "; } // extract parameter from the state string function extractStatePar(state, name) { var stateItems = state.split("$"); if (stateItems == null) return ""; // locate parameter for (var stateIndex = 0; stateIndex < stateItems.length; stateIndex++) { var stateItem = stateItems[stateIndex]; if (stateItem != null && stateItem.indexOf(name + "=") == 0) return stateItem.substr(name.length + 1, stateItem.length - name.length - 1); } return ""; } // replace parameter within the state string function replaceStatePar(state, name, value) { var stateItems = state.split("$"); if (stateItems == null) return name + "=" + value + "$"; var found = false; // locate parameter for (var stateIndex = 0; stateIndex < stateItems.length; stateIndex++) { var stateItem = stateItems[stateIndex]; if (stateItem != null && stateItem.indexOf(name + "=") == 0) { stateItems[stateIndex] = name + "=" + value; found = true; } } return stateItems.join("$") + "$" + (found? "": (name + "=" + value + "$")); } // locate parameter in form function parameter(name, startup) { return (Request.Form(name).Count > 0)? Request.Form(name)(1): startup; } // ensure the page is not cached Response.Expires = 0; // create export parameters var findV = false; var hyperlinksNewV = false; var infoV = true; var layersV = false; var legendV = true; var locationV = false; var scaleV = true; var viewsV = false; // create parameters var boxBandX = parameter("boxBandX", ""); var boxBandY = parameter("boxBandY", ""); var boxSizeX = parameter("boxSizeX", ""); var boxSizeY = parameter("boxSizeY", ""); var boxStopX = parameter("boxStopX", ""); var boxStopY = parameter("boxStopY", ""); var command = parameter("command", "startup"); var count = parameter("count", "0"); var findP = parameter("findP", "y"); var layersP = parameter("layersP", "y"); var legendP = parameter("legendP", "y"); var mode = parameter("mode", "center"); var view = parameter("view", ""); var viewsP = parameter("viewsP", "y"); var what = parameter("what", ""); var where = parameter("where", ""); var queriesP = parameter("queriesP", "y"); var query = parameter("query", ""); var queryPars = parameter("queryPars", ""); var state = parameter("state", ""); var x = parameter("x", ""); var y = parameter("y", ""); // handle mapserver commands that change state string if (command == "zoomBox") { var viewport = extractStatePar(state, "viewport"); if (viewport != null && viewport != "") { // split viewport into pars var viewportPars = viewport.split(","); if (viewportPars != null && viewportPars.length == 4) { var scaleX = parseFloat(viewportPars[0]); var scaleY = parseFloat(viewportPars[1]); var centerX = parseFloat(viewportPars[2]); var centerY = parseFloat(viewportPars[3]); // replace centerX and centerY with box center var shiftX = boxBandX/2.0 + boxStopX/2.0 - boxSizeX/2.0; var shiftY = boxBandY/2.0 + boxStopY/2.0 - boxSizeY/2.0; centerX = centerX + scaleX*shiftX; centerY = centerY - scaleY*shiftY; // replace scaleX and scaleY with scale imposed by box var scaleIncX = Math.abs(boxBandX-boxStopX) / boxSizeX; var scaleIncY = Math.abs(boxBandY-boxStopY) / boxSizeY; var scaleInc = Math.max(Math.max(scaleIncX, scaleIncY), 0.05); // never zoom for more than 20x scaleX = scaleX * scaleInc; scaleY = scaleY * scaleInc; viewportPars[0] = scaleX; viewportPars[1] = scaleY; viewportPars[2] = centerX; viewportPars[3] = centerY; viewport = viewportPars.join(","); // replace viewport parameter within state string state = replaceStatePar(state, "viewport", viewport); } } } // create mapserver object var mapserver; mapserver = Server.CreateObject("Manifold.MapServer"); mapserver.Create(Server.MapPath("config.txt"), state, Server); var index = 0; var tableSrc = ""; // handle mapserver commands that do not change state string if (command == "" && mode == "center") { mapserver.Center(parseInt(x), parseInt(y)); } else if (command == "" && mode == "info") { if (mapserver.HasInfoAt(parseInt(x), parseInt(y))) tableSrc = "table.asp?state=" + Server.URLEncode(state) +"&command=" + Server.URLEncode(command) + "&mode=" + Server.URLEncode(mode) + "&x=" + Server.URLEncode(x) + "&y=" + Server.URLEncode(y); } else if (command == "" && mode == "zoomIn") { mapserver.ZoomIn(parseInt(x), parseInt(y)); } else if (command == "" && mode == "zoomOut") { mapserver.ZoomOut(parseInt(x), parseInt(y)); } else if (command == "find") { mapserver.Locate(what, where); tableSrc = "table.asp?command=" + Server.URLEncode(command) + "&what=" + Server.URLEncode(what) + "&where=" + Server.URLEncode(where); } else if (command == "layers") { for (index = 0; index < parseInt(count); index++) mapserver.TurnLayer(index, parameter("layer" + index, "") == "on"); } else if (command == "view") { mapserver.GoToView(view); } else if (command == "zoomToFit") { mapserver.ZoomToFit(); } else if (command == "query") { mapserver.Query(query, queryPars); tableSrc = "table.asp?command=" + Server.URLEncode(command) + "&query=" + Server.URLEncode(query) + "&queryPars=" + Server.URLEncode(queryPars); } // create results var copyright = mapserver.Copyright; var cxhdr = mapserver.CX + 180; var cxmap = mapserver.CX; var cymap = mapserver.CY; var fields = mapserver.Fields; var layers = mapserver.Layers; var location = ""; if (locationV) location = mapserver.Location; var scaling = ""; if (scaleV) scaling = mapserver.Scale; state = mapserver.State; var subtitle = mapserver.Subtitle; var target = mapserver.Target; var title = mapserver.Title; var views = mapserver.Views; var queries = mapserver.Queries; var queriesC = ""; var queryList = queries.split("\n"); var querySqno = 0; var queryItem; for (queryItem in queryList) { if (queryList[queryItem] != "") { queriesC = queriesC + "\n"; var queryPar = mapserver.QueryParameters(querySqno); var parList = queryPar.split("\n"); var parItem; var parNumber = 0; for (parItem in parList) { if (parList[parItem] != "") queriesC = queriesC + "\n"; parNumber++; } queriesC = queriesC + "
" + encode(queryList[queryItem]) + "
" + encode(parList[parItem]) + "
\n" } querySqno++; } if (queriesC != "") queriesC = "" + queriesC + "
"; // release mapserver object mapserver = null; // redirect response if necessary if (target != "" && !hyperlinksNewV) Response.Redirect(target); // compose image URL var image = "map.asp?state=" + Server.URLEncode(state) + "&command=" + Server.URLEncode(command) + "&mode=" + Server.URLEncode(mode) + "&query=" + Server.URLEncode(query) + "&queryPars=" + Server.URLEncode(queryPars) + "&what=" + Server.URLEncode(what) + "&where=" + Server.URLEncode(where) + "&x=" + Server.URLEncode(x) + "&y=" + Server.URLEncode(y); // create find pane if necessary var findC = ""; if (findV) { var findItem, findList = fields.split("\n"); for (findItem in findList) { if (findList[findItem] != "") findC = findC + "