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 代码很多,还有很多很多更好玩的东西需要你去发现,以前来研究吧。


Related Posts Plugin for WordPress, Blogger...