.. index::
   single: Mapfile

.. _mapfile:

*****************************************************************************
 Mapfile
*****************************************************************************

:Author: Steve Lime
:Contact: steve.lime at dnr.state.mn.us
:Author: Jeff McKenna
:Contact: jmckenna at gatewaygeomatics.com
:Last Updated: 2017-06-16

The Mapfile is the heart of MapServer.  It defines the relationships
between objects, points MapServer to where data are located and
defines how things are to be drawn.

The Mapfile consists of a :ref:`MAP` object, which has to start with
the word `MAP`.

There are some important concepts that you must understand before you
can reliably use mapfiles to configure MapServer.  First is the
concept of a :ref:`LAYER`.  A layer is the combination of data plus
styling.  Data, in the form of attributes plus geometry, are given
styling using :ref:`CLASS` and :ref:`STYLE` directives.

.. seealso::
    :ref:`introduction` for "An Introduction to the Mapfile"

.. toctree::
   :maxdepth: 1

   symbology/construction
   class
   cluster
   composite
   encoding
   expressions
   feature
   fontset
   geomtransform
   grid
   include
   join
   label
   layer
   leader
   legend
   map
   outputformat
   projection
   querymap
   reference
   scalebar
   style
   styleitem
   symbol
   symbology/examples
   template
   validation
   union
   web
   xml_mapfile


Notes
-----------------------------------------------------------------------------

* The Mapfile is NOT case-sensitive.

* The ``Mapfile is read from top to bottom by MapServer``; this means
  that LAYERs near the top of your Mapfile will be drawn before those
  near the bottom.  Therefore users commonly place background imagery
  and other background layer types near the top of their mapfile, and
  lines and points near the bottom of their mapfile.

* Strings containing non-alphanumeric characters or a MapServer
  keyword MUST be quoted. It is recommended to put ALL strings in
  double-quotes.

* Mapfiles are expected to be UTF-8 encoded. Non UTF-8 encoded
  mapfiles will need to be iconv’ed to UTF-8.

  .. versionadded:: 7.0

* For MapServer versions < 5, there was a default maximum of 200
  layers per mapfile (there is no layer limit with MapServer >= 5).
  This can be changed by editing the map.h file to change the value of
  MS_MAXLAYERS to the desired number and recompiling.  Here are other
  important default limits when using a MapServer version < 5:

  .. index::
     single: MAXCLASSES

  * MAXCLASSES 250 (set in map.h)

  .. index::
     single: MAXSTYLES

  * MAXSTYLES 5 (set in map.h)

  .. index::
     single: MAXSYMBOLS

  * MAXSYMBOLS 64 (set in mapsymbol.h)

  MapServer versions >= 5 have no limits for classes, styles, symbols,
  or layers.

.. index::
   single: File paths

* File paths may be given as absolute paths, or as paths relative to
  the location of the mapfile. In addition, data files may be
  specified relative to the SHAPEPATH.

* The mapfile has a hierarchical structure, with the MAP object being
  the "root". All other objects fall under this one.

.. index::
   single: Comments

* Comments are designated with a #.

* Attributes are named using the following syntax: [ATTRIBUTENAME].

  .. note::

    that the name of the attribute included between the square
    brackets *IS CASE SENSITIVE*. Generally ESRI generated shape data
    sets have their attributes (.dbf column names) all in upper-case
    for instance, and for PostGIS, *ALWAYS* use lower-case.

.. index::
   single: Regular expressions

* MapServer Regular Expressions are used through the operating
  system's C Library.  For information on how to use and write Regular
  Expressions on your system, you should read the documentation
  provided with your C Library.  On Linux, this is GLibC, and you can
  read "man 7 regex" ... This man page is also available on most
  UNIX's. Since these RegEx's are POSIX compliant, they should be the
  same on Windows as well, so windows users can try searching the web
  for "man 7 regex" since man pages are available all over the web.
