Project

General

Profile

1
Metacat's Use of Geoserver
2
==========================
3

    
4
GeoServer 1.4.0, an open source Web Mapping Service (WMS) written in Java, is 
5
bundled with Metacat and can be used to render spatial data as web-deliverable 
6
maps (see figure). Metacat uses Community MapBuilder (a pure HTML and JavaScript 
7
application that uses AJAX and XSLT) to provide a web-based user interface for 
8
interacting with the generated maps. You can use any WMS-compatible client 
9
(e.g., ArcGIS, QGIS, JUMP, UDig, OpenLayers, Mapbender, Map Builder). Please 
10
note the mapping functionality is only supported for Metacat servlets running 
11
under Tomcat 6 or later. 
12

    
13
IMPORTANT: Regardless of whether you plan on using the mapping functionality 
14
you should, for security purposes, configure GeoServer so that it doesn't 
15
use the default password. For instructions, please see 
16
Geoserver Password Configuration.
17

    
18
.. figure:: images/screenshots/image051.jpg
19
   :align: center
20
   
21
   A map generated by Metacat's GeoServer. Points and "bounding boxes" 
22
   represent the geographic extent of datasets stored in the KNB Metacat repository.
23

    
24
GeoServer supports a wide variety of vector GIS data sources, which can be 
25
styled using Styled Layer Descriptors (SLDs) and output as images (the default) 
26
or raw vector data (GML or KML).
27

    
28
Currently, GeoServer can be used with the following limitations:
29

    
30
* The GeoServer will only map documents that are publicly available. This is 
31
  because the mapping server's support for permissions control is not as 
32
  fine-grained as Metacat's.
33
* The GeoServer can only access documents that conform to one chosen schema. 
34
  This is because only one set of xpaths can be defined in the Metacat properties.
35
* GeoServer 1.4, the version bundled with Metacat, does not support raster 
36
  input (e.g., satellite imagery or digital elevation models). We suggest 
37
  setting up UMN Mapserver if you aim to serve raster data. 
38

    
39
Metacat developers plan to continue extending and improving Metacat's mapping 
40
capabilities. If you are interested in contributing to those efforts, or if 
41
you are interested in learning more about the architecture and future plans for 
42
the mapping software.
43

    
44
Installing and Configuring
45
--------------------------
46
Metacat's GeoServer is automatically installed when Metacat is installed. If 
47
you do NOT wish to run GeoServer, set the runSpatialOption property in the 
48
``metacat.properties`` file (found in the source code's lib directory) to 
49
false before building and deploying Metacat. 
50

    
51
The GeoServer bundled with Metacat comes with a world-countries base layer 
52
and a default configuration that is already aware of Metacat's spatial cache. 
53
To further configure GeoServer, use its Web-based configuration utility, 
54
which is available at: http://your.server.com/context/geoserver.jsp 
55
(e.g., http://knb.ecoinformatics.org/knb/geoserver.jsp). 
56

    
57
Common configuration tasks include:
58

    
59
* Adding a Map to a Web Page or Skin
60
* Configuring the Size and Initial Extent of the Map
61
* Configuring the Layout of the HTML Mapping Interface
62
* Changing the Lat/Long Display to Degree-Minutes-Seconds
63
* Configuring the "Select Location Drop-down Menu
64
* Configuring the Visual Portrayal of Geospatial Data (e.g., symbology and color)
65
* Adding Other Spatial Datasets to the Web Map
66

    
67
.. figure:: images/screenshots/image053.jpg
68
   :align: center
69
   
70
   GeoServer's Web-based administrative interface.
71

    
72
Note: Some configurations may need to be made to the XML files as well.
73

    
74
Community Mabuilder, which Metacat uses as the front-end for GeoServer's WMS 
75
service, provides interface components or "widgets" (e.g., the map, a box zoom, 
76
layer list, "Select Location" drop-down menu, scale bar, lat/long coordinates, 
77
and a query form) that make it easy to deploy highly-functional Web mapping 
78
applications with minimal coding. The WMS layers are configured through a Web 
79
Map Context (WMC) document. This context document can be edited to customize 
80
the initial extent of the map, the ordering and visibility of layers and, of 
81
course, the source and name of the WMS layer.
82

    
83
Mapbuilder has three main configuration files used to customize the map 
84
interface (Table 5.1). If you plan to customize the map interface, you must 
85
use a source code distribution of Metacat. Default configurations are in::
86

    
87
  $METACAT/lib/style/common/spatial_templates/spatial1/
88

    
89
+--------------------------------+-------------+---------------------------------------------------------------------+
90
| Document                       | Location    | Description                                                         |
91
+================================+=============+=====================================================================+
92
| Web map context document (WMC) | context.xml | The WMC is used to customize the initial extent of the map,         |
93
|                                |             | the order of the map layers, and the source and name of each layer. |
94
+--------------------------------+-------------+---------------------------------------------------------------------+
95
| Mapbuilder configuration file  | context.xml | Defines the Mapbuilder widgets and their behavior                   |
96
+--------------------------------+-------------+---------------------------------------------------------------------+
97
| The Map file                   | map.html    | Loads the Mapbuilder JavaScript library and controls the            |
98
|                                |             | HTML layout of the widgets.                                         |
99
+--------------------------------+-------------+---------------------------------------------------------------------+
100

    
101
NOTE: By default, the first time Metacat is restarted, it generates a 
102
"spatial cache" containing geographic information about documents in its 
103
repository. This default behavior is specified in lib/metacat.properties, 
104
where the regenerateCacheOnRestart parameter is set to true. The information 
105
in the spatial cache is stored in a GIS-compatible format (the ESRI Shapefile) 
106
and consists of the document name and its geographic coverage. When documents 
107
are inserted, deleted, and updated in the Metacat repository, Metacat 
108
automatically syncs the spatial cache to reflect the changes. Because 
109
generating the cache can take a considerable amount of time (several minutes 
110
in the case of a few thousand documents), Metacat resets the 
111
regenerateCacheOnRestart property to false after the spatial cache has been 
112
generated. Note that if you upgrade or reinstall Metacat, the spatial cache 
113
will be regenerated again.
114

    
115
Adding a Map to a Web Page or Skin
116
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
117
To add a map to a Web page, simply include the map interface using an iframe:: 
118

    
119
  <iframe scrolling="no" frameborder="0" width="736" height="520" 
120
          src="/knb/style/common/spatial_templates/spatial1/map.html">
121
  </iframe>
122

    
123
The map URL, ``/knb/style/common/spatial_templates/spatial1/map.html``, is 
124
the default map interface. If you plan to customize the map interface, copy 
125
the spatial1 directory into your skin's directory (either the default or 
126
customized skin directory). 
127

    
128
::
129

    
130
  cp -r style/common/spatial_templates/spatial1 /style/skins/<myskin>/spatial
131

    
132
You can access the customized map with the URL: ``/knb/style/skins/<myskin>/spatial/map.html`` 
133

    
134
Configuring the Size and Initial Extent of the Map
135
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
136
Before you configure the size and initial extent of the map, make sure that you 
137
have copied the default spatial settings into your skin's directory (see :doc:`configuration`). 
138
Once the settings have been copied, you can modify the map's initial extent in 
139
the context settings: ``${skin.dir}/spatial/context.xml``. 
140

    
141
To change the map size and/or initial extent, edit the following lines::
142

    
143
  <Window width="720" height="360" />
144
  <BoundingBox SRS="EPSG:4326" minx="-180" miny="-90" maxx="180" maxy="90" />
145

    
146
Where ``width`` and ``height`` specify the map size in pixels, ``minx/maxx`` 
147
represent the range of longitudes and ``miny/maxy`` represent the range of latitudes. 
148

    
149
Configuring the Layout of the HTML Mapping Interface
150
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
151
Before you configure the size and initial extent of the map, make sure that 
152
you have copied the default spatial settings into your skin's directory. 
153
Once the settings have been copied, you can modify the layout here: 
154
``${skin.dir}/spatial/map.html``.
155

    
156
``Map.html`` is a simple HTML file with a tabular layout. Map components are 
157
abstracted into "widgets", blocks with a specific id (e.g., locationsSelect 
158
and mainButtonBar), which can be reorganized within the table. 
159
To customize the map extent and appearance, modify the Web map context 
160
document (``context.xml``) and/or Mapbuilder's configuration file (``config.xml``). 
161
Both files are in the spatial directory inside the skins folder.
162

    
163
Changing the Lat/Long Display to Degree-Minutes-Seconds
164
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
165
By default, the map display shows the cursor's position in decimal degrees 
166
(the preferred format for many GPS/GIS applications). To report coordinates as 
167
degrees minutes-seconds, edit the spatial configuration file:
168

    
169
1. If you have not already copied the default spatial settings into your skin's 
170
   directory, do so now
171
2. Open the ${skin.dir}/spatial/config.xml file.
172
3. Edit the CursorTrack widget so that the content is the following: 
173

    
174
::
175

    
176
  <CursorTrack id="cursorTrack">
177
     <mouseHandler>mainMap</mouseHandler>
178
     <showDMS>true</showDMS>
179
     <showLatLong>true</showLatLong>
180
  </CursorTrack>
181

    
182
4. Save and close the configuration file.
183

    
184
Configuring the "Select Location" Drop-down Menu
185
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
186
Before you configure the menu items, make sure that you have copied the default 
187
spatial settings into your skin's directory. 
188

    
189
The locations that appear in the "Select Location" drop-down menu are specified 
190
in the ``${skin.dir}/spatial/named_locations.xml`` file. Each location is 
191
defined as a ``gml:featureMember``. Edit the featureMember's ``gml:name`` and 
192
``gml:coordinates`` fields to edit or add new locations. 
193

    
194
::
195

    
196
  <gml:featureMember>
197
     <locationDef>
198
          <gml:name>ACM Wilderness Field Station</gml:name>
199
          <spatialKeyword>
200
               <gml:location>
201
                    <gml:Envelope srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
202
                         <gml:coordinates>-91.956,47.87 -91.706,48.12</gml:coordinates>
203
                    </gml:Envelope>
204
               </gml:location>
205
          </spatialKeyword>
206
     </locationDef>
207
  </gml:featureMember> 
208

    
209
Configuring the Visual Portrayal of Geospatial Data (e.g., symbology and color)
210
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
211
Geospatial data sets are styled through the use of Styled Layer Descriptors 
212
(SLD). The default SLDs used for the data points and data bounding boxes are in
213
``/lib/spatial/geoserver/data/styles/`` and are named data_points_style.sld and 
214
data_bounds_style.sld, respectively. 
215

    
216
You can find a more detailed tutorial on using SLD with GeoServer at::
217

    
218
  http://geoserver.org/display/GEOSDOC/SLD+Intro+Tutorial.
219

    
220
Adding Other Spatial Datasets to the Web Map
221
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
222
If you have vector GIS data sets, such as weather or topographical information, 
223
on your server that you'd like to include in the interactive map, you must 
224
first register the data set with GeoServer. After the data set has been 
225
registered, you can add the layer to the map. You can also add spatial layers 
226
that have been made publically available through WMS (There are hundreds of 
227
spatial data sets available. Check out wms-sites.com for good catalog). 
228
Instructions for adding publically available layers are included at the end 
229
of this section. 
230

    
231
To register the data set and add it to the map:
232

    
233
1. Point your browser to http://your.server/context/geoserver.jsp, log in to 
234
   GeoServer, and navigate to the "Data Stores" configuration page 
235
   under Config > Data > Stores. 
236
2. Create a new Shapefile and assign it a DataStore ID. The DataStore ID can 
237
   contain letters and numbers. It is just used internally, and should be 
238
   unique. Click New.
239

    
240
.. figure:: images/screenshots/image055.jpg
241
   :align: center
242
   
243
   Creating a new shapefile using GeoServers web-based administrative interface.
244

    
245
3. On the next screen, select the "metacat" namespace from the drop-down menu 
246
   and point to the GIS data file on the file system, relative to:
247

    
248
   ::
249

    
250
     {tomcat.dir}/webapps/{context}/
251

    
252
   The Description, if specified, is mostly used internally to provide other 
253
   administrators with information about the DataStore. Click Submit.
254

    
255
4. Navigate to the "Feature Type" configuration page under 
256
   Config > Data > Feature Type. Select your new data store from the 
257
   drop-down menu. Click New.
258
5. Style the layer using a style from the drop-down style menu, or click 
259
   "Create new SLD" to create a new Style object and corresponding SLD 
260
   (this option provides more control over the style). You should also define a 
261
   spatial reference system (SRS) number for the new layer. 
262
   Most lat/long data is "4326". If your data is in another projection,
263
   determine its spatial reference system using the help links provided. 
264

    
265
.. figure:: images/screenshots/image057.jpg
266
   :align: center
267
   
268
   GeoServer's FeatureType Editor. The Style and SRS settings discussed in step 5 are highlighted.
269

    
270
6. Click "Apply" and "Save" 
271
7. Try out the styled data set as a WMS layer using a URL like: 
272

    
273
   ::
274

    
275
     http://your.server/context/wms?VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&LAYERS=metacat:newLayer&SRS=EPSG:4326&BBOX=-180,-90,180,90&WIDTH=720&HEIGHT=360&FORMAT=image/gif&STYLES=&TRANSPARENT=TRUE&UNIQUEID= 
276

    
277
   Where your.server/context is the name of your server and context (e.g., 
278
   http://knb.ecoinformatics.org/knb) and newLayer is the name of the new layer. 
279
   The other parameters control which part of the layer is displayed.
280

    
281
   If data is properly displayed, add the map to your map context document (Step 8).
282

    
283
8. Locate the Web map context document (usually {skin}/spatial/context.xml) and 
284
   open the file in a text editor.
285
9. Locate the Layer entry for an existing layer next to which you wish to stack 
286
   your layer (the first layers in the context are rendered at the bottom). 
287

    
288
10. Create a new Layer entry, by copying and pasting the existing entry for the 
289
    metacat data_points layer and editing the Layer Name and Title. The title 
290
    is displayed in the map legend. Note: if you'd like to use transparency, 
291
    leave the image format set to image/gif (IE pre-7 has trouble with PNG 
292
    transparency).
293

    
294
    ::
295
    
296
      <Layer queryable="0" hidden="0">
297
      <Server service="OGC:WMS" version="1.1.1"
298
      title="DatasetPoints">
299
        <OnlineResource xlink:type="simple" xlink:href="../../../../wms" />
300
      </Server>
301
      <Name>metacat:data_points</Name>
302
      <Title>Dataset Points</Title>
303
      <SRS>EPSG:4326</SRS>
304
      <FormatList>
305
        <Format current="1">image/gif</Format>
306
      </FormatList>
307
      </Layer>
308

    
309
11. Point your browser to the map interface. Your new layer should appear with 
310
    the existing ones.
311

    
312
Adding External Spatial Data Made Publically Available through WMS
313
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
314
There are hundreds of sources of spatial data made publically available 
315
through WMS. (check out http://wms-sites.com for good catalog). To add these 
316
data sources to your map, locate your skin's context file 
317
(``${skin.dir}/spatial/context.xml``) and add a new Layer by copying and 
318
pasting an existing Layer and modifying as appropriate: modify the 
319
OnlineResourceURL, Name, Title and Style to match the WMS layer you'd like to 
320
use. See the mapbuilder Add WMS Tutorial for further details.
321

    
322
Spatial Queries
323
---------------
324
To find out which documents in the Metacat repository lie in a specified 
325
geographic region, query the spatial cache using Metacat's spatial_query action. 
326
Metacat can perform any query supported by the WFS/WMS standards.
327

    
328
An example of a spatial query string is::
329

    
330
  http://localhost/knb/metacat?action=spatial_query&xmin=-117.5&xmax=-64&ymin=3&ymax=46&skin=default
331

    
332
Where ``xmin``, ``xmax``, ``ymin`` and ``ymax`` represent the western, eastern, 
333
southern and northern bounding coordinates (the "bounding box"), respectively. 
334
The spatial query action returns all documents that overlap or that are 
335
contained inside the specified spatial coordinates. The result set is returned 
336
as HTML using the style of the specified skin (in this example, default).
337

    
(8-8/20)