:orphan:

.. _example1-3:

===========
Example 1.3
===========

Displaying Classes in a Layer
-----------------------------

By using non-spatial attribute information in the data, we can create
a map like this:

.. image:: https://demo.mapserver.org/cgi-bin/mapserv?map=/osgeo/mapserver/tutorial/htdocs/example1-3.map&layer=states_poly&layer=states_line&mode=map

MapFile Structure
#################

This is what the mapfile looks like: :ref:`Example1-3.map <example1-3-map>`.

The mapfile structure, by objects, looks like this::

                               MAP
   (states_poly) LAYER----------|---------LAYER (states_line)
                  |                        |
   (land) CLASS---|---CLASS (water)        |-CLASS
             |         |                      |
       STYLE-|         |-STYLE                |-STYLE

Keywords
********

Our mapfile still only has two layers but the polygon layer has been
broken down into two classes.  Let's have a look at the additional
parameters:

**CLASSITEM**
   This keyword is used to specify what attribute to use in separating
   the class objects.  In this example that attribute is "CLASS".  If
   you open the database file associated with this layer's shapefile,
   you'll see that there's a column (attribute) called "CLASS".

   How do we know which attribute to use?  Well, database records in
   shapefiles are stored in DBF files.  You can open it in a
   spreadsheet program such as Openoffice.org's Calc, or in a desktop
   GIS software such as QGIS, Thuban, or ArcView.  If your data came
   with a metadata (and it should!), you can skim through through that
   metadata file for attribute information.  You can also use
   "ogrinfo" to display basic attribute info in your shapefiles--look
   back at example 1.1 (the last few lines after "Layer SRS WKT:" show
   the attribute names and types).

**EXPRESSION**
   For each class, we specify what attribute value to use.  This is
   the simplest form of EXPRESSION.  EXPRESSIONs can be even more
   complex than this, allowing one to evaluate regular or logical
   expressions.  Please look at :ref:`expressions` in the mapfile
   reference to see what you can do with EXPRESSION.

----

:ref:`Back to Example 1.2 <example1-2>` | :ref:`Proceed to Example 1.4 <example1-4>`
