MapGuide 浏览器可接受参数分析
摘要:
这篇文章我们主要讲述如何通过阅读分析MapGuide的源代码对MapGuide浏览器所接受参数的分析。
如果你也正在困惑于MapGuide Ajax Viewer或者Fusion Viewer究竟可以使用那些参数,那么请你继续阅读。
我们首先把Ajax Viewer和Fusion Viewer可用的参数列表列出来:
Ajax Viewer中可用的参数为:
WEBLAYOUT
LOCALE
SESSION
USERNAME
PASSWORD
Fusion Viewer可用的参数为:
Session
ApplicationDefinition
当然了,首先我们还是先简单介绍一下我们在基于MapGuide开发WebGIS应用程序时是怎样调用MapGuide 浏览器的。
在使用Ajax Viewer时:
<%@ Page Language="C#" %>
<%@ Import Namespace = "OSGeo.MapGuide"%>
<%
UtilityClass utility = new UtilityClass();
String webLayout = "Library://Exercise/Layouts/SheboyganAsp_4_Solution.WebLayout";
//string webLayout = "Library://Samples/Sheboygan/Layouts/SheboyganAspTiled.WebLayout";
String sessionId = "";
try
{
utility.InitializeWebTier(Request);
MgUserInformation userInfo = new MgUserInformation("Anonymous", "");
MgSite site= new MgSite();
site.Open(userInfo);
sessionId = site.CreateSession();
}
catch(MgException ex)
{
Response.Write(ex.GetMessage());
Response.Write(ex.GetDetails());
}
finally
{
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Exercise 4</title>
</head>
<frameset rows="100,*" border="0" framespacing="0">
<frame src = "title.htm" />
<frame src="/mapguide2010/mapviewernet/ajaxviewer.aspx?SESSION=<%= sessionId %>&WEBLAYOUT=<%= webLayout %>" name="ViewerFrame" />
</frameset>
</html>
这里我们着重看下面<frame>部分,注意到我们使用到了SESSION 和 WEBLAYOUT两个参数。那么在Ajax View中,除了这两个常用参数外,还有没有别的参数可用呢?
关于Ajax Viewer所接受的参数目前还没有文档说明哪些可用怎么用,不过MapGuide的一个特点就是开源,我们可用通过他的源代码来窥探它内部的秘密。打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\mapviewernet\mainframe.aspx 转达594行,在函数GetParameters中掐头去尾我们看下面的代码:
webLayoutDefinition = parameters["WEBLAYOUT"];
String localeParam = parameters["LOCALE"];
if (localeParam != null && localeParam.Length > 0)
{
locale = localeParam;
}
else
{
locale = GetDefaultLocale();
}
sessionId = parameters["SESSION"];
if (sessionId != null && sessionId.Length > 0)
{
sessionId = parameters["SESSION"];
orgSessionId = sessionId;
}
else
{
username = parameters["USERNAME"];
if (null != username && username.Length > 0)
{
password = parameters["PASSWORD"];
if (null == password)
{
password = "";
}
return;
}
分析上面的代码,我们可以知道 Ajax Viewer中可收的参数除了我们常用的Session和Weblayout外,还有几个,他们是:
LOCALE
USERNAME
PASSWORD
那么同样的道理,那Fusion中的情况呢? 我们还是先看看Fusion Viewer的一般用法。新建一个普通的aspx页面,在Page_Load中写如下代码:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string webLayout = "Library://Samples/Sheboygan/Layouts/TestFlex.ApplicationDefinition";
string defaultUser = "Administrator";
string defaultPassword = "admin";
try
{
MapGuideApi.MgInitializeWebTier(@"C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\webconfig.ini");
MgUserInformation userInfo = new MgUserInformation(defaultUser, defaultPassword);
MgSite site = new MgSite();
site.Open(userInfo);
string sessionId = site.CreateSession();
Response.Write("<script>alert('" + sessionId + "');</script>");
Response.Redirect("http://localhost/mapguide2010/fusion/templates/mapguide/slate/index.html?ApplicationDefinition=" + webLayout + "&Session=" + sessionId);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}
这里注意到我们的Fusion Viewer可接受的参数为ApplicationDefinition和Session, 那么除此以外还有没有别的呢?如果没有为什么是这两个而不是其他的呢?我们还是要在代码里看看一下就明白了。
打开C:\Program Files\Autodesk\MapGuideEnterprise2010\WebServerExtensions\www\fusion\lib\fusion.js,第227行左右
initialize : function(options) {
options = options || {};
var sessionIdParam = this.getQueryParam('Session');
this.sessionId = sessionIdParam || (options.sessionId || null);
if (options.applicationDefinitionURL) {
this.applicationDefinitionURL = options.applicationDefinitionURL;
} else {
var queryAppDef = this.getQueryParam('ApplicationDefinition'); if (queryAppDef) {
this.applicationDefinitionURL = queryAppDef.split('+').join(' ');
this.appDefJson = null; //wipe out any preloaded AppDef in a single file build
} else {
this.applicationDefinitionURL = 'ApplicationDefinition.xml';
}
}
注意看上面的黑体代码,可以得知,我们所需要的两个参数正是在这里被接受的。
好了,MapGuide OpenSource 代码很多,还有很多很多更好玩的东西需要你去发现,以前来研究吧。