图 3‑4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程能够分为五个阶段。图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流。
1) 载入文件类型的数据,配置到外部数据库的连接,通过联接(Join)一个要素源到还有一个要素源扩展要素数据。
2) 通过引用要素源的数据和为要素应用样式创建图层。
3) 将图层结合起来创建地图。
4) 通过Internet或Intrant公布地图,使用户能够通过client浏览地图。
5) 使用MapGuide API为server端和client添加新的功能。
图3‑4 MapGuide应用程序开发流程
在开源版MapGuide的站点上,提供了美国威斯康辛州希博伊根(Sheboygan)县的地图数据(http://download.osgeo.org/mapguide/releases/2.0.0/samples/Sheboygan.mgp)供二次开发者学习和使用。该地图数据是一个MapGuide资源包文件,它使用了zip文件格式,将它的文件后缀名改动为zip后能够使用WinZip或WinRAR等压缩软件将当中的文件提取出来。使用MapGuide站点管理器(Site Administrator)能够载入资源包,将资源包中包括数据、图层、地图等信息一次性地载入到MapGuideserver,详细步骤请參考8.2.6.1。
本节中我们通过将该地图数据公布到Internet,而且加入一个“Hello MapGuide”命令为例来介绍MapGuide的开发流程。为了具体介绍MapGuide的开发流程,我们须要将此资源包解压缩,仅仅使用当中的SDF数据文件。解压缩后该资源包文件后,会在文件夹“/Library/Samples/Sheboygan/Data”找到例如以下SDF文件。当中,“”代表解压缩后文件的根文件夹。
l BuildingOutlines.FeatureSource_DATA_BuildingOutlines.sdf
l CityLimits.FeatureSource_DATA_CityLimits.sdf
l HydrographicLines.FeatureSource_DATA_HydrographicLines.sdf
l HydrographicPolygons.FeatureSource_DATA_HydrographicPolygons.sdf
l Islands.FeatureSource_DATA_Islands.sdf
l LandUse.FeatureSource_DATA_LandUse.sdf
l Parcels.FeatureSource_DATA_Parcels.sdf
l Rail.FeatureSource_DATA_Rail.sdf
l RoadCenterLines.FeatureSource_DATA_RoadCenterLines.sdf
l Soils.FeatureSource_DATA_Soils.sdf
l Trees.FeatureSource_DATA_Trees.sdf
l VotingDistricts.FeatureSource_DATA_VotingDistricts.sdf
1. 载入数据
在创建地图之前,先须要让MapGuideserver可以訪问数据,MapGuide Studio为此提供了三种方法。
l 载入文件类型的数据,如DWG、SHP、SDF或图像文件,这样的方式会将数据上传到MapGuideserver的资源库中,可以较快地訪问数据。
l 配置到SDF、SHP和图像文件的连接,这样的方式仅仅是在MapGuideserver的资源库中保存一个到数据源的链接,能够将数据报存在MapGuideserver或其它计算机上。
l 配置到数据库或Web服务的连接,如Oracle、ArcSDE、SQL Server或WMS。
数据源类型 |
方法 |
Autodesk DWG, DXF |
载入 |
Autodesk DWF |
载入 |
Autodesk SDF |
载入或配置连接 |
SHP (ArcView shapefile) |
载入或配置连接 |
Raster formats (.Bil, .bmp, .cal, .ecw, .jpg/.jpeg, .png, .sid, .tif/.tiff, .tga) |
载入或配置连接 |
ArcSDE database |
配置连接 |
MySQL |
配置连接 |
Microsoft SQL Server |
配置连接 |
ODBC databases (Microsoft Access, Excel etc.) |
配置连接 |
Oracle database |
配置连接 |
Web map service (WMS) |
配置连接 |
Web feature service (WFS) |
配置连接 |
表 3‑1 不同数据类型的訪问方式
本节中我们使用载入的方法,MapGuide Studio提供了载入过程(Load Procedure)来简化数据的载入。载入过程本质上就是一些用于载入数据的脚本,你能够使用载入过程将数据自己主动载入到server。载入过程中定义了原始数据的位置、转化的规则、数据在server上的目标位置等信息。你可周期性地运行载入过程,更新server上文件类型的空间数据库,以保证server上的数据是最新的。
载入Sheboygan地图数据的过程例如以下:
1) 创建资源目录“Samples/Sheboygan”。
为了有效地组织地图数据,我们通常会创建一些资源目录,将不同种类的资源放在不同的目录下。在网站浏览器(Site xplorer)中选中根节点,选择右键菜单“New -> Folder”,就能够创建一个目录。
2) 创建载入过程
选择文件夹“/Library/Samples/Sheboygan/Data”下的全部SDF文件,拖拽它们到网站浏览器(Site Explorer)中资源文件夹“Samples/Sheboygan”,一个新的载入过程面板就出如今网站浏览器右方,它包括了要载入的文件列表,我们也能够加入很多其它文件到这个文件列表中。最后,点击“Load Resources”button,開始载入数据。
在新的载入过程面板中,“How Do You Want To Transform The Data”部分用于选择数据的坐标系。一般而言,仅仅有在数据自身不包括坐标系信息的时候,才须要设置数据的坐标系,本演示样例中无需设置此部分内容。“Where Do You Want To Load The Resources”部分用于选择载入到的目标位置,本演示样例中我们设置它的值为“Library://Samples/Sheboygan”。
图 3‑5 载入过程的用户界面
3) 保存载入过程
假设打算周期性地运行载入过程,更新server上文件类型的空间数据库,以保证server上的数据是最新的,那么须要保存这个新建的载入过程。点击MapGuide Studio工具栏上的“Save”button,保存该载入过程。
2. 创建图层
图3‑6 图层编辑器的用户界面
在使用载入过程载入Sheboygan地图数据时,假设在“Where Do You Want To Load The Resources”部分选中了复选框“Layer(s)”,那么载入过程会在载入数据的同一时候创建图层。假设没有选中复选框“Layer(s)”,那么能够使用MapGuide Studio的图层编辑器能够创建一个图层。在图层编辑器中,我们能够为图层创建样式,也能够预览图层数据,它的用户界面如图 3‑6所看到的。
载入Sheboygan地图数据创建图层的过程例如以下:
1) 创建资源目录“Samples/Sheboygan/Layers”。
右键点击网站浏览器的目录“Samples/Sheboygan”,选择菜单“New->Folder”创建资源目录“Layers”。
2) 创建图层
首先,右键点击新建资源目录“Layers”,选择菜单“New->Layer”打开图层编辑器。然后,在“Data resource used in this layer”部分,选择资源目录“Samples/Sheboygan/Data”下的数据。
3) 保存图层
点击MapGuide Studio工具栏上的“Save”button,保存该图层到资源目录“Samples/Sheboygan/Layers”中。
如此重复,为资源目录“Samples/Sheboygan/Data”下的每一个数据创建一个图层。
3. 创建地图
一张地图能够由一个或多个图层组成,同一时候多张地图能够包括同一个图层,使用地图编辑器能够创建和编辑一张地图。为了有效地组织地图中的图层,我们还常常将多个图层组织成一个图层组。
载入Sheboygan地图数据创建地图的过程例如以下:
1) 创建资源目录“Samples/Sheboygan/Maps”。
右键点击网站浏览器的目录“Samples/Sheboygan”,选择菜单“New->Folder”创建资源目录“Maps”。
2) 创建地图
首先,右键点击新建资源目录“Maps”,选择菜单“New->Map”打开图层编辑器。然后,在“Layers”部分,点击button创建一个图层组“Base Map”。接着,选中新建的图层组,点击button加入选择资源目录“Samples/Sheboygan/Layers”的图层到该图层组。反复此操作,加入如图 3‑7所看到的的图层组和图层。
对于“Setting”部分的内容,一般不须要改动。MapGuide Studio会将地图的坐标系(Coordinate System)设置为第一个增加的、带坐标系的图层的坐标系,而且会依据增加图层的范围(Extent)自己主动设置和改动地图的初始视图范围(Initial View)。
3) 保存地图
点击MapGuide Studio工具栏上的“Save”button,将该地图命名为“Sheboygan”,保存到资源目录“Samples/Sheboygan/Maps”中。
图3‑7 地图编辑器的用户界面
4. 创建Web布局
当创建了一张地图之后,你须要创建一个基本Web布局或灵活Web布局用于定义MapGuide Viewer的用户界面和可用的操作,这样用户才可以通过Internet或Intranet浏览和操作地图。基本Web布局支持DWF Viewer和AJAX Viewer,它是一种比較老的Web布局,提供了比較有限的功能定制Viewer的用户界面。灵活Web布局是一个基于Fusion的Web布局,它使用模板来定义Viewer的用户界面,用户可以使用MapGuide Studio改动这些模板,它为用户定制MapGuide Viewer的用户界面提供了很大的灵活性。眼下,灵活Web布局仅仅支持Fusion Viewer。本节中,我们将分别为Sheboygan地图创建一个基本Web布局和灵活Web布局。
为Sheboygan地图创建基本Web布局的过程例如以下:
1) 创建资源目录“Samples/Sheboygan/Layouts”。
右键点击网站浏览器的目录“Samples/Sheboygan”,选择菜单“New->Folder”创建资源目录“Layouts”。
2) 创建基本Web布局
首先,右键点击新建资源目录“Layouts”,选择菜单“New->Web Layout->Basic Web Layout”打开基本Web布局编辑器。然后,在“Map resource used in this layout”部分,选择在Web布局中显示的地图,一个基本Web布局仅仅能显示一张地图。本例中,我们选择资源目录“Samples/Sheboygan/Maps”下的地图“Sheboygan”。
我们能够依据须要改动“Setting”和“Toolbar and Menus”部分的内容,比如“Text for browser title bar”能够用于设置浏览器中打开Viewer时标题栏中显示的标题,“Display these components in the Viewer”用于设置Viewer中显示那些组件。
3) 保存基本Web布局
点击MapGuide Studio工具栏上的“Save”button,将该Web布局命名为“Basic Web Layout”,保存到资源目录“Samples/Sheboygan/Layouts”中。
4) 预览Web布局
点击“Preview in browser using DWF Viewer”文本框右边的“Go”button能够使用DWF Viewer在浏览器中预览Web布局;点击“Preview in browser using AJAX Viewer”文本框右边的“Go”button能够使用AJAX Viewer在浏览器中预览Web布局。用户也能够将文本框中的URL复制到浏览器的地址栏中,从而预览此Web布局。
须要注意的是,假设要在浏览器中预览Web布局,必须保存过该Web布局,浏览器中预览的是最后一个版本号的Web布局。假设希望在没有保存Web布局之前预览该Web布局,仅仅能使用Web布局编辑器的“Web Preview”,点击button就可以预览它。
图 3‑8 基本Web布局编辑器的用户界面
为Sheboygan地图创建灵活Web布局的步骤与创建基本Web布局的步骤基本同样,例如以下:
1) 创建资源目录“Samples/Sheboygan/ FlexibleLayouts”。
右键点击网站浏览器的目录“Samples/Sheboygan”,选择菜单“New->Folder”创建资源目录“FlexibleLayouts”。
2) 创建灵活Web布局
首先,右键点击新建资源目录“FlexibleLayouts”,选择菜单“New->Web Layout->Flexible Web Layout”打开灵活Web布局编辑器。然后,在“Select a template for the web layout”部分,为Web布局选择一个模板,不同的模板定义了不同的Fusion Viewer的用户界面风格。接着,选中“Config components of the selected components”部分的“Map”标签,在“Map resource used in this layout”部分选择资源目录“Samples/Sheboygan/Maps”下的地图“Sheboygan”。
我们能够依据须要改动“Config components of the selected components”部分的内容,从而定制任务窗格、工具栏、图例、右键菜单、选择窗格、状态栏用户界面组件。
3) 保存灵活Web布局
点击MapGuide Studio工具栏上的“Save”button,将该Web布局命名为“Aqua”,保存到资源目录“Samples/Sheboygan/ FlexibleLayouts”中。
4) 预览Web布局
点击button“View in Browser…”,能够使用Fusion Viewer在浏览器中预览Web布局。用户也能够将文本框中的URL复制到浏览器的地址栏中,从而预览此Web布局。
与基本Web布局同样,假设要在浏览器中预览Web布局,必须保存过该Web布局。假设希望在没有保存Web布局之前预览该Web布局,仅仅能使用Web布局编辑器的“Web Preview”,点击button就可以预览它。
图 3‑9 灵活Web布局编辑器的用户界面
5. 创建MapGuide应用程序
记得在学习很多编程语言的时候,教授的第一个程序大多是“Hello, World!”,如今让我们也体验一下怎样使用MapGuide实现你的第一个MapGuide应用程序——“Hello, MapGuide!”。 图3‑10显示了这个程序在AJAX Viewer中的执行效果,点击“Hello MapGuide”button,就会弹出一个对话框显示字符串“Hello, MapGuide!”。
对于基本Web布局和灵活Web布局,实现上述功能的步骤不尽同样,以下我们分别介绍怎样在基本Web布局和灵活Web布局中实现这些功能。
图3‑10 “你好,MapGuide!”程序演示样例在AJAX Viewer中的执行效果
5.1 在基本Web布局中创建“你好,MapGuide!”程序
在基本Web布局中创建“你好,MapGuide!”程序须要下面三步:
1) 创建自己定义命令“Hello MapGuide”。
MapGuide支持两类自己定义命令“Invoke JavaScript”和“Invoke URL”。“Invoke JavaScript”用于调用JavaScript脚本,这写JavaScript脚本有浏览器直接执行,主要用于和Viewer进行交互,可以调用Viewer API,属于client命令;“Invoke URL”用于调用PHP、ASP.NET或JSP编写的Webserver扩展页面(Web Server Extensions Page),这些Webserver扩展页面可以调用MapGuide Web API,属于Webserver端命令。
本节中,我们将使用“Invoke JavaScript”调用JavaScript函数alert(…)弹出一个“Hello, MapGuide!”对话框。
首先,在网站浏览器中选择一个之前创建的基本Web布局,双击此节点打开基本Web布局编辑器。然后,点击基本Web布局编辑器头部的超链接“New Commands”,打开如图3‑11所看到的的用户界面。接着,点击下拉button“Add -> Invoke Script”创建一个“Invoke Script”类型的命令。最后,在“Additional Parameters”标签页中输入JavaScript脚本“alert("Hello, MapGuide!");”。
普通情况下,我们还会为每一个命令赋予一个有意义的名称、图标、工具提示等,在“Setting”标签页中能够改动这些命令属性。本节中,我们将此命令命名为“Hello MapGuide”,设置工具提示为“Hello MapGuide”,图标为默认图标。
图3‑11 基本Web布局用于创建命令的用户界面
2) 将“Hello MapGuide”命令加入到MapGuide Viewer的工具栏。
要调用这个新建的命令,须要将这个命令放置在工具栏、上下文菜单或任务栏菜单。本节中,我们将这个新建的命令放置在工具栏上。
首先,点击基本Web布局编辑器头部的超链接“Toolbar and Menus”,打开如图3‑12所看到的的用户界面。接着,将右面命令列表中的“Hello MapGuide”命令拖拽到左面的工具栏树形列表中。
图3‑12 加入命令到Viewer工具栏的用户界面
3) 保存改动后的Web布局。
保存改动的Web布局后,拷贝“Preview in browser using DWF Viewer”文本框或“Preview in browser using AJAX Viewer”文本框中的URL复制到浏览器的地址栏中,就能够使用DWF Viewer或AJAX Viewer在浏览器中执行该应用程序了。
5.2 在灵活Web布局中创建“你好,MapGuide!”程序
灵活Web布局提供了一系列Widget以实现一些通用的功能,通过对这些Widget进行简单的定制能够满足用户某些特定的需求,比如它提供了“Invoke Script”和“Invoke URL”Widget,这两个Widget能够实现和基本Web布局中“Invoke Script”和“Invoke URL”命令同样的功能。本节中,我们使用“Invoke Script”Widget实现“你好,MapGuide!”程序。
在灵活Web布局中创建“你好,MapGuide!”程序须要下面三步:
1) 创建“Hello MapGuide”组件。
首先,在网站浏览器中选择一个之前创建的灵活Web布局,双击此节点打开灵活Web布局编辑器,展开“Config components of the selected template”会显示如图3‑13所看到的的用户界面。然后,选择“Toolbar (Primary)”标签页,点击“Components available in this layout”部分的button“New”,会弹出如图3‑14所看到的的对话框。接着,选择“Invoke Script”组件,点击“OK”button将它增加当前Web布局。最后,在“Parameters for the selected item”部分的“ID”文本框中输入新建组件的ID“Hello MapGuide”,“Script to invoke”文本框中输入JavaScript脚本“alert("Hello, MapGuide!");”。假设须要,还能够设置组件的工具提示、图标等属性信息。
图3‑13 灵活Web布局用于Viewer中组件的用户界面
图3‑14 灵活Web布局用于创建新组件的用户界面
2) 将“Hello MapGuide”命令加入到Fusion Viewer的工具栏。
在“Components available in this layout”中选中新建的“Hello MapGuide”组件,拖拽该组件到左面的“Items disaplayed in the container”列表中。
3) 保存改动后的Web布局。
保存改动的Web布局后,拷贝“Web address of this layout”文本框中的URL到浏览器的地址栏中,就能够使用Fusion Viewer在浏览器中执行该应用程序了,执行结果如图 3‑15所看到的。
图3‑15 “你好,MapGuide!”程序演示样例在Fusion Viewer中的执行效果