本节将介绍什么是HTTP API,HTTP API与MapGuide Web API的关系,以及如何使用HTTP API。一般情况下,我们并不需要使用HTTP API,而且Viewer API已经包装了某些必需的HTTP API。如果不打算对Viewer API进行一些修改的话,可以忽略本节的内容。

1.1.1        什么是HTTP API?

如果查看客户端API的JavaScript源代码,我们会发现类似如下所示的一些字符串。

OPERATION=<OperationName>&VERSION=1.0.0&...

例如,当用户使用AJAX Viewer选择一个要素时,会调用客户端JavaScript函数RequestSelectionImage,从下面的代码可以看到这个函数就用到了这样的字符串。

function RequestSelectionImage(reqId, viewParams)

{

url = webAgent + "?OPERATION=GETDYNAMICMAPOVERLAYIMAGE&FORMAT=PNG&VERSION=2.1.0&SESSION=" + sessionId + "&MAPNAME=" + encodeComponent(mapName) + "&SEQ=" + Math.random() + "&CLIENTAGENT=" + encodeComponent(clientAgent) + "&BEHAVIOR=5&SELECTIONCOLOR=" + selectionColor;

url += viewParams;

document.getElementById('selOverlay').innerHTML =

'<img class="mapImage" name="' + reqId + '" id="selectionImage" src="' + url + '" width=' + mapDevW + ' height=' + mapDevH + ' border=0 vspace=0 hspace=0 style="visibility: hidden; width: ' + mapDevW + 'px; height: ' + mapDevH + 'px;" οnlοad="return OnSelectionOverlayImageLoaded(event)">';

if (opera)

document.getElementById("selectionImage").src =

document.getElementById("selectionImage").src;

}

执行函数RequestSelectionImage后,会得到类似于如下所示的一个字符串。

http://hostname/mapguide/mapagent/mapagent.fcgi?OPERATION=GETDYNAMICMAPOVERLAYIMAGE&FORMAT=PNG&VERSION=2.1.0&SESSION=a4b1042a-d99e-11de-8000-005056c00008_en_7F0000010AFC0AFB0AFA&MAPNAME=Smoke%20Test%20Map&SEQ=0.9236688035011565&CLIENTAGENT=Ajax%20Viewer&BEHAVIOR=5&SELECTIONCOLOR=0x0000FFFF

很明显,这是一个HTTP请求,它包含了参数OPERATION、FORMAT、VERSION、SESSION、MAPNAME、CLIENTAGENT、BEHAVIOR和SELECTIONCILOR,Web应用服务器端名为mapgent.fcgi的应用程序会处理这个HTTP请求,当处理完请求后,Web应用服务器会返回一张PNG格式的图像,这张图像是被选中要素的渲染结果。

这个HTTP请求使用的就是MapGuide服务HTTP API,MapGuide服务HTTP API定义了MapGuide客户端与MapGuide Web应用服务器的通信接口,为客户端通过Web应用服务器访问MapGuide服务器提供了一条通道。

1.1.2        HTTP API和MapGuide Web API的关系

MapGuide服务HTTP协议和MapGuide Web API有什么关系呢?他们的相同之处是都提供了一种访问MapGuide站点服务、资源服务、要素服务等服务的途径。不同之处是MapGuide Web API是Web应用服务器端接口,由Web应用服务器端的.NET、Java或PHP模块所调用,服务请求被直接发送到MapGuide服务器;而MapGuide服务HTTP协议是一种客户端接口,由客户端来调用,服务请求由部署在Web应用服务器上的MapAgent转发到MapGuide服务器。

目前,MapGuide Studio就是使用MapGuide服务HTTP协议来访问MapGuide服务器上的资源的,所以我们在使用MapGuide Studio的时候只需要知道Web应用服务器的地址,而不需要知道MapGuide服务器的地址,因为部署在Web服务器上的MapAgent知道MapGuide服务器的地址,会将服务请求转发给MapGuide服务器。

1.1.3        使用HTTP API

MapGuide HTTP API中定义的所有操作由如下几部分组成:

l  操作名称:操作的名称,例如“ENUMERATERESOURCES”。

l  操作参数:操作的参数,例如“RESOURCEID”。

l  HTTP状态码:它反映了操作是否成功执行,例如“HTTP/1.1 200”,表示操作执行成功。

l  响应结果:操作返回的数据,可以是XML、PNG、JPG、DWF、W2D等。

HTTP API几乎为MapGuide站点服务、资源服务、要素服务等服务的所有方法都定义了一个对应的操作,这些操作的名称、参数、响应结果基本上和对应方法的名称、参数、返回值一致。HTTP API定义的所有操作使用了一些共同的参数,例如“VERSION”、“LOCALE”等,表 5‑1列出了这些共同的参数。从实现的角度来看,大部分HTTP API中定义的操作最终调用了MapGuide服务中对应的方法。

参数名称

是否可选

描述

OPERATION

N

操作的名称。

VERSION

N

操作的版本号,例如“1.0.0”。

LOCALE

Y

本地化信息,

表 5‑1 HTTP API中操作共同的参数

下面我们以枚举资源操作为例来介绍HTTP API,资源服务中有如下的方法用于枚举资源:

MgByteReader  MgResourceService::EnumerateResources (

MgResourceIdentifier  resource,

INT32  depth,

CREFSTRING  type);

HTTP API也为枚举资源提供了对应的操作,操作的名称和参数如表5‑2所示。

参数名称

是否可选

参数值

OPERATION

N

EnumerateResources

VERSION

N

1.0.0

RESOURCEID

N

Library://

TYPE

Y

FeatureSource

DEPTH

N

3

表 5‑2 HTTP API枚举资源操的参数列表

如果发送此操作请求,会得到类似于如下所示的一个字符串。

http://hostname/mapGuide/mapagent.fcig?OPERATION=EnumerateResources&VERSION=1.0.0& RESOURCEID=Library:// &TYPE=FeatureSource&DEPTH=3

执行此操作后,Web应用服务器会返回表5‑3所示的HTTP状态码之一。

状态码

描述

HTTP/1.1 200 OK

成功地获得的资源列表。

HTTP/1.1 401 Unauthorized

用户认证失败。

HTTP/1.1 403 Forbidden

用户没有权限访问被枚举的资源。

表 5‑3 HTTP API枚举资源操的HTTP状态码

如果成功地执行此操作,那么最后的响应结果为一个XML,这个XML文件描述了枚举得到的所有资源,在下面的列表中我们省略了这部分内容。

HTTP/1.1 200 OK

Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>

……

非常遗憾的是,MapGuide没有为HTTP API提供一个参考手册。幸运的是大部分的操作都对应于MapGuide服务中的一个方法,这些操作的名称、参数、响应结果基本上和对应方法的名称、参数、返回值一致,所以猜也可以猜个八九不离十。如果实在搞不定,可能就需要参考MapGuided源代码,查看文件夹<MgSourceCodeDir>/MgDev/Web/src/HttpHandler下的代码就可以找到每个操作的参数和响应结果类型。

MapGuide HTTP API相关推荐

  1. SWIG和MapGuide Web API

    许多人都知道MapGuide提供了.NET.PHP和Java三种类型的Web API,但是不知道MapGuide是如何创建这三种类型的API的.试想一下,如果分别去创建这三种API,这将是一个很难维护 ...

  2. MapGuide API

    1.1  MapGuide API MapGuide是一个三层架构的Web GIS系统,所以MapGuide API也分为了两大类:服务器端API和客户端API,如图3-1所示. 图3-1 MapGu ...

  3. MapGuide应用程序示例——你好,MapGuide!

    图 3‑4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程可以分为五个阶段.图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流. 1) 加载文件类型的数据,配置 ...

  4. MapGuide的系统架构

    MapGuide由四个独立的组件(Component)构成,它们分别是: MapGuide Server MapGuide Web Extensions MapGuide Studio MapGuid ...

  5. [新书推荐]Autodesk地理信息系统解决方案——FDO、MapGuide、AutoCAD® Map 3D二次开发指南...

    MapGuide及其相关技术一直缺乏中文资料,针对这种现状,最近Autodesk上海研究院出版了一本新书,系统的介绍了Autodesk地理信息系统解决方案,包括FDO.MapGuide.Map3D等等 ...

  6. MapGuide和Google Maps集成常见问题

    最近在MapGuide用户邮件组中频繁问到MapGuide和Google Maps等在线地图的集成问题,Jackie总结了一些FAQ,我翻译一下供大家参考. Q: Google Maps能和MapGu ...

  7. 猛料来啦!Autodesk全线产品二次开发视频录像下载!!

    近年来全部Autodesk产品二次开发视频讲述下载链接!!AutoCAD, Revit, NavisWorks, Inventer, Vault, Civil 3D, Map 3D, Maya, 3d ...

  8. 你必须收藏的快速学习Autodesk最新编程接口的免费录像

    我们最近录制了几个DevTV,以方便大家了解并学习Autodesk最新的API,其中包括Revit 2010 API, AutoCAD 2011 API 和 MapGuide Enterprise A ...

  9. Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第1章

    目录: Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第1章 Autodesk Infrastructure Map Serv ...

最新文章

  1. 网页侧边浮动条的实现
  2. 偶对称离散余弦变换 EDCT
  3. 【2015年第4期】基于电力运营大数据分析实现节能减排
  4. 设计模式之不简单的工厂模式(二)
  5. python seaborn boxplot_seaborn.boxplot
  6. EasyUi – 5.修改$.messager.show() 弹出窗口在浏览器顶部中间出现
  7. html引入html include_PostgreSQL引入插件EXTENSION的常用方法
  8. 20181109_任务
  9. idea报错:不支持发行版本5的错误,快速解决方案
  10. java 的 sort()_Java中Array.sort()的几种用法
  11. 智慧工厂应用系统建设方案
  12. 新cBSS敏捷发布实践
  13. 偏差-方差分解bias-variance decomposition
  14. 学习C语言 - 推荐书籍
  15. 判断是否为非负数、小数点后两位
  16. java实现变声器--变声萝莉
  17. python 回溯法 01背包问题_01背包问题(回溯法)python实现
  18. matlab 极限积分,实验二MATLAB中的极限和微分积分运算
  19. Handling Complexity in the Halo 2 AI
  20. SIM900A模块开发:通过GPRS连接OneNet平台发送GPS信息

热门文章

  1. TAPA认证辅导,TAPA全球委员会正式发布了《运输供应商最低安全要求》
  2. 2017.2.16 开涛shiro教程-第十七章-OAuth2集成(一)服务器端
  3. ContextMenuStrip 菜单的使用技巧
  4. ps字体安装快捷安装方法
  5. 车载电子 || 电池FPC连接片虚焊失效分析
  6. 基于Dragonboard 410c的PMIC简介
  7. msysgit在Windows上的安装,
  8. js日历控件html,jQuery日历插件sys-calendar.js
  9. serialize()序列化
  10. 电阻(4)之上拉电阻与下拉电阻详解