转 MapGuide应用程序示例——你好,MapGuide!
图 3‑4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程可以分为五个阶段。图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流。
1) 加载文件类型的数据,配置到外部数据库的连接,通过联接(Join)一个要素源到另一个要素源扩展要素数据。
2) 通过引用要素源的数据和为要素应用样式创建图层。
3) 将图层结合起来创建地图。
4) 通过Internet或Intrant发布地图,使用户可以通过客户端浏览地图。
5) 使用MapGuide API为服务器端和客户端增加新的功能。
在开源版MapGuide的网站上,提供了美国威斯康辛州希博伊根(Sheboygan)县的地图数据(http://download.osgeo.org/mapguide/releases/2.0.0/samples/Sheboygan.mgp)供二次开发人员学习和使用。该地图数据是一个MapGuide资源包文件,它使用了zip文件格式,将它的文件后缀名修改为zip后可以使用WinZip或WinRAR等压缩软件将其中的文件提取出来。使用MapGuide站点管理器(Site Administrator)可以加载资源包,将资源包中包含数据、图层、地图等信息一次性地加载到MapGuide服务器,具体步骤请参考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. 加载数据
在创建地图之前,先需要让MapGuide服务器能够访问数据,MapGuide Studio为此提供了三种方法。
l 加载文件类型的数据,如DWG、SHP、SDF或图像文件,这种方式会将数据上传到MapGuide服务器的资源库中,能够较快地访问数据。
l 配置到SDF、SHP和图像文件的连接,这种方式只是在MapGuide服务器的资源库中保存一个到数据源的链接,可以将数据报存在MapGuide服务器或其他计算机上。
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)来简化数据的加载。加载过程本质上就是一些用于加载数据的脚本,你可以使用加载过程将数据自动加载到服务器。加载过程中定义了原始数据的位置、转化的规则、数据在服务器上的目标位置等信息。你可周期性地执行加载过程,更新服务器上文件类型的空间数据库,以保证服务器上的数据是最新的。
加载Sheboygan地图数据的步骤如下:
1) 创建资源文件夹“Samples/Sheboygan”。
为了有效地组织地图数据,我们一般会创建一些资源文件夹,将不同种类的资源放在不同的文件夹下。在站点浏览器(Site xplorer)中选中根节点,选择右键菜单“New -> Folder”,就可以创建一个文件夹。
2) 创建加载过程
选择目录“/Library/Samples/Sheboygan/Data”下的所有SDF文件,拖拽它们到站点浏览器(Site Explorer)中资源文件夹“Samples/Sheboygan”,一个新的加载过程面板就出现在站点浏览器右方,它包含了要加载的文件列表,我们也可以添加更多文件到这个文件列表中。最后,点击“Load Resources”按钮,开始加载数据。
在新的加载过程面板中,“How Do You Want To Transform The Data”部分用于选择数据的坐标系。一般而言,只有在数据自身不包含坐标系信息的时候,才需要设置数据的坐标系,本示例中无需设置此部分内容。“Where Do You Want To Load The Resources”部分用于选择加载到的目标位置,本示例中我们设置它的值为“Library://Samples/Sheboygan”。
图 3‑5 加载过程的用户界面
3) 保存加载过程
如果打算周期性地执行加载过程,更新服务器上文件类型的空间数据库,以保证服务器上的数据是最新的,那么需要保存这个新建的加载过程。点击MapGuide Studio工具栏上的“Save”按钮,保存该加载过程。
2. 创建图层
在使用加载过程加载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”按钮,保存该图层到资源文件夹“Samples/Sheboygan/Layers”中。
如此反复,为资源文件夹“Samples/Sheboygan/Data”下的每个数据创建一个图层。
3. 创建地图
一张地图可以由一个或多个图层组成,同时多张地图可以包含同一个图层,使用地图编辑器可以创建和编辑一张地图。为了有效地组织地图中的图层,我们还经常将多个图层组织成一个图层组。
加载Sheboygan地图数据创建地图的步骤如下:
1) 创建资源文件夹“Samples/Sheboygan/Maps”。
右键点击站点浏览器的文件夹“Samples/Sheboygan”,选择菜单“New->Folder”创建资源文件夹“Maps”。
2) 创建地图
首先,右键点击新建资源文件夹“Maps”,选择菜单“New->Map”打开图层编辑器。然后,在“Layers”部分,点击按钮创建一个图层组“Base Map”。接着,选中新建的图层组,点击按钮添加选择资源文件夹“Samples/Sheboygan/Layers”的图层到该图层组。重复此操作,加入如图 3‑7所示的图层组和图层。
对于“Setting”部分的内容,一般不需要修改。MapGuide Studio会将地图的坐标系(Coordinate System)设置为第一个加入的、带坐标系的图层的坐标系,并且会根据加入图层的范围(Extent)自动设置和修改地图的初始视图范围(Initial View)。
3) 保存地图
点击MapGuide Studio工具栏上的“Save”按钮,将该地图命名为“Sheboygan”,保存到资源文件夹“Samples/Sheboygan/Maps”中。
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”按钮,将该Web布局命名为“Basic Web Layout”,保存到资源文件夹“Samples/Sheboygan/Layouts”中。
4) 预览Web布局
点击“Preview in browser using DWF Viewer”文本框右边的“Go”按钮可以使用DWF Viewer在浏览器中预览Web布局;点击“Preview in browser using AJAX Viewer”文本框右边的“Go”按钮可以使用AJAX Viewer在浏览器中预览Web布局。用户也可以将文本框中的URL拷贝到浏览器的地址栏中,从而预览此Web布局。
需要注意的是,如果要在浏览器中预览Web布局,必须保存过该Web布局,浏览器中预览的是最后一个版本的Web布局。如果希望在没有保存Web布局之前预览该Web布局,只能使用Web布局编辑器的“Web Preview”,点击按钮即可预览它。
图 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”按钮,将该Web布局命名为“Aqua”,保存到资源文件夹“Samples/Sheboygan/ FlexibleLayouts”中。
4) 预览Web布局
点击按钮“View in Browser…”,可以使用Fusion Viewer在浏览器中预览Web布局。用户也可以将文本框中的URL拷贝到浏览器的地址栏中,从而预览此Web布局。
与基本Web布局相同,如果要在浏览器中预览Web布局,必须保存过该Web布局。如果希望在没有保存Web布局之前预览该Web布局,只能使用Web布局编辑器的“Web Preview”,点击按钮即可预览它。
图 3‑9 灵活Web布局编辑器的用户界面
5. 创建MapGuide应用程序
记得在学习许多编程语言的时候,教授的第一个程序大多是“Hello, World!”,现在让我们也体验一下如何使用MapGuide实现你的第一个MapGuide应用程序——“Hello, MapGuide!”。 图3‑10显示了这个程序在AJAX Viewer中的运行效果,点击“Hello MapGuide”按钮,就会弹出一个对话框显示字符串“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,属于客户端命令;“Invoke URL”用于调用PHP、ASP.NET或JSP编写的Web服务器扩展页面(Web Server Extensions Page),这些Web服务器扩展页面可以调用MapGuide Web API,属于Web服务器端命令。
本节中,我们将使用“Invoke JavaScript”调用JavaScript函数alert(…)弹出一个“Hello, MapGuide!”对话框。
首先,在站点浏览器中选择一个之前创建的基本Web布局,双击此节点打开基本Web布局编辑器。然后,点击基本Web布局编辑器头部的超链接“New Commands”,打开如图3‑11所示的用户界面。接着,点击下拉按钮“Add -> Invoke Script”创建一个“Invoke Script”类型的命令。最后,在“Additional Parameters”标签页中输入JavaScript脚本“alert(“Hello, MapGuide!”);”。
一般情况下,我们还会为每个命令赋予一个有意义的名称、图标、工具提示等,在“Setting”标签页中可以修改这些命令属性。本节中,我们将此命令命名为“Hello MapGuide”,设置工具提示为“Hello MapGuide”,图标为默认图标。
2) 将“Hello MapGuide”命令添加到MapGuide Viewer的工具栏。
要调用这个新建的命令,需要将这个命令放置在工具栏、上下文菜单或任务栏菜单。本节中,我们将这个新建的命令放置在工具栏上。
首先,点击基本Web布局编辑器头部的超链接“Toolbar and Menus”,打开如图3‑12所示的用户界面。接着,将右面命令列表中的“Hello MapGuide”命令拖拽到左面的工具栏树形列表中。
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”部分的按钮“New”,会弹出如图3‑14所示的对话框。接着,选择“Invoke Script”组件,点击“OK”按钮将它加入当前Web布局。最后,在“Parameters for the selected item”部分的“ID”文本框中输入新建组件的ID“Hello MapGuide”,“Script to invoke”文本框中输入JavaScript脚本“alert(“Hello, MapGuide!”);”。如果需要,还可以设置组件的工具提示、图标等属性信息。
图 3‑13 灵活Web布局用于Viewer中组件的用户界面
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所示。