diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 642280c9bc2..a515cc164d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: ./scripts/ci_build_docs.sh - name: After success steps - if: ${{ success() && github.event_name == 'push' && github.repository == 'MapServer/MapServer-documentation' && github.ref_name == 'branch-8-4' }} + if: ${{ success() && github.event_name == 'push' && github.repository == 'MapServer/MapServer-documentation' && github.ref_name == 'branch-8-6' }} run: | # setup the SSH key mkdir -p ~/.ssh diff --git a/_static/foss4g2026.png b/_static/foss4g2026.png new file mode 100644 index 00000000000..6607fbed4f2 Binary files /dev/null and b/_static/foss4g2026.png differ diff --git a/_templates/indexsidebar.html b/_templates/indexsidebar.html index 121909740e8..38c9144c704 100644 --- a/_templates/indexsidebar.html +++ b/_templates/indexsidebar.html @@ -16,8 +16,8 @@

Navigation

MapServer is a project of the Open Source Geospatial Foundation.

- - FOSS4G + + FOSS4G

If you find MapServer useful, please consider supporting the team with a donation:

diff --git a/_templates/layout.html b/_templates/layout.html index d5cf09d80df..8f360cf4172 100644 --- a/_templates/layout.html +++ b/_templates/layout.html @@ -16,7 +16,7 @@

DOCS PREVIEW

Home | Products | - Issue Tracker | + Issue Tracker | Service Providers | FAQ | Mastodon | @@ -60,7 +60,7 @@

Community Mailing Lists
IRC chat
- Wiki + Wiki

Development


Documentation

@@ -71,6 +71,6 @@

Documentation< MapScript

Downloads


-

Issue Tracker


+

Issue Tracker


{{ super() }} {% endblock %} diff --git a/conf.py b/conf.py index e113d98500b..3a1b9f30788 100644 --- a/conf.py +++ b/conf.py @@ -50,7 +50,7 @@ def __getattr__(cls, name): #extensions = ['labels', 'sphinxcontrib.spelling'] extensions = ['labels', 'sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'sphinx.ext.viewcode' - , 'sphinxcontrib.jquery', 'sphinx_copybutton'] + , 'sphinxcontrib.jquery', 'sphinx_copybutton', 'sphinx_collapse'] autosummary_generate = True # when True create a page for each mapscript class @@ -85,16 +85,16 @@ def __getattr__(cls, name): # General information about the project. project = u'MapServer' -copyright = u'2025, Open Source Geospatial Foundation' +copyright = u'2026, Open Source Geospatial Foundation' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '8.4' +version = '8.6' # The full version, including alpha/beta/rc tags. -release = '8.4.1' +release = '8.6.4' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None @@ -128,6 +128,21 @@ def __getattr__(cls, name): # check for broken reference targets nitpicky = True +# spelling extension options +# -------------------------- + +# set filename used by spelling extension +spelling_word_list_filename='spelling_wordlist.dict' + +# ignore changelogs and RFCs +spelling_exclude_patterns = [ + 'development/changelog/*', + 'development/changelog/mapcache/*', + 'development/changelog/tinyows/*', + 'development/rfc/*', + 'mapscript/php/*' +] + # Options for HTML output # ----------------------- @@ -231,6 +246,24 @@ def __getattr__(cls, name): # this can be set as a sphinx-build option using `-A BRANCH=main` html_context = {'branch': release} +# linkcheck options +# ----------------- + +linkcheck_exclude_documents = [ + r'.*/changelog/.*', + r'.*/rfc/.*', + r'.*/announce/.*', + r'.*/announcements/.*' +] + +linkcheck_ignore = [ + r'https?://localhost(?:\:\d+)?(?:/.*)?$', + r'https?://127\.0\.0\.1(?:\:\d+)?(?:/.*)?$', + r'https?://myserver(?:\:\d+)?(?:/.*)?$', + r'https?://server(?:\:\d+)?(?:/.*)?$', + r'https?://example.com(?:\:\d+)?(?:/.*)?$' +] + # Options for LaTeX output # ------------------------ @@ -452,7 +485,8 @@ class MapFileLexer(RegexLexer): (r'\s+', Text), (r'\[.*?\]', Name.Other), (r'[{}\[\]();,-.]+', Punctuation), - (r'#.*', Comment), + (r'#.*', Comment.Single), + (r'/\*', Comment.Multiline, 'comment'), (r'(AND|OR|NOT|EQ|GT|LT|GE|LE|NE|IN|IEQ)\b', Operator.Word), (r'!=|==|<=|>=|=~|&&|\|\||[-~+/*%=<>&^|./\$]', Operator), ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'), @@ -469,6 +503,12 @@ class MapFileLexer(RegexLexer): (r'[0-9]+', Number.Integer) ], + 'comment': [ + (r'[^*/]+', Comment.Multiline), + (r'/\*', Comment.Multiline, '#push'), + (r'\*/', Comment.Multiline, '#pop'), + (r'[*/]', Comment.Multiline), + ], 'dqs': [ (r'"', String, '#pop'), (r'\\\\|\\"|\\\n', String.Escape), # included here again for raw strings diff --git a/en/MIGRATION_GUIDE.txt b/en/MIGRATION_GUIDE.txt index 1e9636b9ef4..0b844b3b64e 100644 --- a/en/MIGRATION_GUIDE.txt +++ b/en/MIGRATION_GUIDE.txt @@ -6,21 +6,182 @@ MapServer Migration Guide ***************************************************************************** -:Last Updated: 2025-09-22 +:Last Updated: 2026-05-07 .. contents:: Table of Contents :depth: 2 :backlinks: top +.. tip:: + + Review MapServer's `Security Policy `__, + and also check if there are any recently published `vulnerabilities `__. + +.. _migration-8-6: + +MapServer 8.4 to 8.6 Migration +============================== + +- The 8.6.4 release includes fixes for two vulnerabilities, see the advisories: + + - `OpenLayers viewer with WMS `__ advisory + - `PostGIS support `__ advisory + +- The 8.6.3 release includes a fix for a vulnerability in the SLD parser + (see MapServer's `Security Advisory `__) + + Reminder: you can also disable external SLD access for your WMS services + by setting the following in your mapfile: + + .. code-block:: mapfile + + MAP + ... + WEB + METADATA + "wms_sld_enabled" "false" + ... + END #metadata + END #web + ... + + +- The 8.6.2 release includes a fix for a vulnerability in the OpenLayers viewer + (see MapServer's `Security Advisory `__) + +- The 8.6.1 release includes a fix for a vulnerability in the SLD parser + (see CVE record: `CVE-2026-33721 `__, + or see MapServer's `Security Advisory `__) + +- You can now enable an automatically generated index page, that lists + all of your OGC services and endpoints, for each mapfile that you + defined in your CONFIG file. To enable the index, add `MS_INDEX_TEMPLATE_DIRECTORY` + to your environment variables section of the :ref:`config` file, such as:: + + ENV + # + # Index page + # + MS_INDEX_TEMPLATE_DIRECTORY "/ms4w/share/ogcapi/templates/html-index-bootstrap/" + END + + .. image:: ./images/index-page-ms4w.png + :width: 800 + :height: 433 + :class: no-scaled-link + + .. seealso:: :ref:`index-page` & :ref:`rfc140` + +- A new :ref:`identify` object can be used in a mapfile to control how features are + found through queries, to account for the actual symbol being used for + that CLASS. This could be useful for WMS GetFeatureInfo requests. + + .. code-block:: mapfile + + MAP + ... + WEB + METADATA + "wms_title" "My WMS Server" + ... + END #metadata + END #web + ... + SYMBOL + NAME "mysvg" + TYPE svg + IMAGE "./ttt.svg" + END #symbol + ... + LAYER + IDENTIFY + CLASSGROUP "test" + END #identify + CLASS + GROUP "test" + STYLE + ANGLE 30 + SYMBOL "mysvg" + END #class + END #layer + ... + END #map + + .. seealso:: original Pull Request `#7318 `__ + +- :ref:`FALLBACK ` has been added to the CLASS object, to allow that class to be used + if no other class can be applied. + + .. code-block:: mapfile + + MAP + ... + LAYER + ... + CLASS + NAME "test1" + ... + END #class + CLASS + NAME "test2" + ... + END #class + CLASS + NAME "test3" + ... + FALLBACK TRUE + END #class + END #layer + ... + END #map + + .. seealso:: original Pull Request `#7309 `__ + +- :ref:`ogcapi` has been enhanced to allow the appending of additional + query parameters to all URLs generated through the API, by + defining the `ows_extra_params` parameter in the mapfile's WEB.METADATA object. + + .. code-block:: mapfile + + MAP + ... + WEB + METADATA + "ows_title" "My OGCAPI Server" + ... + "oga_html_template_directory" "../../share/ogcapi/templates/html-bootstrap/" + "ows_extra_params" "token=123" + END #metadata + END #web + ... + LAYER + ... + END #layer + END #map + + All subsequent URLs available through OGCAPI: Features will contain that + `token=123`, such as:: + + http://127.0.0.1/cgi-bin/mapserv.exe/local-demo/ogcapi/collections/ocean/items?f=json&token=123 + + .. TIP:: + For sensitive parameter values, you should enable :ref:`Run-time Substitution ` to + not store passwords and other tokens in mapfiles. See steps at :ref:`OGCAPI: Features metadata `. + + .. seealso:: original Pull Request `#7360 `__ + .. _migration-8-4: MapServer 8.2 to 8.4 Migration ============================== -- The 8.4.1 release includes a fix for a security flaw for WFS filter requests to +- The 8.4.1 release includes a fix for a vulnerability for WFS filter requests to an OGR backend connection (see CVE record: `CVE-2025-59431 `__, or MapServer's `Security Advisory `__) +- MapServer now requires at least `CMake `__ version 3.16 + for building + - you can now build against the PCRE2 library (WITH_PCRE2=ON) - reminder that since the PROJ 9.1 release, the former `PROJ_LIB` variable has @@ -148,7 +309,7 @@ MapServer 7.6 to 8.0 Migration - Direct changing of mapfile parameters through the URL has been removed as of the 8.0.0 release. You can still however handle this through :ref:`runsub`, but with a more limited list of supported mapfile - parameters (see related `discussion `__). + parameters (see related `discussion `__). Here is an example CGI request pre-8.0 release: :: @@ -212,7 +373,8 @@ MapServer 7.6 to 8.0 Migration MapServer 7.4 to 7.6 Migration ============================== -- MapServer now requires at least CMake version 3.0 for compiling +- MapServer now requires at least `CMake `__ version 3.0 + for building - PointZM data support (X,Y,Z,M coordinates) is now enabled by default @@ -230,7 +392,7 @@ MapServer 7.4 to 7.6 Migration - CONNECTIONOPTIONS parameter has been added in the mapfile LAYER, to take advantage of GDAL/OGR driver options. (see :ref:`RFC 125 `) such as: - .. code-block:: mapfile + .. code-block:: mapfile LAYER NAME "test" @@ -246,7 +408,7 @@ MapServer 7.4 to 7.6 Migration to enable a 'painters model' where all classes for a layer are drawn at once with a `ALL_MATCHING_CLASSES` setting, such as: - .. code-block:: mapfile + .. code-block:: mapfile LAYER NAME "test" @@ -283,7 +445,7 @@ MapServer 7.4 to 7.6 Migration Here is an example of the new `wms_essential` parameter: - .. code-block:: mapfile + .. code-block:: mapfile LAYER NAME "country_bounds" @@ -303,7 +465,7 @@ MapServer 7.4 to 7.6 Migration - Windows users can now use umlauts (special characters such as ä ö ü) in their directory paths and filenames, such as: - .. code-block:: mapfile + .. code-block:: mapfile LAYER .. @@ -368,19 +530,19 @@ MapServer 6.4 to 7.0 Migration from MapServer syntax to native syntax (e.g. SQL). Native expressions can still be set either using: 1) sub-selects in the DATA statement or 2) using the new NATIVE_FILTER processing key. -:: + .. code-block:: mapfile - # OGR Layer Before - LAYER - ... - FILTER 'where id=234' - END + # OGR Layer Before + LAYER + ... + FILTER 'where id=234' + END - # OGR Layer After - LAYER - ... - PROCESSING 'NATIVE_FILTER=id=234' - END + # OGR Layer After + LAYER + ... + PROCESSING 'NATIVE_FILTER=id=234' + END - MapServer attribute queries (e.g. mode=item[n]query) *must* be specified using MapServer expression syntax (qstring and qitem (opt)). For RDBMS backends you no longer send SQL snippets, @@ -392,21 +554,21 @@ MapServer 6.4 to 7.0 Migration and MapScript getter/setter functions will continue to function but unpredictable results will occur if used in conjunction with COMPOSITE blocks. For more information see https://mapserver.org/development/rfc/ms-rfc-113.html. -:: - - # Before - LAYER - ... - OPACITY 70 - END + .. code-block:: mapfile - # After - LAYER - ... - COMPOSITE + # Before + LAYER + ... OPACITY 70 END - END + + # After + LAYER + ... + COMPOSITE + OPACITY 70 + END + END - Handling of non UTF-8 encoded datasources has changed with RFC103. Mapfiles now *must* be saved in UTF-8 encoding, and requests returned by MapServer @@ -433,38 +595,40 @@ MapServer 6.4 to 7.0 Migration - ExternalGraphics added through SLD must now validate against the "sld_external_graphic" entry of the MAP->WEB->VALIDATION block -:: + .. code-block:: mapfile - MAP - WEB - VALIDATION - "sld_external_graphic" "^/path/to/symbols/.*png" + MAP + WEB + VALIDATION + "sld_external_graphic" "^/path/to/symbols/.*png" + END + END END - END - END MapServer 6.2 to 6.4 Migration ============================== +- MapServer now must be built with the CMake tool. Build instructions + are included in the `INSTALL_CMAKE.md `__ + file in the source directory. You will need to have CMake installed + on your system. Users of mapscripts (except PHP) will also need `SWIG `__ + to be installed. + - The "ows_extent" layer metadata is not used anymore to obtain georeferencing information for unreferenced raster data. Please use the "extent" layer key instead -:: + .. code-block:: mapfile - LAYER - ... - EXTENT -180 90 180 90 - END + LAYER + ... + EXTENT -180 90 180 90 + END - Validation patterns cannot be specified in metadata blocks (i.e. using xxx_validation_pattern and default_xxx metadata entries), use VALIDATION blocks. see #4596 #4604 #4608 or :ref:`runsub` -- Build has changed after the switch to cmake. Build instructions are included in - the INSTALL.CMAKE file in the source directory. You will need to have cmake installed - on your system. Users of mapscripts (except php) will also need swig to be installed. - - WFS paging parameter startIndex changed to base on 0 instead of 1 (0 is the first feature). See #4180 for external references. @@ -592,7 +756,7 @@ support it. As a result the parameters BACKGROUNDCOLOR, BACKGROUNDSHADOWCOLOR, BACKGROUNDSHADOWSIZE are no more. To draw a label "box" in 6.0 you'd do: -:: +.. code-block:: mapfile LABEL ... @@ -716,7 +880,9 @@ Mapfile Changes - OGC requests - DUMP parameter removed The DUMP LAYER parameter has been removed. To enable output of geometries in WMS getfeatureinfo requests - GML (INFO_FORMAT=application/vnd.ogc.gml), LAYER METADATA is used -instead:: +instead. + +.. code-block:: mapfile METADATA gml_geometries "geom" @@ -743,7 +909,7 @@ following character is ", ' or \. For Windows users: if you have a path string delimited by single/double quotes that ends with \, you will have to escape the last backslash. -:: +.. code-block:: mapfile SHAPEPATH "C:\ms4w\shapefiles\" # should be modified to... @@ -831,7 +997,7 @@ the 5.4/5.6 versions. Gone are resultsGetShape and getFeature methods. You shoul refactored getShape method to access layer shapes. That method takes a resultObj and returns a shapeObj. Typical use would be (in Perl): -:: +.. code-block:: perl $layer->queryByRect($map, $map->{extent}); # layer is still open @@ -847,6 +1013,8 @@ A resultObj encapsulates the data used to manage a result set. To access shapes independently of a query use the new resultObj class: +.. code-block:: perl + $layer->open(); $shape = $layer->getShape(new mapscript::resultObj(1)); $layer->close(); @@ -940,7 +1108,7 @@ for EPSG codes between 4000 and 5000. Change of mime-type for the imagemap outputformat ------------------------------------------------- -RFC 36 added support for templated outptformats, but this new feature +RFC 36 added support for templated outputformats, but this new feature was not available for WMS GetFeatureInfo output (see ticket #3024). In MapServer 5.6 this has been resolved by implementing lookup of output formats for query templates by mime-type. However this caused a conflict @@ -1008,7 +1176,7 @@ like ANGLEITEM or LABELSIZEITEM were used, now you denote the attribute in the context of the property being bound. For example, to bind an attribute to a label size you'd do: -:: +.. code-block:: mapfile LABEL ... diff --git a/en/announcements/announcements_archive.txt b/en/announcements/announcements_archive.txt index c7e080a8f5e..a427898a0d7 100644 --- a/en/announcements/announcements_archive.txt +++ b/en/announcements/announcements_archive.txt @@ -4,10 +4,118 @@ MapServer Announcement Archives ***************************************************************************** +**2026-06-01 - MapServer 8.6.4 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.4 has been issued in order to fix +two vulnerabilities. See the :ref:`changelog ` +for the list of changes. +You may also review the security advisories for this release: + +1. `OpenLayers viewer with WMS `__ advisory +2. `PostGIS support `__ advisory + +You may also review MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.4 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-05-07 - MapServer 8.6.3 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.3 has been issued in order to fix +a vulnerability in the SLD parser. See the :ref:`changelog ` +for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-45104 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.3 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-04-20 - MapCache 1.16.0 is released** + +The major version MapCache 1.16.0 has been released. +The list of changes for this release can be found in +the MapCache :ref:`changelog `. + +Head to :ref:`download` to obtain a copy. + +**2026-04-19 - MapServer 8.6.2 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.2 has been issued in order to fix +a vulnerability in the OpenLayers viewer (with WMS 1.3.0 requests). +See the :ref:`changelog ` for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-42030 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.2 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-03-23 - MapServer 8.6.1 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.1 has been issued in order to fix +a vulnerability in the SLD parser. +See the :ref:`changelog ` for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-33721 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.1 release (see the +:ref:`Migration Guide `). + +**2025-12-03 - MapServer 8.6.0 is released** + +The major version MapServer 8.6 has been released. The list of +major changes for this release can be found in the :ref:`8.6 announcement `. +See the :ref:`changelog ` +for the full list of changes and head to :ref:`download` to obtain a copy. + +**2025-11-27 - MapServer 8.6.0-rc1 is released** + +The first release candidate for MapServer 8.6 has been released. The list of +major changes for this release can be found in the :ref:`8.6 announcement `. +See the :ref:`changelog ` +for the full list of changes and head to :ref:`download` to obtain a copy. + +**2025-11-18 - MapServer 8.6.0-beta2 is released** + +The second beta for MapServer 8.6 has been released. The list of +major changes for this release can be found in the :ref:`8.6 announcement `. +See the :ref:`changelog ` +for the full list of changes and head to :ref:`download` to obtain a copy. + +**2025-11-13 - MapServer 8.6.0-beta1 is released** + +The first beta for MapServer 8.8 has been released. The list of +major changes for this release can be found in the :ref:`8.6 announcement `. +See the :ref:`changelog ` +for the full list of changes and head to :ref:`download` to obtain a copy. + **2025-09-19 - MapServer 8.4.1 is released** -The maintenance release of MapServer 8.4.1 has been issued in order to fix -a security flaw for WFS filters through OGR. +.. important:: + Security release available + +The security release of MapServer 8.4.1 has been issued in order to fix +a vulnerability for WFS filters through OGR. See the :ref:`changelog ` for the list of changes. You may also review MapServer's `Security Policy `__, the CVE record: `CVE-2025-59431 `__, @@ -629,32 +737,32 @@ for more details and head to :ref:`download` to obtain a copy. **2012-06-29 - MapServer 6.2.0 beta1 is released** -MapServer 6.2.0-beta1 has been released. See `the release announcement `__ +MapServer 6.2.0-beta1 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2012-05-18 - MapServer 6.0.3 is released** -MapServer 6.0.3 has been released. See `the release announcement `__ +MapServer 6.0.3 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2012-02-08 - TinyOWS 1.0.0 is released** -TinyOWS 1.0.0 has been released. See `the release announcement `__ +TinyOWS 1.0.0 has been released. See `the release announcement `__ for more details. (Note that TinyOWS will be part of the MapServer project starting with version 6.2) **2012-02-08 - MapServer 6.0.2 and 5.6.8 are released** -MapServer 6.0.2 and 5.6.8 have been released, including a security fix. See `the release announcement `__ +MapServer 6.0.2 and 5.6.8 have been released, including a security fix. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2012-02-06 - MapServer Developers Attend Seattle Code Sprint** -Members of the MapServer Project Steering Committee attend the `Seattle/Islandwood Code Sprint `__ +Members of the MapServer Project Steering Committee attend the `Seattle/Islandwood Code Sprint `__ event, an international meeting of PostGIS, GDAL, PDAL TinyOWS and MapServer development teams. **2011-07-13 - MapServer 6.0.1, 5.6.7 and 4.10.7 are released with security fixes** -MapServer 6.0.1, 5.6.7 and 4.10.7 have been released, containing important security fixes. See `the release announcement `__ +MapServer 6.0.1, 5.6.7 and 4.10.7 have been released, containing important security fixes. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2011-05-12 - MapServer 6.0.0 is released** @@ -664,54 +772,54 @@ for more details and head to :ref:`download` to obtain a copy. **2011-04-13 - MapServer 6.0.0-beta6 is released** -MapServer 6.0.0-beta6 has been released. See `the release announcement `__ +MapServer 6.0.0-beta6 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2011-03-15 - MapServer PSC Attend Montreal Code Sprint** -Members of the MapServer Project Steering Committee attend the `Montreal Code Sprint `__ +Members of the MapServer Project Steering Committee attend the `Montreal Code Sprint `__ event, an international meeting of PostGIS, GDAL, libLAS, GeoPrisma, and MapServer development teams. **2011-03-09 - MapServer 6.0.0-beta1 is released** -MapServer 6.0.0-beta1 has been released. See `the release announcement `__ +MapServer 6.0.0-beta1 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2011-01-17 - MapServer 5.6.6 is released** -MapServer 5.6.6 has been released. See `the release announcement `__ +MapServer 5.6.6 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2010-07-14 - MapServer 5.6.5 released, fixes a scale calculation issue in 5.6.4** MapServer 5.6.5 has been released, fixing a scale calculation issue that was introduced in 5.6.4. See the -`Announcement `__ +`Announcement `__ for more details and head to :ref:`download` to obtain copies. **2010-07-09 - MapServer 5.6.4 and 4.10.6 are released with security fixes** MapServer 5.6.4 and 4.10.6 have been released, containing important security fixes. See the -`Announcement `__ +`Announcement `__ for more details and head to :ref:`download` to obtain copies. **2010-03-22 - MapServer 5.6.3 is released** -MapServer 5.6.3 has been released. See `the release announcement `__ +MapServer 5.6.3 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2010-02-20 - MapServer PSC Attend New York Code Sprint** -Members of the MapServer Project Steering Committee attend the `New York Code Sprint `__ +Members of the MapServer Project Steering Committee attend the `New York Code Sprint `__ event, an international meeting of PostGIS, GeoServer, GeoMOOSE, and MapServer development teams. **2010-01-08 - MapServer 5.6.1 is released** -MapServer 5.6.1 has been released. See `the release announcement `__ +MapServer 5.6.1 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2009-12-18 - MapServer 5.6.0 is released** -MapServer 5.6.0 has been released. See `the release announcement `__ +MapServer 5.6.0 has been released. See `the release announcement `__ for more details and head to :ref:`download` to obtain a copy. **2009-07-24 - MapServer 5.4.2 is released** @@ -735,7 +843,7 @@ for more details and head to :ref:`download` to obtain a copy. **2009-03-26 - MapServer 5.2.2 and 4.10.4 security fixes are released** MapServer 5.2.2 and 4.10.4 have been released, containing important security fixes. See the -`Announcement `__ +`Announcement `__ for more details and head to :ref:`download` to obtain copies. **2009-03-08 - MapServer PSC Attend Toronto Code Sprint** @@ -759,6 +867,5 @@ MapServer website. Some of the major improvements include: MapServer recently graduated OSGeo's Incubation process. Incubation includes ensuring items like code provenance and community contribution. -See the `announcement`_ for more details. - -.. _`announcement`: https://lists.osgeo.org/pipermail/mapserver-announce/2008-December/000015.html \ No newline at end of file +See the `announcement `__ +for more details. diff --git a/en/cgi/controls.txt b/en/cgi/controls.txt index f308af5808d..ee4053f0880 100644 --- a/en/cgi/controls.txt +++ b/en/cgi/controls.txt @@ -430,7 +430,7 @@ SCALE [number] - deprecated SEARCHMAP It is possible to do pan/zoom interfaces using querymaps. In these cases - you will likey want information about the contents of the new map rather + you will likely want information about the contents of the new map rather than the previous map which is the normal way queries work. When searchmap is specified the new map is created and it's extent is used to query layers. Useful with NQUERY mode only. @@ -521,7 +521,7 @@ this is fairly straightforward, and depends on what version of MapServer you are using. One potentially very powerful use of this ability to change mapfile parameters through a URL involves changing class expressions on-the-fly. `VALIDATION` is used to control -run-time substition. Try it out. +run-time substitution. Try it out. .. warning:: diff --git a/en/cgi/runsub.txt b/en/cgi/runsub.txt index 80a927f2490..db15c11e4b7 100644 --- a/en/cgi/runsub.txt +++ b/en/cgi/runsub.txt @@ -9,7 +9,7 @@ :Author: Steve Lime :Contact: sdlime at gmail.com -:Last Updated: 2023-04-19 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 2 diff --git a/en/community/ai_tool_policy.txt b/en/community/ai_tool_policy.txt new file mode 100644 index 00000000000..8c916b44d48 --- /dev/null +++ b/en/community/ai_tool_policy.txt @@ -0,0 +1,101 @@ +.. _ai_tool_policy: + +***************************************************************************** +AI/LLM tool policy +***************************************************************************** + +Rationale +-------------------------------------------------------------------------------- + +LLMs are changing software development in many ways. What was once scarce, the +time and expertise to *write* software, is now plentiful. This scarcity was a +choke point that limited consumption of related resources in open source +projects. With that scarcity effectively gone in 2026, the dynamics and economics +of a project like MapServer are being disrupted. + +A project like MapServer is not simply code. It is also design, review, coordinated +refactoring, deprecation scheduling, coordinated communication, distribution, +and historical outlook. The plentiful convenience of code writing LLMs do not +effectively replace the human maintainers, architects, and documenters doing +the jobs that provide much of the value MapServer users actually derive. If they +did, LLM contributors would not need to bother to upstream activity to the +project at all. + +With the explosion of LLM usage in software development, the constrained +resource is now "maintenance". It is the time to review your contribution, the +time to make it concise, the time to refactor it in to a larger system, and the +time to protect the larger software system from disruption, breakage, and +performance degradation. Indiscriminate usage of LLMs in open source projects +*consume* maintenance, and the MapServer LLM tool policy attempts to conserve that +resource. + +Additionally, legal systems across the world (including US and EU) have not +definitely determined whether LLM outputs are derived works of training data or +if LLM-written code can even be copyrighted by a human. This is despite it +being latently extracted and originated from open source software in the first +place. + +Policy +-------------------------------------------------------------------------------- + +Contributors can make **limited use** of LLMs for contributions in MapServer, +subject to details mentioned below: + + * **Human contributors must be the primary author(s) of MapServer contributions** + + * All contributions including code, ticket comments, and commit messages + should be fully understood by the author(s) submitting them to the + project. + + * Submission of `vibe-coded `__ contributions is *banned*. + + * LLMs may only be used as an improved auto-completion mechanism, for + repeated tasks (mechanical refactoring) that could potentially be + completed with a deterministic algorithm, or to assist in identifying + potential coding errors. LLM output is advisory only and must not + replace human code review or testing. + + * Human-coordinated or uncoordinated (OpenClaw, etc) use of agents for + submission of contributions to the MapServer repository is *banned*. + + * *Any* LLM usage must be indicated by ticket label, comment, or commit + message indication and account for what was written by whom/what. + + * The contributing human author is ultimately responsible for every line of + code, comment, or mailing list interaction they initiate, and all of it + is subject to the project's code of conduct. + + * The typical high verbosity of LLM code and text is actively discouraged. + More code is more code to maintain. High verbosity contribution (tickets, + code, messages, etc) will be seen as indication of LLM-generated content + when not labeled otherwise and may be ignored, closed, left unmerged, or + removed at maintainers' discretion. + + +Violations +-------------------------------------------------------------------------------- + +If a maintainer judges that a contribution does not comply with this policy, +they should paste the following response to request changes: + +.. code-block:: text + + This PR does not appear to comply with our policy on tool-generated content, + and requires additional justification for why it is valuable enough to the + project for us to review it. Please see our developer policy on + AI-generated contributions: + https://mapserver.org/community/ai_tool_policy.html + +If a contributor fails to rectify their contribution to comply with the policy, +maintainers may lock the conversation and/or close the pull request/issue/RFC. +In case of repeated violations of our policy, the MapServer project reserves itself +the right to temporarily or permanently ban the infringing person/account. + +Mitigation +-------------------------------------------------------------------------------- + +MapServer donations are one way your organization can help buffer the cost and +disruption of LLMs in projects such as MapServer. The constrained resource is +maintenance, not adding more code/capability. Donations financially support +operation of MapServer as an ongoing open source software project, and without +it, much of the activity MapServer users take for granted would simply not happen. diff --git a/en/community/index.txt b/en/community/index.txt index 430dd596fc4..6e59e968e7a 100644 --- a/en/community/index.txt +++ b/en/community/index.txt @@ -19,7 +19,15 @@ Matrix / IRC :maxdepth: 2 matrix-irc - + +AI/LLM tool policy +------------------ + +.. toctree:: + :maxdepth: 2 + + ai_tool_policy + MapServer Service Providers --------------------------- @@ -42,4 +50,4 @@ Contributors .. toctree:: :maxdepth: 2 - contributors \ No newline at end of file + contributors diff --git a/en/copyright.txt b/en/copyright.txt index a293122eb1c..a7ce608b2ef 100644 --- a/en/copyright.txt +++ b/en/copyright.txt @@ -15,7 +15,7 @@ MapServer Source Code :: - Copyright (c) 2008-2025 Open Source Geospatial Foundation. + Copyright (c) 2008-2026 Open Source Geospatial Foundation. Copyright (c) 1996-2008 Regents of the University of Minnesota. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/en/development/announce/8-6.txt b/en/development/announce/8-6.txt new file mode 100644 index 00000000000..c44bb970c92 --- /dev/null +++ b/en/development/announce/8-6.txt @@ -0,0 +1,88 @@ +.. _announce-8-6: + +***************************************************************************** +Version 8.6.0 Announcement +***************************************************************************** + +:Authors: Project Steering Committee +:Last Updated: 2025-12-03 + +The MapServer Team is pleased to announce the major release of +MapServer 8.6.0 + +The 8.6 release brings a number of major new features that are briefly +summarized in this document. The full list of changes can be found in :ref:`changelog-8-6`. +The :ref:`Migration Guide ` also contains more detailed examples of +the major changes. + +Major New Features in MapServer 8.6 +----------------------------------- + +- allow append of additional query parameters for OGCAPI: Features (`#7360 `__) + +- new MapServer index page (`#7350 `__) + +- WMS GetFeatureInfo: add options to precisely identify points through their symbols (`#7318 `__) + +- add FALLBACK parameter for CLASS object, to be applied if none of the previously defined classes has been applied (`#7309 `__) + +- add vendorSpecificParameters to OpenAPI document (`#7295 `__) + +Other Related Updates +--------------------- + +- the demo server hosting many live OGC endpoints has been updated & + constantly maintained, as it is so important for the community: + https://demo.mapserver.org + +Migration Guide +--------------- + +Head to the :ref:`Migration Guide ` for mapfile examples of the major 8.6.0 changes. + +Source Code Download +-------------------- + +The source for this release can be downloaded at: + + https://mapserver.org/download.html + +Binary Distributions +-------------------- + +Binary distributions will be available in the coming days: + +- Debian binaries of 8.6.0 are already available: https://tracker.debian.org/pkg/mapserver +- `OSGeoLive `__ 17.0 release process is happening now, but + it will soon include MapServer 8.6.0 +- `UbuntuGIS `__ will follow the OSGeoLive + release and will then include MapServer 8.6.0 +- MS4W users have already been using branch-8-6 code, but watch for + a new release shortly containing the 8.6.0 changes at: https://ms4w.com + +.. TBD + - `RHEL and CentOS` TODO + - `OpenSUSE` TODO + +Other binary distributions listed on the download page should also be updated +with binaries for the new release shortly. + +Documentation +------------- + +The entire 8.6.0 documentation is also available as a `PDF document `__ |image| +(1155 pages, with clickable table of contents as well). + +.. |image| image:: ../../../_static/pdf.png + :height: 15 + :width: 15 + :alt: PDF icon + :target: https://download.osgeo.org/mapserver/docs/MapServer.pdf + +Thanks +------ + +Thank you to all of the users, developers, and supporters of MapServer. Enjoy! + +*The MapServer Team* + diff --git a/en/development/announce/index.txt b/en/development/announce/index.txt index 154b1277ea0..65f71000ebc 100644 --- a/en/development/announce/index.txt +++ b/en/development/announce/index.txt @@ -8,6 +8,7 @@ .. toctree:: :maxdepth: 2 + 8-6 8-4 8-2 8-0 diff --git a/en/development/bugs.txt b/en/development/bugs.txt index e1df4eac753..e660a94b543 100644 --- a/en/development/bugs.txt +++ b/en/development/bugs.txt @@ -16,6 +16,11 @@ Please keep the following issues in mind when submitting a bug/issue: Security/vulnerability reports should not be submitted through GitHub, but instead please send your report to the email address: `mapserver-security nospam @ osgeo.org` (remove the blanks and 'nospam'). + +.. tip:: + + Review MapServer's `Security Policy `__, + and also check if there are any recently published `vulnerabilities `__. 1. Set a meaningful yet reasonably brief title of your ticket. @@ -36,7 +41,7 @@ Please keep the following issues in mind when submitting a bug/issue: The most important thing when reporting a bug is to boil down a minimum example that is needed to reproduce the bug. That means a minimal mapfile + -any data files it depends on. Remove everything from the map file that isn't +any data files it depends on. Remove everything from the mapfile that isn't needed to reproduce the bug. The developers often dislike having to spend the first 30 minutes working on a @@ -44,7 +49,7 @@ bug, having to fix paths, remove unnecessary layers, removing references to external symbols or fonts that were not included or even needed and otherwise doctoring your test case to get it to a point when they can actually use it. -If the bug is easily demonstrated with ":ref:`map2img`", without the need to +If the bug is easily demonstrated with :ref:`map2img`, without the need to setup a proper web service and test it through http, then please show it that way. If a standalone :ref:`mapscript` script can demonstrate a problem without it having to be a web service, likewise submit it that way. If your problem diff --git a/en/development/changelog/changelog-7-0.txt b/en/development/changelog/changelog-7-0.txt index 3a51724bca2..9c09522b184 100644 --- a/en/development/changelog/changelog-7-0.txt +++ b/en/development/changelog/changelog-7-0.txt @@ -12,6 +12,9 @@ file from the source directory. Changes from 7.0.7 to 7.0.8 =========================== +.. important:: + Security release + * CVE-2021-32062: Address flaw in CGI mapfile loading that makes it possible to bypass security controls ( `#6313 `__ ) ( `#6314 `__ ) (Steve Lime) : `82a3eb5 `__ * Use CPLSetConfigOption/CPLGetConfigOption for some CGI/FastCGI-related env vars ( `#6305 `__ ) (Seth G) : `3c3c9b3 `__ * handle phpmapscript vulnerability in error handling ( `#6014 `__ ) (Jeff McKenna) : `7e36981 `__ diff --git a/en/development/changelog/changelog-7-2.txt b/en/development/changelog/changelog-7-2.txt index 94aa56b24df..94c7bf4cb99 100644 --- a/en/development/changelog/changelog-7-2.txt +++ b/en/development/changelog/changelog-7-2.txt @@ -12,6 +12,9 @@ file from the source directory. Changes from 7.2.2 to 7.2.3 =========================== +.. important:: + Security release + * CVE-2021-32062: Address flaw in CGI mapfile loading that makes it possible to bypass security controls ( `#6313 `__ ) ( `#6314 `__ ) (Steve Lime) : `7db7cbb `__ * Use CPLSetConfigOption/CPLGetConfigOption for some CGI/FastCGI-related env vars ( `#6305 `__ ) (Seth G) : `c079fb1 `__ * handle PHPMapScript vulnerability in error handling ( `#6014 `__ ) (Jeff McKenna) : `1ce0d4d `__ diff --git a/en/development/changelog/changelog-7-4.txt b/en/development/changelog/changelog-7-4.txt index b5a8a7bf474..34c54fc94a9 100644 --- a/en/development/changelog/changelog-7-4.txt +++ b/en/development/changelog/changelog-7-4.txt @@ -12,6 +12,9 @@ file from the source directory. Changes from 7.4.4 to 7.4.5 =========================== +.. important:: + Security release + * CVE-2021-32062: Address flaw in CGI mapfile loading that makes it possible to bypass security controls ( `#6313 `__ ) ( `#6314 `__ ) (Steve Lime) : `d611782 `__ * Use CPLSetConfigOption/CPLGetConfigOption for some CGI/FastCGI-related env vars ( `#6305 `__ ) (Seth G) : `f19c8b7 `__ * WCS 1.1 and 2.0: fix support of netCDF output (complementary fix to refs `#5968 `__ ) (Even Rouault) : `6bd9301 `__ diff --git a/en/development/changelog/changelog-7-6.txt b/en/development/changelog/changelog-7-6.txt index 5f9d7bdb6ce..1915528c16a 100644 --- a/en/development/changelog/changelog-7-6.txt +++ b/en/development/changelog/changelog-7-6.txt @@ -12,6 +12,9 @@ file from the source directory. Changes from 7.6.6 to 7.6.7 =========================== +.. important:: + Security release + * tostring() expression function: validate format string, and make sure buffer is large enough (Even Rouault) : `31bf282 `__ .. _changelog-7-6-6: @@ -19,6 +22,9 @@ Changes from 7.6.6 to 7.6.7 Changes from 7.6.5 to 7.6.6 =========================== +.. important:: + Security release + * mapregex.c: fix invalid mapping of MS_REG_NOSUB and MS_REG_NEWLINE with GNU regex (Even Rouault) : `7b4f1b0 `__ * OGR output format: avoid potential stack buffer overflow on too long filename (Even Rouault) : `63ad0ab `__ * update license year (Jeff McKenna) : `3bfaddb `__ @@ -125,6 +131,9 @@ Changes from 7.6.3 to 7.6.4 Changes from 7.6.2 to 7.6.3 =========================== +.. important:: + Security release + * CVE-2021-32062: Address flaw in CGI mapfile loading that makes it possible to bypass security controls ( `#6313 `__ ) ( `#6314 `__ ) ( `#6315 `__ ) (Even Rouault) : `927ac97 `__ * Fix most of remaining Coverity scan warnings with high priority ( `#6307 `__ ) (Even Rouault) : `f89e386 `__ * Use CPLSetConfigOption/CPLGetConfigOption for some CGI/FastCGI-related env vars. ( `#6304 `__ ) (Steve Lime) : `b128dac `__ diff --git a/en/development/changelog/changelog-8-0.txt b/en/development/changelog/changelog-8-0.txt index f45129748fa..c28b8e83d79 100644 --- a/en/development/changelog/changelog-8-0.txt +++ b/en/development/changelog/changelog-8-0.txt @@ -12,6 +12,9 @@ file from the source directory. Changes from 8.0.1 to 8.0.2 =========================== +.. important:: + Security release + * mapregex.c: fix invalid mapping of MS_REG_NOSUB and MS_REG_NEWLINE with GNU regex (Even Rouault) : `18d2833 `__ * OGR output format: avoid potential stack buffer overflow on too long filename (Even Rouault) : `33cc8c2 `__ * mapogr.cpp: do not emit some debug messages in default debug mode ( `#7063 `__ ) (github-actions[bot]) : `597d17d `__ @@ -745,7 +748,7 @@ Changes from 7.6.4 to 8.0.0-beta1 * remove USE_PROJ check (Jeff McKenna) : `d11da8d `__ * Contour layer: take into account nodata value from GDAL raster (fixes `#6182 `__ ) (Even Rouault) : `a484345 `__ * FindOracle.cmake: complementary fix to find OCI 19 (Even Rouault) : `9bd402c `__ -* WFS 1.1/2.0: do not write empty ows:WGS84BoundingBox element when layer extent is unkown, which is non-conformant with WFS XML schema (fix `#6170 `__ ) (Even Rouault) : `4a5bc7c `__ +* WFS 1.1/2.0: do not write empty ows:WGS84BoundingBox element when layer extent is unknown, which is non-conformant with WFS XML schema (fix `#6170 `__ ) (Even Rouault) : `4a5bc7c `__ * remove myself from travis notifications (Thomas Bonfort) : `2502fb3 `__ * Metadata: remove unused function and erroneous default date output (Tom Kralidis) : `c0d2b75 `__ * Metadata: use attribution_title if available ( `#6166 `__ ) (Tom Kralidis) : `d319595 `__ diff --git a/en/development/changelog/changelog-8-2.txt b/en/development/changelog/changelog-8-2.txt index 7db71ba0b6f..304534fdcc5 100644 --- a/en/development/changelog/changelog-8-2.txt +++ b/en/development/changelog/changelog-8-2.txt @@ -25,6 +25,9 @@ Changes from 8.2.1 to 8.2.2 Changes from 8.2.0 to 8.2.1 =========================== +.. important:: + Security release + * tostring() expression function: validate format string, and make sure buffer is large enough (Even Rouault) : `6f26c4f `__ * msProcessProjection(): strip epsgaxis= MapServer specific parameter that confuses PROJ < 9.5.0 (Even Rouault) : `147e7b9 `__ * Fix build -DWITH_OGCAPI=1 -DWITH_WFS=0 ( `#7116 `__ ) (github-actions[bot]) : `e1ded1c `__ @@ -62,6 +65,9 @@ Changes from 8.2.0-beta3 to 8.2.0-rc1 Changes from 8.2.0-beta2 to 8.2.0-beta3 ======================================= +.. important:: + Security release + * mapregex.c: fix invalid mapping of MS_REG_NOSUB and MS_REG_NEWLINE with GNU regex (Even Rouault) : `af7fe77 `__ * OGR output format: avoid potential stack buffer overflow on too long filename (Even Rouault) : `33381a9 `__ diff --git a/en/development/changelog/changelog-8-4.txt b/en/development/changelog/changelog-8-4.txt index 38f48954702..f4cb67c99ca 100644 --- a/en/development/changelog/changelog-8-4.txt +++ b/en/development/changelog/changelog-8-4.txt @@ -12,38 +12,41 @@ file from the source directory. Changes from 8.4.0 to 8.4.1 =========================== -* Security: Add missing column name escaping in FLTGetCommonExpression() ( `#7349 `__ ) (Even Rouault) : `1c73aca `__ -* Make projection context ref counting thread safe again ( `#7079 `__ ) ( `#7346 `__ ) (github-actions[bot]) : `94d49b6 `__ -* build(deps): bump actions/setup-python from 5 to 6 ( `#7339 `__ ) (dependabot[bot]) : `c271c32 `__ -* Handle various GDAL version formats (sethg) : `6396818 `__ -* Remove comma check (sethg) : `767fd18 `__ -* [Backport branch-8-4] Update SDTS test to use SXF driver ( `#7332 `__ ) (github-actions[bot]) : `5560cca `__ -* [Backport branch-8-4] Fixed non numerical expressions in a getFeature request ( `#7323 `__ ) (github-actions[bot]) : `32786ac `__ -* build(deps): bump actions/checkout from 4 to 5 ( `#7322 `__ ) (dependabot[bot]) : `7503865 `__ -* msautotest: fix get_gdal_version() to support GDAL version nickname ( `#7319 `__ ) (github-actions[bot]) : `9cd969e `__ -* Fix GDAL 3.12dev deprecation warnings about GDALGetDataTypeSize() (Even Rouault) : `eacdaee `__ -* maptree.c: fix warning with latest GCC (Even Rouault) : `6992c26 `__ -* Fix vector tileindex infinite recursion (Patrik Sylve) : `547e558 `__ -* Check for all possible use_default_extent_for_getfeature metadata keys ( `#7311 `__ ) (github-actions[bot]) : `8e96877 `__ -* use master for CRLF check (Jeff McKenna) : `77f74de `__ -* [Backport branch-8-4] OGC API: fix issue `#7177 `__ (feature geometry of multipolygons is returned with errors) ( `#7306 `__ ) (github-actions[bot]) : `6d0016c `__ -* Update INSTALL.CMAKE ( `#7304 `__ ) (github-actions[bot]) : `5db5354 `__ -* Check wms_onlineresource for OpenLayers output ( `#7301 `__ ) (github-actions[bot]) : `a06a1dc `__ -* [Backport branch-8-4] Shapefile: Parse CPG values ( `#7302 `__ ) (github-actions[bot]) : `e59604c `__ -* add private vulnerability reporting steps ( `#7300 `__ ) (github-actions[bot]) : `49c0d38 `__ -* Fix regex and use PROJ_DATA ( `#7291 `__ ) (github-actions[bot]) : `00d904e `__ -* [Backport branch-8-4] Allow FILTER expressions with SCALETOKENs ( `#7285 `__ ) (github-actions[bot]) : `71b617a `__ -* [Backport branch-8-4] SHP/DBF: Attempt to read encoding from CPG file ( `#7276 `__ ) (github-actions[bot]) : `15b3ee3 `__ -* Fix MSSQL driver crash with NULL fid ( `#7270 `__ ) ( `#7272 `__ ) (github-actions[bot]) : `598859a `__ -* [Backport branch-8-4] update OGCAPI Common schemas url ( `#7269 `__ ) (github-actions[bot]) : `2c9c805 `__ -* [Backport branch-8-4] CI: handle Flake8 unused variable violation code ( `#7265 `__ ) (github-actions[bot]) : `61c4762 `__ -* Bump C/C++ standard to 17 for ICU 76. ( `#7259 `__ ) (Bas Couwenberg) : `0e9f04e `__ -* Fix opacity for gradient legend symbol ( `#7256 `__ ) (github-actions[bot]) : `85fa884 `__ -* [Backport branch-8-4] Make sure 130 tests make request for WMS version 1.3.0 ( `#7253 `__ ) (github-actions[bot]) : `7596347 `__ -* [Backport branch-8-4] Python MapScript updates ( `#7222 `__ ) (github-actions[bot]) : `36b9a46 `__ -* Attempt at fuzzer fix ( `#7220 `__ ) (github-actions[bot]) : `fff513a `__ -* msDrawRasterBuildRasterPath(): micro-optimization: do not attempt to open non-exiting file ( `#7216 `__ ) (github-actions[bot]) : `16b85d0 `__ -* [CI] bump PCRE2 for SWIG build ( `#7214 `__ ) (github-actions[bot]) : `2bffd04 `__ +.. important:: + Security release + +* Security: Add missing column name escaping in FLTGetCommonExpression() ( `#7349 `__ ) (Even Rouault) : `1c73aca `__ +* Make projection context ref counting thread safe again ( `#7079 `__ ) ( `#7346 `__ ) (github-actions[bot]) : `94d49b6 `__ +* build(deps): bump actions/setup-python from 5 to 6 ( `#7339 `__ ) (dependabot[bot]) : `c271c32 `__ +* Handle various GDAL version formats (sethg) : `6396818 `__ +* Remove comma check (sethg) : `767fd18 `__ +* [Backport branch-8-4] Update SDTS test to use SXF driver ( `#7332 `__ ) (github-actions[bot]) : `5560cca `__ +* [Backport branch-8-4] Fixed non numerical expressions in a getFeature request ( `#7323 `__ ) (github-actions[bot]) : `32786ac `__ +* build(deps): bump actions/checkout from 4 to 5 ( `#7322 `__ ) (dependabot[bot]) : `7503865 `__ +* msautotest: fix get_gdal_version() to support GDAL version nickname ( `#7319 `__ ) (github-actions[bot]) : `9cd969e `__ +* Fix GDAL 3.12dev deprecation warnings about GDALGetDataTypeSize() (Even Rouault) : `eacdaee `__ +* maptree.c: fix warning with latest GCC (Even Rouault) : `6992c26 `__ +* Fix vector tileindex infinite recursion (Patrik Sylve) : `547e558 `__ +* Check for all possible use_default_extent_for_getfeature metadata keys ( `#7311 `__ ) (github-actions[bot]) : `8e96877 `__ +* use master for CRLF check (Jeff McKenna) : `77f74de `__ +* [Backport branch-8-4] OGC API: fix issue `#7177 `__ (feature geometry of multipolygons is returned with errors) ( `#7306 `__ ) (github-actions[bot]) : `6d0016c `__ +* Update INSTALL.CMAKE ( `#7304 `__ ) (github-actions[bot]) : `5db5354 `__ +* Check wms_onlineresource for OpenLayers output ( `#7301 `__ ) (github-actions[bot]) : `a06a1dc `__ +* [Backport branch-8-4] Shapefile: Parse CPG values ( `#7302 `__ ) (github-actions[bot]) : `e59604c `__ +* add private vulnerability reporting steps ( `#7300 `__ ) (github-actions[bot]) : `49c0d38 `__ +* Fix regex and use PROJ_DATA ( `#7291 `__ ) (github-actions[bot]) : `00d904e `__ +* [Backport branch-8-4] Allow FILTER expressions with SCALETOKENs ( `#7285 `__ ) (github-actions[bot]) : `71b617a `__ +* [Backport branch-8-4] SHP/DBF: Attempt to read encoding from CPG file ( `#7276 `__ ) (github-actions[bot]) : `15b3ee3 `__ +* Fix MSSQL driver crash with NULL fid ( `#7270 `__ ) ( `#7272 `__ ) (github-actions[bot]) : `598859a `__ +* [Backport branch-8-4] update OGCAPI Common schemas url ( `#7269 `__ ) (github-actions[bot]) : `2c9c805 `__ +* [Backport branch-8-4] CI: handle Flake8 unused variable violation code ( `#7265 `__ ) (github-actions[bot]) : `61c4762 `__ +* Bump C/C++ standard to 17 for ICU 76. ( `#7259 `__ ) (Bas Couwenberg) : `0e9f04e `__ +* Fix opacity for gradient legend symbol ( `#7256 `__ ) (github-actions[bot]) : `85fa884 `__ +* [Backport branch-8-4] Make sure 130 tests make request for WMS version 1.3.0 ( `#7253 `__ ) (github-actions[bot]) : `7596347 `__ +* [Backport branch-8-4] Python MapScript updates ( `#7222 `__ ) (github-actions[bot]) : `36b9a46 `__ +* Attempt at fuzzer fix ( `#7220 `__ ) (github-actions[bot]) : `fff513a `__ +* msDrawRasterBuildRasterPath(): micro-optimization: do not attempt to open non-exiting file ( `#7216 `__ ) (github-actions[bot]) : `16b85d0 `__ +* [CI] bump PCRE2 for SWIG build ( `#7214 `__ ) (github-actions[bot]) : `2bffd04 `__ .. _changelog-8-4-0: @@ -81,12 +84,12 @@ Changes from 8.2.2 to 8.4.0-beta1 * [CI] add PHP 8.4 to workflows ( `#7196 `__ ) (Jeff McKenna) : `2fb2911 `__ * WCS 1.0: do not emit twice HTTP headers in case of error on SECTION parameter of GetCapabilities (Even Rouault) : `8c37d02 `__ * Update Windows CI and Python Versions ( `#7171 `__ ) (Seth G) : `cb21366 `__ -* msProjectRect(): cache whether source projection is polar when repeatdly projecting from it ( `#7190 `__ ) (Even Rouault) : `47f19e3 `__ +* msProjectRect(): cache whether source projection is polar when repeatedly projecting from it ( `#7190 `__ ) (Even Rouault) : `47f19e3 `__ * Allow <> to be used as a logical operator in expressions ( `#7182 `__ ) (Seth G) : `751fdde `__ * mapuvraster: fix hDS file descriptor leak in msUVRASTERLayerGetExtent (Sander Jansen) : `e133f4e `__ * Make interpolation and countour compatible of GDAL 3.10 (Even Rouault) : `7fc1930 `__ * Allow encryption key files to use paths relative to a Mapfile ( `#7181 `__ ) (Seth G) : `ea2f4b2 `__ -* SLD Filters missing due to logicial keywords in expressions ( `#7178 `__ ) (Seth G) : `4726b9c `__ +* SLD Filters missing due to logical keywords in expressions ( `#7178 `__ ) (Seth G) : `4726b9c `__ * Update to check-jsonschema and fix URL (sethg) : `31d66d7 `__ * SLD: fix having a TextSymbolizer rule after a PolygonSymbolizer one (Even Rouault) : `12dfa91 `__ * Avoid hanging loop when applying SLD with duplicated NamedLayers ( `#7166 `__ ) (Seth G) : `e6a3c9e `__ diff --git a/en/development/changelog/changelog-8-6.txt b/en/development/changelog/changelog-8-6.txt new file mode 100644 index 00000000000..6b9c566aab6 --- /dev/null +++ b/en/development/changelog/changelog-8-6.txt @@ -0,0 +1,204 @@ +.. _changelog-8-6: + +************************** + MapServer 8.6 Changelog +************************** + +The summary of major changes for this release can be found in the `HISTORY.md `__ +file from the source directory. + +.. _changelog-8-6-4: + +Changes from 8.6.3 to 8.6.4 +=========================== + +.. important:: + Security release + +* PostGIS: make sure identifier value is numeric when the declared type is numeric too ( `#7519 `__ ) (Even Rouault) : `65f1b53 `__ +* WMS OpenLayers output: properly escape mapserv_onlineresource ( `#7518 `__ ) (Even Rouault) : `ff17ef1 `__ +* cgiutil: fix handling of malformed percent-encoding ( `#7515 `__ ) (Stefan Gloor) : `6364c71 `__ +* PostGIS: fix wfs_use_default_extent_for_getfeature=false and PROCESSING=NATIVE_FILTER ( `#7514 `__ ) (Even Rouault) : `6bb14b2 `__ +* Fix incorrect JSON error message output on Index Pages ( `#7513 `__ ) (Seth Girvin) : `7f18840 `__ + +.. _changelog-8-6-3: + +Changes from 8.6.2 to 8.6.3 +=========================== + +.. important:: + Security release + +* SLD parser: fix out of bounds access on SLD with only a Rule with a ElseFilter but without a symbolizer ( `#7497 `__ ) (Even Rouault) : `0f05c57 `__ +* Oracle: revert change regarding case insensitive ogc filters ( `#7493 `__ ) (Pierre-Étienne Lord) : `ce02b66 `__ +* update CMake install README ( `#7488 `__ ) (Jeff McKenna) : `dcdfcda `__ +* Oracle: revert change regarding adding subquery to apply sortBy before rownum paging ( `#7491 `__ ) (Jeff McKenna) : `448c69f `__ + +.. _changelog-8-6-2: + +Changes from 8.6.1 to 8.6.2 +=========================== + +.. important:: + Security release + +* Allow only SRS or CRS parameters for OpenLayers template output ( `#7481 `__ ) (Seth G) : `9d0d2c0 `__ +* Fix GetFeatureInfo raster queries with NaN ( `#7482 `__ ) (Seth G) : `0eade28 `__ +* Fix segmentation fault in PHP MapScriptNG ( `#7472 `__ ) (Björn Boldt) : `b35d4d4 `__ +* Add guard for empty PATH_INFO ( `#7467 `__ ) (Seth G) : `f0b0867 `__ + +.. _changelog-8-6-1: + +Changes from 8.6.0 to 8.6.1 +=========================== + +.. important:: + Security release + +* msSLDParseRasterSymbolizer(): fix potential heap buffer overflow ( `#7461 `__ ) (github-actions[bot]) : `fb08dad `__ +* mapwcs20.cpp: remove debug fprintf (Even Rouault) : `90bae9f `__ +* Fix C5208 warning ( `#7455 `__ ) (github-actions[bot]) : `9698439 `__ +* Define _USE_MATH_DEFINES so that M_PI is available when include math.h (Even Rouault) : `ba08945 `__ +* GetFeatureInfo with IDENTIFY CLASSAUTO: take into account SYMBOL.ANCHORPOINT (Even Rouault) : `90590e5 `__ +* No longer depend on GDAL's cpl_port.h MIN/MAX/ABS macros (Even Rouault) : `a2cedd5 `__ +* CI: upgrade PHPUnit version to 13 ( `#7428 `__ ) (github-actions[bot]) : `e272938 `__ +* WCS 2.0: fix issue when input raster in a rotated pole lon/lat CRS with lon_0 > 180 ( `#7429 `__ ) (github-actions[bot]) : `ff1f23e `__ +* Contour: fix 2 reprojection related issues ( `#7424 `__ ) (github-actions[bot]) : `045cced `__ +* Fix memory allocation for bool ( `#7419 `__ ) (github-actions[bot]) : `9bba2a2 `__ +* Build: fix build against GDAL 3.13.0dev ( `#7416 `__ ) (github-actions[bot]) : `883a7a7 `__ +* UVRaster: fix WMS-Time support on layers with TILEINDEX pointing to a shapefile ( `#7411 `__ ) (github-actions[bot]) : `1f754fc `__ +* update copyright year (Jeff McKenna) : `3cd4fa0 `__ +* WMS GetCapabilities response: use group title and abstract when using wms_layer_group instead of GROUP ( `#7403 `__ ) (github-actions[bot]) : `7a49268 `__ + +.. _changelog-8-6-0: + +Changes from 8.6.0-rc1 to 8.6.0 +=============================== + +* CI: upgrade PCRE2 to 10.47 ( `#7400 `__ ) (Jeff McKenna) : `67a6e16 `__ + +.. _changelog-8-6-0-rc1: + +Changes from 8.6.0-beta2 to 8.6.0-rc1 +===================================== + +* CI: upgrade PHPUnit, and add PHP 8.5 MapScript job ( `#7398 `__ ) (Jeff McKenna) : `a595d77 `__ +* Output GDAL files: fix from init=epsg:xxxx layers ( `#7395 `__ ) (Even Rouault) : `f86e3f2 `__ +* contour: avoid warning about Memory driver being deprecated in GDAL >= 3.11 ( `#7394 `__ ) (Even Rouault) : `3d002c9 `__ +* OGCAPI: return OGC-NumberReturned, OGC-NumberMatched and Link HTTP headers ( `#7393 `__ ) (Even Rouault) : `416baa45 `__ + +.. _changelog-8-6-0-beta2: + +Changes from 8.6.0-beta1 to 8.6.0-beta2 +======================================= + +* Add additional URL creation logic for Landing Page URLs ( `#7389 `__ ) (Seth G) : `c70b447 `__ + +.. _changelog-8-6-0-beta1: + +Changes from 8.4.1 to 8.6.0-beta1 +================================= + +* Fix: Memory leaks in config and landing page fixes ( `#7385 `__ ) (Seth G) : `2715c5d `__ +* Add config to msautotest folder checks ( `#7386 `__ ) (Seth G) : `099a0b1 `__ +* msautotest: fix config match errors ( `#7384 `__ ) (Jeff McKenna) : `bbc825d `__ +* Fix query maps with MS_NORMAL and MS_HILITE styles with WFS layers ( `#7364 `__ ) ( `#7365 `__ ) (Tamas Szekeres) : `3c37e22 `__ +* WFS: add next link if there might be features left ( `#7328 `__ ) (Patrik Sylve) : `9b7c8d0 `__ +* Provide additional names in FindProtobufC.cmake ( `#7130 `__ ) (Howard Butler) : `fc79134 `__ +* PostGIS: Escape geometry column name consistently ( `#7324 `__ ) (Jørgen Reimer Nystad) : `c78aafd `__ +* Default to use FindFreetype/FindIconv from cmake ( `#7376 `__ ) (Landry Breuil) : `151abf1 `__ +* add extra spece in construction of query ( `#7379 `__ ) (Michael D. Smith) : `b7ac51d `__ +* msautotest updates ( `#7380 `__ ) (Seth G) : `bbcdddf `__ +* Disable build isolation to not download setuptools dependency. ( `#7377 `__ ) (Bas Couwenberg) : `d27752e `__ +* Remove legacy bootstrap4 files ( `#7363 `__ ) (Seth G) : `2445768 `__ +* Do the fontconfig detection on all platforms, not only MacOSX ( `#7372 `__ ) (Landry Breuil) : `47b51df `__ +* WMS Client: Validate style in wms_style metadata ( `#7368 `__ ) (Patrik Sylve) : `1d379a7 `__ +* WMS Client: Do not modify layer extent `#7367 `__ ( `#7371 `__ ) (Patrik Sylve) : `386c136 `__ +* build(deps): bump actions/upload-artifact from 4 to 5 ( `#7369 `__ ) (dependabot[bot]) : `0f1a401 `__ +* Process empty path requests with mapfiles in querystrings ( `#7366 `__ ) (Seth G) : `e71de03 `__ +* Add ows_extra_params for OGC Features API ( `#7360 `__ ) (Seth G) : `265c9d9 `__ +* build(deps): bump github/codeql-action from 3 to 4 ( `#7361 `__ ) (dependabot[bot]) : `fee747f `__ +* OGC API/OpenAPI: add vendorSpecificParameters for items paths ( `#7295 `__ ) (Tom Kralidis) : `07acb6b `__ +* RFC 140 Impementation: Mapserver Homepage ( `#7350 `__ ) (Seth G) : `6b59663 `__ +* Merge pull request `#7343 `__ from geographika/raster-query-double (Seth G) : `29e4ae8 `__ +* Fix(parser): Prevent crash with non-existent layer in REQUIRES ( `#7334 `__ ) (Māris Nartišs) : `342b042 `__ +* Fix use-after-free error in msDrawRasterLayerLowOpenDataset ( `#7333 `__ ) (Māris Nartišs) : `3c18f7e `__ +* WMS GetFeatureInfo: add options to precisely identify points through their symbols (Even Rouault) : `b8f298d `__ +* msShapeGetNextClass(): use msScaleInBounds() (Even Rouault) : `d9ef84c `__ +* add bootstrap install to CMake build summary ( `#7351 `__ ) (Jeff McKenna) : `df31c72 `__ +* Use LF ( `#7352 `__ ) (Seth G) : `9753718 `__ +* update for 8.4.1 release (Jeff McKenna) : `fb4fa64 `__ +* update history (Jeff McKenna) : `e30e2a8 `__ +* Add Bootstrap 5 OGC API template files ( `#7338 `__ ) (Seth G) : `4777b7a `__ +* Add missing column name escaping in FLTGetCommonExpression() ( `#7348 `__ ) (Even Rouault) : `aaeedcd `__ +* Update Ubuntu CI setup.sh ( `#7347 `__ ) (Seth G) : `d327d58 `__ +* Make projection context ref counting thread safe again ( `#7079 `__ ) ( `#7345 `__ ) (Tamas Szekeres) : `27b2a1a `__ +* Remove legacy WMS versions ( `#7337 `__ ) (Seth G) : `d66c340 `__ +* Style: make fallback configurable in CLASS ( `#7309 `__ ) (Patrik Sylve) : `8db1ef9 `__ +* Support Float32 or Float64 labels (sethg) : `aab8852 `__ +* Add Float64 test (sethg) : `7348c87 `__ +* Add MS_IMAGEMODE_FLOAT64 type for raster labels (sethg) : `b520879 `__ +* Add test case (sethg) : `c219201 `__ +* build(deps): bump actions/setup-python from 5 to 6 ( `#7339 `__ ) (dependabot[bot]) : `b78b0dc `__ +* Update msautotest output to GDAL 3.11.3 ( `#7336 `__ ) (Seth G) : `caaefa0 `__ +* msautotest Python GDAL get version fix ( `#7329 `__ ) (Seth G) : `87d522c `__ +* Speed-up vagrant package installation ( `#7330 `__ ) (Seth G) : `11d4146 `__ +* Switch to SXF (sethg) : `1fddafc `__ +* Remove SDTS test (sethg) : `56625bb `__ +* Fixed non numerical expressions in a getFeature request ( `#7321 `__ ) (Daimanta) : `b1c36e5 `__ +* build(deps): bump actions/checkout from 4 to 5 ( `#7322 `__ ) (dependabot[bot]) : `f9618ea `__ +* msautotest: fix get_gdal_version() to support GDAL version nickname ( `#7317 `__ ) (Even Rouault) : `032d9d1 `__ +* Fix GDAL 3.12dev deprecation warnings about GDALGetDataTypeSize() (Even Rouault) : `851fb5a `__ +* Update msautotest/gdal/expected/rawmode_multiband.png for GDAL version update (Even Rouault) : `ce143b6 `__ +* maptree.c: fix warning with latest GCC (Even Rouault) : `12ba37f `__ +* Check for all possible use_default_extent_for_getfeature metadata keys ( `#7296 `__ ) (Seth G) : `b5d7503 `__ +* use master for CRLF check (Jeff McKenna) : `6eb2b60 `__ +* OGC API: fix issue `#7177 `__ (feature geometry of multipolygons is returned with errors) ( `#7305 `__ ) (Andrea Capobianco) : `7d24be7 `__ +* Update INSTALL.CMAKE ( `#7303 `__ ) (Robin Perkins) : `70fdae4 `__ +* Shapefile: Parse CPG values ( `#7282 `__ ) (Patrik Sylve) : `be528bc `__ +* Check wms_onlineresource for OpenLayers output ( `#7297 `__ ) (Seth G) : `0438f8c `__ +* add private vulnerability reporting steps ( `#7298 `__ ) (Jeff McKenna) : `013a437 `__ +* Only use wchar_t on windows ( `#7287 `__ ) (Seth G) : `e6eba84 `__ +* INSPIRE compliance: Fix service exception status code when the SERVICE parameter is invalid/missing ( `#7284 `__ ) (Thomas Schorr) : `d76b6c8 `__ +* Update OpenLayers version and support non-built-in projections ( `#7290 `__ ) (Seth G) : `9d0e102 `__ +* Fix regex and use PROJ_DATA ( `#7278 `__ ) (Seth G) : `1375812 `__ +* add release badge (Jeff McKenna) : `baf4cde `__ +* Increase memory for vagrant and remove legacy fix ( `#7286 `__ ) (Seth G) : `6ce093f `__ +* Allow FILTER expressions with SCALETOKENs ( `#7237 `__ ) (Seth G) : `d79fa7f `__ +* WMS_SERVER: Add sanity check for TRANSPARENT parameter value in GetMap ( `#7280 `__ ) (Thomas Schorr) : `a994636 `__ +* Fix vector tileindex infinite recursion (Patrik Sylve) : `6c6e74e `__ +* CI: Update to GDAL 3.10.3 ( `#7281 `__ ) (Seth G) : `028a2de `__ +* SHP/DBF: Attempt to read encoding from CPG file ( `#7274 `__ ) (Patrik Sylve) : `d54aae0 `__ +* Fix MSSQL driver crash with NULL fid ( `#7270 `__ ) ( `#7271 `__ ) (Tamas Szekeres) : `337f974 `__ +* update OGCAPI Common schemas url ( `#7267 `__ ) (Jeff McKenna) : `9b7a37c `__ +* CI: handle Flake8 unused variable violation code ( `#7264 `__ ) (Jeff McKenna) : `6fe8e2b `__ +* Bump C/C++ standard to 17 for ICU 76. ( `#7259 `__ ) (Bas Couwenberg) : `0638698 `__ +* Fix opacity for gradient legend symbol ( `#7255 `__ ) (Patrik Sylve) : `38fc59f `__ +* Add a TIMESTAMP FORMATOPTION for Zip OUTPUTFORMATS ( `#7251 `__ ) (Seth G) : `fd7ee52 `__ +* CI: upgrade PHPUnit to version 12 ( `#7254 `__ ) (Jeff McKenna) : `530f2bf `__ +* Make sure 130 tests make request for WMS version 1.3.0 ( `#7252 `__ ) (Alistair Everett) : `de25c45 `__ +* CI: Update msautotest outputs to use Docker outputs ( `#7250 `__ ) (Seth G) : `e095a18 `__ +* msautotest: Fix interpretation of test output comparison in mstestlib ( `#7249 `__ ) (Paul Pazderski) : `e04fbd4 `__ +* CI: Update all build scripts and msautotest outputs to Ubuntu 24.04 ( `#7242 `__ ) (Seth G) : `4121426 `__ +* Add test for shapezip STORAGE=memory ( `#7239 `__ ) (Seth G) : `c7efdce `__ +* Move PHP MapScript builds to Docker and simplify Python MapScript builds (sethg) : `64a706f `__ +* Update to ubuntugis-stable (sethg) : `0170749 `__ +* Update main build to ubuntu-latest (geographika) : `79e609b `__ +* Update Python MapScript to use Docker (sethg) : `79bcc37 `__ +* CI: Run coverity-scan using Docker ( `#7225 `__ ) (Seth G) : `3bb1c22 `__ +* Run cppcheck using Docker ( `#7224 `__ ) (Seth G) : `279027f `__ +* Python MapScript updates ( `#7221 `__ ) (Seth G) : `6bef295 `__ +* Update the MapServer OpenLayers Viewer to use OpenLayers 10.4 ( `#7218 `__ ) (Seth G) : `432a45d `__ +* Attempt at fuzzer fix ( `#7219 `__ ) (Seth G) : `bc2a64a `__ +* msDrawRasterBuildRasterPath(): micro-optimization: do not attempt to open non-exiting file ( `#7215 `__ ) (Even Rouault) : `68c2a2f `__ +* [CI] bump PCRE2 for SWIG build (Jeff McKenna) : `a6db803 `__ +* update for 8.4 release (Jeff McKenna) : `24102f3 `__ +* update for 8.4 release (Jeff McKenna) : `f833350 `__ +* update history (Jeff McKenna) : `034d8be `__ +* add CITATION.cff ( `#7209 `__ ) (Jeff McKenna) : `3cd7992 `__ +* update history (Jeff McKenna) : `bc8e7dd `__ +* update copyright year (Jeff McKenna) : `683ad5c `__ +* Add stdbool.h inclusion in mapserver.h (Even Rouault) : `a6b41b2 `__ +* update history (Jeff McKenna) : `562a20d `__ +* Emit explicit error message when proj.db cannot be found ( `#7203 `__ ) (Even Rouault) : `5484bc6 `__ +* msPostGISReadShape(): fix crash if returned geometry is NULL (Even Rouault) : `4cdc549 `__ diff --git a/en/development/changelog/index.txt b/en/development/changelog/index.txt index b50cc266a96..5e3dc9e5eda 100644 --- a/en/development/changelog/index.txt +++ b/en/development/changelog/index.txt @@ -8,6 +8,7 @@ .. toctree:: :maxdepth: 2 + changelog-8-6 changelog-8-4 changelog-8-2 changelog-8-0 diff --git a/en/development/changelog/mapcache/changelog-1-16.txt b/en/development/changelog/mapcache/changelog-1-16.txt new file mode 100644 index 00000000000..28da06df01c --- /dev/null +++ b/en/development/changelog/mapcache/changelog-1-16.txt @@ -0,0 +1,22 @@ +.. _changelog-mapcache-1-16: + +************************** +MapCache 1.16 Changelog +************************** + +.. _changelog-mapcache-1-16-0: + +Changes from 1.14.1 to 1.16.0 +============================= + +* fix unresolved external symbol MIN referenced in function CreateWarpedVRT ( `#373 `__ ) (Tamas Szekeres) : `0948ea2 `__ +* fix uninitalized match_data variable, removed dangling else statement to allow calling free, fixed pcre_offset ( `#371 `__ ) (dpelissiry) : `690423a `__ +* LMDB: fix LMDB environment management in case of multiple caches ( `#360 `__ ) (Māris Nartišs) : `af1163a `__ +* tests: implement pytest tests for disk and sqlite cache backends ( `#362 `__ ) (Māris Nartišs) : `47bdb17 `__ +* Create LinearRing after CoordSeq (sethg) : `c0bd3f9 `__ +* Update to Windows Server 2022 and VS 2022 (sethg) : `7230b89 `__ +* minor spelling (Jeff McKenna) : `466f0bc `__ +* CI: ubuntu-20.04 deprecated on 2025-02-01 ( `#348 `__ ) (Jeff McKenna) : `bb5f5f7 `__ +* handle CMake deprecation warning ( `#342 `__ ) (Jeff McKenna) : `339008f `__ +* Update S3 cache to read AWS_SESSION_TOKEN env var if present ( `#339 `__ ) (Peet Whittaker) : `0b40f71 `__ +* handle uint64_t redefinition error on Windows ( `#340 `__ ) (Jeff McKenna) : `ff061b5 `__ diff --git a/en/development/changelog/mapcache/index.txt b/en/development/changelog/mapcache/index.txt index 8e22934c805..d5f1a8bbf90 100644 --- a/en/development/changelog/mapcache/index.txt +++ b/en/development/changelog/mapcache/index.txt @@ -8,6 +8,7 @@ .. toctree:: :maxdepth: 2 + changelog-1-16 changelog-1-14 changelog-1-12 changelog-1-10 diff --git a/en/development/dev_practices.txt b/en/development/dev_practices.txt index c3bb181550d..79f3e5fd60c 100644 --- a/en/development/dev_practices.txt +++ b/en/development/dev_practices.txt @@ -7,10 +7,18 @@ Development practices Making changes to MapServer --------------------------- -Minor changes to MapServer, such as bug fixes, may be made by opening a GitHub pull request. +- Minor changes to MapServer, such as bug fixes, may be made by opening a GitHub + `pull request `__. -Major changes should be discussed on the mapserver-dev listserv and may require the drafting -of a RFC (request for comment) document. +- Please always include a test in `/msautotest` as part of your pull request, by + following the steps listed in :ref:`autotest`). + +- Major changes should be discussed on the `mapserver-dev `__ + listserv and may require the drafting of a :ref:`RFC (request for comment) ` document. + +- Security changes must follow MapServer's `Security Policy `__ + +.. seealso:: :ref:`Bug Submission Guidelines ` Git usage --------- diff --git a/en/development/documentation.txt b/en/development/documentation.txt index 1376a3e690f..613a77ff57b 100644 --- a/en/development/documentation.txt +++ b/en/development/documentation.txt @@ -8,7 +8,7 @@ :Contact: hobu.inc at gmail.com :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2025-06-27 +:Last Updated: 2026-06-02 .. contents:: Table of Contents :depth: 4 @@ -272,7 +272,7 @@ Installing and Using Sphinx for rst-html Generation python -m pip install -r requirements.txt -#. install MacTex from http://www.tug.org/mactex/ if you want to build pdfs +#. install MacTex from https://www.tug.org/mactex/ if you want to build pdfs #. to process the documentation, from the MapServer /MapServer-documentation directory, run: @@ -297,8 +297,14 @@ Installing and Using Sphinx for rst-html Generation If there are more than one translation, the above commands will automatically build all translations. +Spelling tools +-------------- + +There are several methods to check and/or correct spelling issues in the +documentation files: + (English) typo fixing script ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (Tested on Linux. Should also likely run on MacOSX. Windows users might need to install Cygwin, Python 3, git, curl, sed, grep, awk) @@ -332,6 +338,27 @@ from CRLF to LF might be needed). scripts/typos_whitelist.txt should be used rat than WORDS_WHITE_LIST, only when a word is not a typo in a given context, but might be a typo in another context. +sphinxcontrib.spelling extension +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Here some important steps for using Sphinx's spelling extension: + +- install the `extension `__, such as: + + :: + + python -m pip install sphinxcontrib-spelling==8.0.2 + +- the wordlist for MapServer is located in `/en/spelling_wordlist.dict `__ + +- edit the `options `__ + for the extension in your local `conf.py` (see the "spelling extension options" section), + and make sure that the extension is enabled (see the "General configuration" section) + +- run the spellcheck with: + + :: + + make spelling How translations are handled ---------------------------- @@ -457,7 +484,7 @@ Please for both parameter, keep the alphabetical order to kept them readable. **Structure of the i18n files in the MapServer-documentation root directory** -The structure you need to make all the transaltion process is like below (an +The structure you need to make all the translation process is like below (an excerpt to give you the main required structure) :: diff --git a/en/development/editing/emacs.txt b/en/development/editing/emacs.txt index 1078cb8c10f..2e87eafca5d 100644 --- a/en/development/editing/emacs.txt +++ b/en/development/editing/emacs.txt @@ -52,7 +52,7 @@ Background This file is a fork of Hal Muellers mapserver-mode which he announced nearly `10 years ago at the mapserver-users list -`__. I +`__. I simply updated the keywords and constants to the newest version and adjusted the regular expressions a bit. diff --git a/en/development/git.txt b/en/development/git.txt index d00f0ad5a5c..d35e31f421d 100644 --- a/en/development/git.txt +++ b/en/development/git.txt @@ -28,14 +28,11 @@ sub-projects: 4. `/tinyows `__: TinyOWS source, used for WFS transaction support (online editing of features). - -5. `/msautotest `__: msautotest files, - used for automatically verifying source changes. -6. `/basemaps `__: basemaps files, +5. `/basemaps `__: basemaps files, used to generate mapfiles from OpenStreetMap data. -7. `/ms-ogc-workshop `__: OGC Workshop files, +6. `/ms-ogc-workshop `__: OGC Workshop files, an excellent resource for learning OGC standards (WMS/WFS/WCS/SOS) with MapServer. Code Developer's GitHub Access diff --git a/en/development/rfc/index.txt b/en/development/rfc/index.txt index d82def17df3..19da61171ac 100644 --- a/en/development/rfc/index.txt +++ b/en/development/rfc/index.txt @@ -152,3 +152,5 @@ the project. ms-rfc-138 ms-rfc-139 ms-rfc-140 + ms-rfc-141 + ms-rfc-142 diff --git a/en/development/rfc/ms-rfc-124.txt b/en/development/rfc/ms-rfc-124.txt index d39d3c41f51..61f3b5cd018 100644 --- a/en/development/rfc/ms-rfc-124.txt +++ b/en/development/rfc/ms-rfc-124.txt @@ -29,7 +29,7 @@ following issues have been identified: present in the request. 3. **Style layering**: When several styling rules apply to a feature, only the - first one is taken into account, instead of appliyng them all by following + first one is taken into account, instead of applying them all by following the *painters model* as described in Symbology Encoding specification. 4. **Mark or ExternalGraphic in LineSymbolizer**: MapServer implementation of diff --git a/en/development/rfc/ms-rfc-140.txt b/en/development/rfc/ms-rfc-140.txt index e133dc5eb7a..cf4744e6d8e 100644 --- a/en/development/rfc/ms-rfc-140.txt +++ b/en/development/rfc/ms-rfc-140.txt @@ -6,7 +6,7 @@ MS RFC 140: MapServer Index Page :Author: Seth Girvin :Contact: sethg@geographika.co.uk -:Last Updated: 2025-17-10 +:Last Updated: 2025-10-17 :Version: MapServer 8.6 :Status: Adopted diff --git a/en/development/rfc/ms-rfc-141.txt b/en/development/rfc/ms-rfc-141.txt new file mode 100644 index 00000000000..4242e18c8e2 --- /dev/null +++ b/en/development/rfc/ms-rfc-141.txt @@ -0,0 +1,232 @@ +.. _rfc141: + +================================================ +MS RFC 141: MapServer CONFIG MS_ONLINERESOURCE +================================================ + +:Author: Seth Girvin +:Contact: sethg@geographika.co.uk +:Last Updated: 2026-02-27 +:Version: MapServer 8.8 +:Status: Adopted + +Overview +-------- + +This RFC proposes adding a new environment variable, ``MS_ONLINERESOURCE``, to +the MapServer :ref:`CONFIG file `. + +The variable acts as a global fallback when no service-specific +``*_onlineresource`` metadata (defined in the Mapfile +:ref:`mapfile-web-metadata`) is provided. For background on service-specific +usage, see :ref:`online_resource_wms`. + +The ``*_onlineresource`` settings define the public-facing URLs that MapServer +advertises in GetCapabilities and related responses for accessing its OGC +services (WMS, WFS, WCS, OGC Features API, etc.). These URLs are consumed by clients and must resolve correctly. + +Introducing a global ``MS_ONLINERESOURCE`` addresses the following issues: + +1. Mapfiles currently require service-specific ``*_onlineresource`` values, + or an ``ows_onlineresource`` to be modified for each deployment environment + (for example, local development, staging, and production). + This RFC allows these environment-specific settings + to be defined once in a single ``CONFIG`` file. + +2. When a Mapfile does not define ``*_onlineresource`` metadata, MapServer + attempts to construct the service URL from request headers and server + variables. This approach can produce incorrect or inconsistent URLs in more + complex deployments, particularly when reverse proxies are used. As a + result, explicitly defining ``*_onlineresource`` metadata is currently + strongly recommended. + +Current Implementation +---------------------- + +When a Mapfile does not define ``*_onlineresource`` metadata, MapServer uses +the ``msBuildOnlineResource()`` function (in ``maputil.c``) to construct the +base **online resource URL**. + +The URL is generated dynamically from CGI request data and server environment +variables, and relies on CGI and proxy headers; this can produce incorrect +results in some server or reverse-proxy configurations. + +The function determines the URL components as follows: + +- **Hostname** + + - Uses ``HTTP_X_FORWARDED_HOST`` if present + - Falls back to ``SERVER_NAME`` + - If multiple forwarded hosts are provided, only the first is used + +- **Port** + + - Uses ``HTTP_X_FORWARDED_PORT`` if present + - Otherwise uses ``SERVER_PORT`` + +- **Protocol** + + - Defaults to ``http`` + - Uses ``https`` if ``HTTPS=on`` or ``SERVER_PORT=443`` + - ``HTTP_X_FORWARDED_PROTO`` overrides all other logic + +- **Path** + + - Uses ``SCRIPT_NAME`` + - Appends ``PATH_INFO`` if present + +- **Query parameters** + + - If the request is a GET request and includes a ``map=`` parameter, it is + appended as ``map=...&`` + +The port is omitted when it matches the protocol default (``80`` for HTTP, +``443`` for HTTPS); otherwise it is included explicitly. + +The resulting URL has the general form: + +:: + + [protocol]://[hostname][:port][script][pathinfo]?[map=...&] + +Examples: + +:: + + https://maps.example.com/mapserv? + https://maps.example.com/mapserv/ogc?map=/data/example.map& + http://localhost:8080/cgi-bin/mapserv? + +If the hostname, port, or script name cannot be determined, the function +fails with a CGI error: + +:: + + Impossible to establish server URL. + + +Proposed Implementation +----------------------- + +Users will be able to add the new environment variable to the ``CONFIG`` file as follows: + +:: + + CONFIG + ENV + MS_ONLINERESOURCE "https://maps.example.com/" + END + MAPS + EXAMPLE "/data/mapfiles/example.map" + END + END + +When accessing the Mapfile using its key (``EXAMPLE`` in the above example), a request +such as https://maps.example.com/example/?service=wms&version=1.3.0&request=GetCapabilities will return a +GetCapabilities response with the base URL set to ``https://maps.example.com/``. + +.. code-block:: xml + + + + WMS + Example + + +When accessing a Mapfile using the ``&map=`` parameter, this will be appended to the ``MS_ONLINERESOURCE`` URL. +For example, a request to https://maps.example.com/?map=/data/mapfiles/example.map&service=wms&version=1.3.0&request=GetCapabilities +will return a GetCapabilities response including the following: + +.. code-block:: xml + + + + + + +For OGC API URLs requests such as https://maps.example.com/example/ogcapi/?f=json will return URLs in +the format https://maps.example.com/example/ogcapi/collections?f=html. + +Notes: + +- In any of the above examples, if the ``example.map`` contained ``ows_onlineresource`` + (or a more specific variant such as ``wms_onlineresource`` or ``oga_onlineresource``) + then these would take precedence over the ``CONFIG`` setting and be used instead. + +- If ``MS_ONLINERESOURCE`` is set to an empty string, the resulting base URL + will be empty. Users are responsible for providing a valid URL for their + environment. + +- There are no plans to support separate ``MS_ONLINERESOURCE`` values for + different services. While this could be useful in some scenarios, having + multiple variables such as ``MS_WMS_ONLINERESOURCE`` or + ``MS_WFS_ONLINERESOURCE`` would add unnecessary complexity. + +- ``?`` will be appended to the end of the URL for building OWS URLs, to ensure that query parameters are appended correctly. + +- MAP keys are resolved relative to MS_ONLINERESOURCE, and only one root URL can be configured per CGI instance. + For example, you cannot simultaneously use: + + + https://maps.example.com/dev/example/ + + https://maps.example.com/prod/example/ + + or separate hostnames such as: + + + https://wms.example.com + + https://wfs.example.com + + To support these scenarios, you would need to deploy separate MapServer CGI applications with different CONFIG files. + +Testing +------- + +The ``msautotests`` test suite will be updated to validate various ``CONFIG`` +and Mapfile setups, including: + +- Cases with and without a ``MS_ONLINERESOURCE`` setting +- The case where ``MS_ONLINERESOURCE`` is set to an empty string +- Use of ``map=`` parameter in requests + +Security Concerns +----------------- + +There are no known security concerns at the moment. + +MapScript +--------- + +MapScript already supports ``CONFIG`` files, so no changes are required. + +Example usage: + +:: + + # Create a new map object with a CONFIG file + config = mapscript.configObj(r"C:\MapServer\apps\mapserver.conf") + map = mapscript.mapObj(r"C:\MapServer\my.map", config) + + # The CONFIG file can also be passed to the fromstring helper method + mapscript.fromstring("MAP NAME TEST END", r"C:/MapfileResources/", config_file) + + +Affected files +-------------- + ++ ``maputil.c`` + +Ticket Reference +---------------- + ++ https://github.com/MapServer/MapServer/pull/7434 + +Documentation +------------- + ++ https://github.com/MapServer/MapServer-documentation/pull/1062 + +Voting History +-------------- + ++1 from PSC members TomK, SethG, MikeS, DanielM, JeromeB, SteveL, EvenR, JeffM, JukkaR + +See https://lists.osgeo.org/pipermail/mapserver-dev/2026-February/017342.html for discussion and voting. diff --git a/en/development/rfc/ms-rfc-142.txt b/en/development/rfc/ms-rfc-142.txt new file mode 100644 index 00000000000..a63bfb35f45 --- /dev/null +++ b/en/development/rfc/ms-rfc-142.txt @@ -0,0 +1,440 @@ +.. _rfc142: + +==================================================================== +MS RFC 142: Scalebar Measurement Modes +==================================================================== + +:Author: Tamas Szekeres +:Contact: szekerest at gmail.com +:Last Updated: 2026-05-16 +:Version: MapServer 8.8 +:Status: Draft + +Overview +-------- + +This RFC proposes adding explicit measurement modes to the MapServer +``SCALEBAR`` object. The goal is to preserve the current Cartesian scalebar +behavior by default while allowing users to request local geodesic ground +distance measurement for projections where projected map units are not equal to +ground distance. + +The main motivating case is Web Mercator / EPSG:3857. In that projection, +coordinates are expressed in meters, but projected meters increasingly differ +from local ground meters away from the equator. The current scalebar +implementation treats projected coordinate units as a flat Cartesian plane, so +metric scalebars can overstate local ground distance in EPSG:3857 and similar +projections. + +This RFC introduces an explicit ``MEASURE`` keyword: + +.. code-block:: mapfile + + SCALEBAR + UNITS KILOMETERS + MEASURE CARTESIAN + END + + SCALEBAR + UNITS KILOMETERS + MEASURE GEODESIC + END + +``MEASURE CARTESIAN`` remains the default and preserves existing output. +``MEASURE GEODESIC`` computes a local ground distance for the sampled scalebar +pixel span. + +Current Implementation +---------------------- + +The current scalebar implementation is centered in ``mapscale.c``. + +The main functions are: + +- ``msDrawScalebar()``: computes the interval length, creates the scalebar + image, and renders the scalebar graphics and labels. +- ``msEmbedScalebar()``: renders the scalebar into a temporary image and embeds + it as a generated symbol through a synthetic layer. +- ``msInchesPerUnit()``: returns the unit conversion factor used by the + Cartesian calculation. +- ``msCalculateScale()``: computes the map scale denominator. This is related + map state, but it is not the scalebar measurement algorithm itself. + +The current distance calculation in ``msDrawScalebar()`` is approximately: + +:: + + distance = + map.cellsize * desired_pixel_width / + (inches_per_scalebar_unit / inches_per_map_unit) + +The implementation then rounds the interval value, converts the rounded +interval back to pixels, and shrinks the desired pixel width until the bar and +label fit the requested image width. + +This algorithm is fast and stable, but it assumes a Cartesian coordinate plane. +MapServer documentation already describes the scalebar as Cartesian and not +geodesic. + +Problem Statement +----------------- + +The current implementation is not suitable when users expect a scalebar to +represent local ground distance in a distorted projected CRS. + +For example, with ``MAP PROJECTION`` set to EPSG:3857 and ``SCALEBAR UNITS +METERS`` or ``KILOMETERS``, the current implementation treats a horizontal pixel +span in projected meters as if it were a ground-distance span. This is only +approximately true near the equator. + +Issue https://github.com/MapServer/MapServer/issues/7397 reports this behavior +for EPSG:3857 and compares MapServer output against distance calculations in a +client map library. + +Proposed Solution +----------------- + +Add a new ``MEASURE`` keyword to the ``SCALEBAR`` object. + +Supported values: + +- ``CARTESIAN``: existing projected-plane behavior. +- ``GEODESIC``: local ellipsoidal ground-distance behavior. + +An optional ``SPHERICAL`` mode may be considered later as an explicitly +approximate mode, but it is not required for the first implementation. + +The default value is: + +.. code-block:: mapfile + + MEASURE CARTESIAN + +The default must not change existing scalebar output. + +Mapfile Syntax +-------------- + +Example: + +.. code-block:: mapfile + + SCALEBAR + STATUS EMBED + POSITION LL + UNITS KILOMETERS + INTERVALS 4 + SIZE 200 3 + MEASURE GEODESIC + LABEL + SIZE 10 + COLOR 0 0 0 + END + END + +``MEASURE`` should be parsed, serialized, and exposed consistently with other +``scalebarObj`` properties. + +The following paths must round-trip the new setting: + +- mapfile parsing through ``loadScalebar()`` +- mapfile writing through ``writeScalebar()`` +- runtime string updates through ``msUpdateScalebarFromString()`` +- string serialization through ``msWriteScalebarToString()`` +- MapScript bindings for ``scalebarObj`` + +Architecture +------------ + +The implementation should introduce a measurement layer between +``msDrawScalebar()`` and the existing interval fitting logic. + +:: + + msDrawScalebar() + measure desired pixel span + choose rounded interval + convert interval to pixels + fit width + render existing scalebar styles + +The measurement layer should replace only the distance estimate. The existing +rounding, fit-shrinking, style rendering, label placement, and image creation +structure should remain as close to the current implementation as practical. + +A possible helper API is: + +.. code-block:: c + + static int msScalebarMeasurePixelSpan(mapObj *map, + const scalebarObj *scalebar, + double pixel_width, + scalebarDistanceObj *distance); + +where ``scalebarDistanceObj`` contains a numeric value and output unit. + +The helper dispatches to the configured backend: + +- Cartesian backend +- Geodesic backend +- Optional spherical backend, if later accepted + +Cartesian Measurement +--------------------- + +The Cartesian backend preserves the current calculation: + +:: + + distance = + map.cellsize * pixel_width / + (inches_per_scalebar_unit / inches_per_map_unit) + +This backend is the default and must keep current behavior unchanged. + +Geodesic Measurement +-------------------- + +The geodesic backend computes a local distance for the horizontal pixel span +used by the scalebar fitting loop. + +Algorithm: + +1. Choose a deterministic representative sample pixel from ``SCALEBAR + POSITION`` and ``SCALEBAR OFFSET``. +2. Convert the pixel endpoints to map coordinates. +3. If the map CRS is geographic, use the endpoint coordinates directly as + longitude/latitude. +4. Otherwise transform endpoints from ``map->projection`` to ``map->latlon``. +5. Compute inverse geodesic distance on the appropriate ellipsoid. +6. Convert the measured distance in meters to ``scalebar->units``. + +This work must reuse MapServer's existing projection context lifecycle and +thread-safety model. It should not introduce an independent projection context +management path. + +If endpoint transformation or geodesic distance calculation fails, the scalebar +draw operation must fail with a clear error. ``MEASURE GEODESIC`` must not +silently fall back to Cartesian output. + +Sample Position +--------------- + +Geodesic scalebars are local measurements. A deterministic sample-position +policy is therefore required. + +Initial policy: + +- lower positions (``LL``, ``LC``, ``LR``) sample near the lower map edge +- upper positions (``UL``, ``UC``, ``UR``) sample near the upper map edge +- unsupported positions fall back to the map vertical centerline +- ``OFFSET`` is treated as a simple vertical adjustment of the sample row +- generated scalebar image height is ignored for the first implementation +- the horizontal sample coordinate is always the map horizontal center +- the final sample row is clamped to the valid map image extent +- the same policy applies to standalone and embedded scalebars + +This intentionally uses existing ``POSITION`` and ``OFFSET`` settings as +measurement hints instead of adding a separate ``SAMPLEPOSITION`` or +``MEASUREPOSITION`` keyword. For standalone scalebars, these settings describe +where the user intends to place the generated scalebar relative to the map in +the surrounding user interface. + +A representative implementation shape is: + +.. code-block:: c + + static void msScalebarSamplePixel(const mapObj *map, double *px, + double *py) { + double x = map->width * 0.5; + double y; + + switch (map->scalebar.position) { + case MS_LL: + case MS_LR: + case MS_LC: + y = map->height - map->scalebar.offsety - 1.0; + break; + + case MS_UL: + case MS_UR: + case MS_UC: + y = map->scalebar.offsety; + break; + + default: + y = map->height * 0.5; + break; + } + + *px = x; + *py = MS_MAX(0.0, MS_MIN(y, map->height - 1.0)); + } + +Documentation must clearly explain that a geodesic scalebar reports local scale +at the selected sample position. It is not a globally valid scale for every +part of the map. + +Unit Conversion +--------------- + +The local measurement backends should produce a canonical distance in meters. +The result is then converted to the configured scalebar output unit. + +Existing supported scalebar output units must continue to work: + +- inches +- feet +- miles +- meters +- kilometers +- nautical miles + +Decimal degrees should remain invalid as scalebar output units unless a +separate RFC changes that behavior. + +Scale Denominator +----------------- + +This RFC does not change ``msCalculateScale()`` semantics. + +Scale denominator calculation and scalebar distance measurement must remain +separate concerns. Any broader change to scale denominator behavior should be +covered by a separate RFC. + +Backwards Compatibility Issues +------------------------------ + +The default behavior remains ``MEASURE CARTESIAN``. Existing mapfiles that do +not use the new keyword should render the same scalebars as before. + +The new behavior is opt-in: + +.. code-block:: mapfile + + SCALEBAR + MEASURE GEODESIC + END + +No implicit behavior change is proposed for existing metric scalebars. This is +intentional: some users may rely on projected-plane scalebars, even when the +output unit is meters or kilometers. + +Security Implications +--------------------- + +No new security implications are expected. + +The geodesic backend may perform additional projection operations during +scalebar rendering. These should use existing MapServer projection handling and +error reporting paths. + +MapScript Implications +---------------------- + +MapScript must expose the new measurement mode on ``scalebarObj``. + +MapScript should be able to: + +- read the default measurement mode +- set the measurement mode +- preserve the setting when maps are serialized or written + +Documentation Needs +------------------- + +The following documentation should be updated: + +- ``MapServer-documentation/en/mapfile/scalebar.txt`` +- ``MapServer-documentation/en/utilities/scalebar.txt`` +- MapScript documentation where ``scalebarObj`` properties are listed + +Documentation must cover: + +- ``MEASURE CARTESIAN`` as the default +- ``MEASURE GEODESIC`` as opt-in local ground-distance measurement +- how ``POSITION`` and ``OFFSET`` select the representative geodesic sample + location +- failure behavior when geodesic measurement cannot be computed +- the local nature of geodesic scalebars + +Testing +------- + +Numeric measurement tests should be added before relying on rendered-image +comparisons. + +Required test cases: + +- default Cartesian behavior remains unchanged +- EPSG:3857 at a higher latitude where local ground distance differs from + projected distance +- invalid projection or endpoint transformation failure +- parser and writer round-trip for ``MEASURE CARTESIAN`` and + ``MEASURE GEODESIC`` +- runtime string update through ``msUpdateScalebarFromString()`` +- string serialization through ``msWriteScalebarToString()`` +- MapScript read/write access to the measurement mode + +Rendering tests should include: + +- Test explicit cartesian scalebar measurement in EPSG:3857 +- Test local geodesic scalebar measurement in EPSG:3857 +- Test geodesic scalebar failure without a usable map projection + +Implementation Plan +------------------- + +1. Refactor scalebar distance calculation into an internal measurement helper. + Route existing Cartesian behavior through the helper without changing + output. + +2. Add ``MEASURE`` to ``scalebarObj``, the parser, writer, string update path, + string serialization path, and MapScript bindings. + +3. Implement the geodesic backend using endpoint sampling, existing MapServer + projection context management, and ellipsoidal inverse distance. + +4. Add numeric tests for measurement behavior. + +5. Add rendering tests for default behavior and opt-in geodesic behavior. + +6. Update user and MapScript documentation. + +Out of Scope +------------ + +The following topics are explicitly out of scope: + +- changing scalebar visual styles +- changing ``msCalculateScale()`` + +Affected Files +-------------- + +Expected affected source files: + +- ``mapserver.h`` +- ``mapfile.c`` +- ``mapscale.c`` +- ``mapcopy.c`` if ``scalebarObj`` copy handling requires updates +- ``mapscript/swiginc/scalebar.i`` +- relevant MapScript generated files, depending on the binding update workflow +- ``msautotest`` test files + +Expected affected documentation files: + +- ``en/mapfile/scalebar.txt`` +- ``en/utilities/scalebar.txt`` +- relevant MapScript documentation + +Ticket ID and References +------------------------ + +- EPSG:3857 scalebar report: + https://github.com/MapServer/MapServer/issues/7397 + +Voting History +-------------- + +No vote yet. Draft RFC for discussion. diff --git a/en/development/rfc/ms-rfc-58.txt b/en/development/rfc/ms-rfc-58.txt index 136e1545642..7acdc3304bd 100644 --- a/en/development/rfc/ms-rfc-58.txt +++ b/en/development/rfc/ms-rfc-58.txt @@ -128,7 +128,7 @@ Supported Folder elements are: +-------------------------------------------------------------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TimePrimitive | No | | +-------------------------------------------------------------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| styleUrl | Yes | The user can use the kml_folder_display layer or map level metedata to choose a setting. Possible values are 'check' (default), 'radioFolder', 'checkOffOnly', 'checkHideChildren'. | +| styleUrl | Yes | The user can use the kml_folder_display layer or map level metadata to choose a setting. Possible values are 'check' (default), 'radioFolder', 'checkOffOnly', 'checkHideChildren'. | +-------------------------------------------------------------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | RegionMetadataExtendedData | No | | +-------------------------------------------------------------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -206,11 +206,11 @@ General notes on layers - Labelcache is turned off on each layer - Projection block should be set. If not set It will be assumed that the data is in lat/lon projection (a debug message will be sent to the user: Debug Message 1) - Possible to output vector layers as raster using metadata: "KML_OUTPUTASRASTER" "true" -- The user can use the KML_FOLDER_DSIPLAY layer or map level metedata to choose a setting. Possible values are 'check' (default), 'radioFolder', 'checkOffOnly', 'checkHideChildren'. -- The user can use metedata KML_DESCRIPTION or KML_INCLUDE_ITEMS to define the description attached to each feature. -- The user can use metedata KML_ALTITUDEMODE to specify how altitude components in the element are interpreted. Possible values are: absolute, relativeToGround, clampToGround. https://developers.google.com/kml/documentation/kmlreference?csw=1#altitudemode -- The user can use metedata KML_EXTRUDE to specify whether to connect the LinearRing to the ground. https://developers.google.com/kml/documentation/kmlreference?csw=1#tessellate -- The user can use metedata KML_TESSELLATE to specify whether to allow the LinearRing to follow the terrain. https://developers.google.com/kml/documentation/kmlreference?csw=1#extrude +- The user can use the KML_FOLDER_DSIPLAY layer or map level metadata to choose a setting. Possible values are 'check' (default), 'radioFolder', 'checkOffOnly', 'checkHideChildren'. +- The user can use metadata KML_DESCRIPTION or KML_INCLUDE_ITEMS to define the description attached to each feature. +- The user can use metadata KML_ALTITUDEMODE to specify how altitude components in the element are interpreted. Possible values are: absolute, relativeToGround, clampToGround. https://developers.google.com/kml/documentation/kmlreference?csw=1#altitudemode +- The user can use metadata KML_EXTRUDE to specify whether to connect the LinearRing to the ground. https://developers.google.com/kml/documentation/kmlreference?csw=1#tessellate +- The user can use metadata KML_TESSELLATE to specify whether to allow the LinearRing to follow the terrain. https://developers.google.com/kml/documentation/kmlreference?csw=1#extrude diff --git a/en/development/rfc/ms-rfc-65.txt b/en/development/rfc/ms-rfc-65.txt index cdae4e541f4..81e5602474c 100644 --- a/en/development/rfc/ms-rfc-65.txt +++ b/en/development/rfc/ms-rfc-65.txt @@ -4,7 +4,7 @@ MS RFC 65 - Single-pass Query Changes for 6.0 =============================================================== -:Date: 2010/11/18 +:Date: 2010-11-18 :Author: Steve Lime :Contact: sdlime at comcast.net :Last Edited: 2010-11-18 @@ -48,7 +48,7 @@ Cleaning up the query result portion of the code. and msLayerGetShape() into a new msLayerGetShape(). 3) Remove resultsGetShape() and getFeature() methods from MapScript. 4) Refactor getShape() MapScript method to a) return a shapeObj * like getFeature() does and to b) take a resultCacheMemberObj as input - instead of the shape and tile indexes. That simplifies the inferface and abstracts the indexes so that we have more flexibility moving + instead of the shape and tile indexes. That simplifies the interface and abstracts the indexes so that we have more flexibility moving forward. We wouldn't necessarily have to change the driver implementations to take a resultCacheMemberObj at this point, that could be done later. diff --git a/en/development/rfc/ms-rfc-91.txt b/en/development/rfc/ms-rfc-91.txt index 7e8a40a03c0..aa788dfef16 100644 --- a/en/development/rfc/ms-rfc-91.txt +++ b/en/development/rfc/ms-rfc-91.txt @@ -4,7 +4,7 @@ MS RFC 91: Layer Filter Normalization ========================================================================= -:Date: 2014/7/14 +:Date: 2014-07-14 :Author: Steve Lime :Contact: sdlime@comcast.net :Status: Draft @@ -121,7 +121,7 @@ implementation approach, instead it offers an opportunity for more complete tran 3.2 Overview ------------ -* limited additions to logial expression syntax are recommended: +* limited additions to logical expression syntax are recommended: - spatial operator syntax (e.g. A INTERSECTS B) will be deprecated in favor of a functional notation (e.g. INTERSECTS(A, B) = TRUE). This is more consistent with spatialally enabled SQL syntax and easer to translate. - BEYOND/DWITHIN operators will *only* exist in the functional form, they are useless in logical expressions as they site now diff --git a/en/development/tests/autotest.txt b/en/development/tests/autotest.txt index 4316ca1dbd5..537d1d87224 100644 --- a/en/development/tests/autotest.txt +++ b/en/development/tests/autotest.txt @@ -8,7 +8,7 @@ :Contact: warmerdam at pobox.com :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2024-06-20 +:Last Updated: 2026-07-03 .. contents:: Table of Contents :depth: 2 @@ -25,7 +25,7 @@ Getting `msautotest` Skip this section if you've followed the :ref:`vagrant` steps. `msautotest` is available from GitHub, and exists inside the *main* -MapServer repository, in /MapServer/msautotest/. It can be fetched with +MapServer repository, in `/MapServer/msautotest/`. It can be fetched with something like:: git clone https://github.com/MapServer/MapServer.git @@ -52,7 +52,7 @@ already installed. msautotest also requires that the executables built with MapServer, notably :ref:`map2img`, :ref:`legend `, :ref:`mapserv` and :ref:`scalebar `, are available in the path. This can be -accomplished by adding the MapServer build directory to my path. +accomplished by adding the MapServer build directory to your path. csh:: @@ -88,6 +88,8 @@ each as its own subdirectory, such as: :: + api + config gdal misc mspython @@ -96,6 +98,14 @@ each as its own subdirectory, such as: renderers sld wxs + +.. note:: + The PHP MapScript tests inside `/php` can be run through PHPUnit, by following the steps in + its `README.md `__ + +.. tip:: + If you add a new category (subdirectory), you can add that folder to the + `testpaths` parameter in the `/msautotest/pytest.ini` file. You can run all tests with just `pytest` from `msautotest` root directory. All standard options of pytest can be used to filter tests to @@ -226,7 +236,7 @@ that fails, for image files, there is an attempt to compare the image checksums using the GDAL Python bindings. If the GDAL Python bindings are not available this step is quietly skipped. -If you install the PerceptualDiff program (http://pdiff.sourceforge.net/) and +If you install the PerceptualDiff program (https://pdiff.sourceforge.net/) and it is in the path, then msautotest will attempt to use it as a last fallback when comparing images. If images are found to be "perceptually" the same the test will pass with the message "result images perceptually match, though @@ -245,7 +255,7 @@ REQUIRES - Handling Build Options Because MapServer can be built with many possible extensions, such as support for OGR, GDAL, and PROJ.4, it is desirable to have the testsuite automatically -detect which tests should be run based on the configuratio of MapServer. This +detect which tests should be run based on the configuration of MapServer. This is accomplished by capturing the version output of "map2img -v" and using the various keys in that to decide which tests can be run. A directory can have a file called "all_require.txt" with a "REQUIRES:" line indicating components diff --git a/en/development/translation.txt b/en/development/translation.txt index b6e26fddc5e..a1ccd909ad4 100644 --- a/en/development/translation.txt +++ b/en/development/translation.txt @@ -54,7 +54,7 @@ Starting with Transifex Subscribe to Transifex ----------------------- -You need to subscribe to Transifex before translating. Go to `Transifex subscribing page `_ and create a new account. +You need a Transifex account before translating. Go to `Open Source Transifex account page `_ and create a new account. .. image:: ../images/documentation/tr_newaccount.png @@ -64,9 +64,9 @@ Find the project ---------------- There are several OSGeo projects hosted on Transifex, here are some of them: -* `MapServer `_ -* `PostGIS `_ -* `QGIS `_ +* `MapServer `_ +* `GeoNetwork `_ +* `QGIS `_ You can find more in the Transifex website. diff --git a/en/documentation.txt b/en/documentation.txt index 3ef249a67a2..42cfda76ad1 100644 --- a/en/documentation.txt +++ b/en/documentation.txt @@ -19,7 +19,12 @@ :height: 15 :width: 15 :alt: PDF icon - :target: https://download.osgeo.org/mapserver/docs/MapServer.pdf + :target: https://download.osgeo.org/mapserver/docs/MapServer.pdf + +.. tip:: + + Review MapServer's `Security Policy `__, + and also check if there are any recently published `vulnerabilities `__. Introduction ....................................................... diff --git a/en/download.txt b/en/download.txt index f48e846009a..78878d83ed3 100644 --- a/en/download.txt +++ b/en/download.txt @@ -18,6 +18,7 @@ Current Release(s) * MapServer + * **2026-06-01** MapServer-8.6.4 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * **2025-09-19** MapServer-8.4.1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * **2024-09-02** MapServer-8.2.2 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * **2024-06-11** MapServer-8.0.2 `tar.gz `__ | :ref:`Changelog ` @@ -27,7 +28,7 @@ Current Release(s) * **2021-04-30** MapServer-7.0.8 `tar.gz `__ | :ref:`Changelog ` * MapCache - * **2024-08-02** MapCache-1.14.1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + * **2026-04-20** MapCache-1.16.0 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * TinyOWS @@ -67,6 +68,7 @@ Current Release Previous Releases .............................................................................. +* `MapServer-8.4-Documentation.pdf `__ |image| * `MapServer-8.2-Documentation.pdf `__ |image| * `MapServer-8.0-Documentation.pdf `__ |image| * `MapServer-7.6-Documentation.pdf `__ |image| @@ -242,7 +244,7 @@ MapServer 7.x (Itasca) Demo The original MapServer Itasca demo (which does not work with recent MapServer versions) can still be `downloaded `__. -MapServer 7.x Tutoral + data +MapServer 7.x Tutorial + data The MapServer 7 tutorial, including all working mapfiles, highway shield icons, and data, is available for `download `__. More info can be found on the :ref:`Tutorial Background ` page. diff --git a/en/download_archives.txt b/en/download_archives.txt index 76ad65aa915..76522e0c071 100644 --- a/en/download_archives.txt +++ b/en/download_archives.txt @@ -15,6 +15,18 @@ Past Releases .............................................................................. +* **2026-06-01** MapServer-8.6.4 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2026-05-07** MapServer-8.6.3 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2026-04-20** MapCache-1.16.0 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2026-04-19** MapServer-8.6.2 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2026-03-23** MapServer-8.6.1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2025-12-03** MapServer-8.6.0 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + * **2025-09-19** MapServer-8.4.1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * **2025-01-15** MapServer-8.4.0 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` @@ -166,6 +178,12 @@ Past Releases Development Releases .............................................................................. +* **2025-11-27** MapServer-8.6.0-rc1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2025-11-18** MapServer-8.6.0-beta2 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + +* **2025-11-13** MapServer-8.6.0-beta1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` + * **2025-01-08** MapServer-8.4.0-rc1 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` * **2024-12-14** MapServer-8.4.0-beta2 `tar.gz `__ | `.zip `__ | :ref:`Changelog ` diff --git a/en/faq.txt b/en/faq.txt index 77a2401c28d..b635e16029b 100644 --- a/en/faq.txt +++ b/en/faq.txt @@ -638,4 +638,5 @@ What versions of MapServer will be patched for security vulnerabilities? The MapServer team will provide security patches for the two most recent release series. Patches will be provided for a period of three years from the release date of the current series. Review the MapServer `Security Policy `__ -for more details. \ No newline at end of file +for more details. You can also check if there are any recently published MapServer +`vulnerabilities `__. \ No newline at end of file diff --git a/en/images/index-page-ms4w.png b/en/images/index-page-ms4w.png new file mode 100644 index 00000000000..18448e21657 Binary files /dev/null and b/en/images/index-page-ms4w.png differ diff --git a/en/images/qgis-add-wcs-layer.png b/en/images/qgis-add-wcs-layer.png new file mode 100644 index 00000000000..18e75d87c95 Binary files /dev/null and b/en/images/qgis-add-wcs-layer.png differ diff --git a/en/images/qgis-add-wcs-layer2.png b/en/images/qgis-add-wcs-layer2.png new file mode 100644 index 00000000000..8595f7adb6b Binary files /dev/null and b/en/images/qgis-add-wcs-layer2.png differ diff --git a/en/images/qgis-network-logger.png b/en/images/qgis-network-logger.png index 9e1145e06d2..125f8ab457d 100644 Binary files a/en/images/qgis-network-logger.png and b/en/images/qgis-network-logger.png differ diff --git a/en/images/wcs-index1.png b/en/images/wcs-index1.png new file mode 100644 index 00000000000..24cd5e1fee8 Binary files /dev/null and b/en/images/wcs-index1.png differ diff --git a/en/images/wcs-index2.png b/en/images/wcs-index2.png new file mode 100644 index 00000000000..d489aed803a Binary files /dev/null and b/en/images/wcs-index2.png differ diff --git a/en/include/announcements.inc b/en/include/announcements.inc index 7410dc7be1b..3e7df21767a 100644 --- a/en/include/announcements.inc +++ b/en/include/announcements.inc @@ -1,10 +1,96 @@ +**2026-06-01 - MapServer 8.6.4 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.4 has been issued in order to fix +two vulnerabilities. See the :ref:`changelog ` +for the list of changes. +You may also review the security advisories for this release: + +1. `OpenLayers viewer with WMS `__ advisory +2. `PostGIS support `__ advisory + +You may also review MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.4 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-05-07 - MapServer 8.6.3 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.3 has been issued in order to fix +a vulnerability in the SLD parser. See the :ref:`changelog ` +for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-45104 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.3 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-04-20 - MapCache 1.16.0 is released** + +The major version MapCache 1.16.0 has been released. +The list of changes for this release can be found in +the MapCache :ref:`changelog `. + +Head to :ref:`download` to obtain a copy. + +**2026-04-19 - MapServer 8.6.2 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.2 has been issued in order to fix +a vulnerability in the OpenLayers viewer (with WMS 1.3.0 requests). +See the :ref:`changelog ` for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-42030 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.2 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2026-03-23 - MapServer 8.6.1 is released** + +.. important:: + Security release available + +The security release of MapServer 8.6.1 has been issued in order to fix +a vulnerability in the SLD parser. +See the :ref:`changelog ` for the list of changes. +You may also review this `Security Advisory `__, +the CVE record: `CVE-2026-33721 `__, +as well as MapServer's `Security Policy `__. +As security for the 7.6 branch has ended, and branches 8.4, 8.2 & 8.0 are not supported, +all users are strongly encouraged to upgrade to the MapServer 8.6.1 release (see the +:ref:`Migration Guide `). + +Head to :ref:`download` to obtain a copy. + +**2025-12-03 - MapServer 8.6.0 is released** + +The major version MapServer 8.6 has been released. The list of +major changes for this release can be found in the :ref:`8.6 announcement `. +See the :ref:`changelog ` +for the full list of changes and head to :ref:`download` to obtain a copy. + **2025-09-19 - MapServer 8.4.1 is released** .. important:: Security release available -The maintenance release of MapServer 8.4.1 has been issued in order to fix -a security flaw for WFS filters through OGR. +The security release of MapServer 8.4.1 has been issued in order to fix +a vulnerability for WFS filters through OGR. See the :ref:`changelog ` for the list of changes. You may also review MapServer's `Security Policy `__, the CVE record: `CVE-2025-59431 `__, @@ -22,20 +108,6 @@ major changes for this release can be found in the :ref:`8.4 announcement ` for the full list of changes and head to :ref:`download` to obtain a copy. -**2025-01-08 - MapServer 8.4.0-rc1 is released** - -The first release candidate for MapServer 8.4.0 has been released. The list of -major changes for this release can be found in the :ref:`8.4 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2024-12-14 - MapServer 8.4.0-beta2 is released** - -The second beta for MapServer 8.4 has been released. The list of -major changes for this release can be found in the :ref:`8.4 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - **2024-09-02 - MapServer 8.2.2 is released** The maintenance release of MapServer 8.2.2 is now available. @@ -70,73 +142,3 @@ major changes for this release can be found in the :ref:`8.2 announcement ` for the full list of changes and head to :ref:`download` to obtain a copy. -**2024-06-28 - MapServer 8.2.0-rc3 is released** - -The third release candidate for MapServer 8.2.0 has been released. The list of -major changes for this release can be found in the :ref:`8.2 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2024-06-27 - MapServer 8.2.0-rc2 is released** - -The second release candidate for MapServer 8.2.0 has been released. The list of -major changes for this release can be found in the :ref:`8.2 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2024-06-14 - MapServer 8.2.0-rc1 is released** - -The first release candidate for MapServer 8.2.0 has been released. The list of -major changes for this release can be found in the :ref:`8.2 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2024-06-11 - MapServer 8.2.0-beta3, 8.0.2, 7.6.6 are released** - -Several maintenance releases of MapServer have been issued in order to fix -a security flaw for regex validation (CVE has been requested). -See the :ref:`8.2.0-beta3 changelog `, -:ref:`8.0.2 changelog `, -:ref:`7.6.6 changelog ` for the list of changes. - -Head to :ref:`download` to obtain a copy. - -**2024-06-08 - MapServer 8.2.0-beta2 is released** - -The second beta for MapServer 8.2 has been released. The list of -major changes for this release can be found in the :ref:`8.2 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2024-05-24 - TinyOWS 1.2.1 is released** - -The minor version TinyOWS 1.2.1 has been released. This release is in honor -of Olivier Courtin, the original TinyOWS developer & visionary. -The list of changes for this release can be found in -the :ref:`changelog `. - -Head to :ref:`download` to obtain a copy. - -**2023-04-18 - MapServer 8.0.1 and 7.6.5 are released** - -The maintenance release of MapServer 8.0.1 and 7.6.5 are now available. -See the :ref:`8.0.1 changelog `, -:ref:`7.6.5 changelog ` -for the full list of changes. - -Head to :ref:`download` to obtain a copy. - -**2023-01-30 - MapCache 1.14.0 is released** - -MapCache 1.14.0 has been released. This is a security release to handle -a string formatting injection vulnerability, and it affects all previous versions. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - -**2022-09-12 - MapServer 8.0.0 is released** - -The major version MapServer 8.0 has been released. The list of -major changes for this release can be found in the :ref:`8.0 announcement `. -See the :ref:`changelog ` -for the full list of changes and head to :ref:`download` to obtain a copy. - diff --git a/en/input/raster.txt b/en/input/raster.txt index dc81d062c3a..fc11eddc9de 100644 --- a/en/input/raster.txt +++ b/en/input/raster.txt @@ -11,7 +11,7 @@ :Contact: warmerdam at pobox.com :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2022-08-20 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 2 diff --git a/en/input/vector/contour.txt b/en/input/vector/contour.txt index ee01a808dd4..33bf9632974 100644 --- a/en/input/vector/contour.txt +++ b/en/input/vector/contour.txt @@ -52,9 +52,9 @@ PROCESSING settings: * CONTOUR_ITEM: provides a name for the item (attribute) in which to put the elevation. (optional) - You can also provide explicit min/max scaledenom in the CONTOUR_iNTERVAL or + You can also provide explicit min/max scaledenom in the CONTOUR_INTERVAL or CONTOUR_LEVELS values if you wish to use scale-dependent contour spacing. This - is done by adding an optional "miscaledenom,maxscaledenom:" prefix to the + is done by adding an optional "minscaledenom,maxscaledenom:" prefix to the value or list of values. See the example below. .. warning:: diff --git a/en/input/vector/kml.txt b/en/input/vector/kml.txt index 2a580899090..54dc7f88c0e 100644 --- a/en/input/vector/kml.txt +++ b/en/input/vector/kml.txt @@ -10,7 +10,7 @@ Keyhole Markup Language (KML) is an XML-based language for managing the display of 3D geospatial data. KML is a standard maintained by the Open -Geospatial Consoritum (OGC). +Geospatial Consortium (OGC). Links to KML-Related Information -------------------------------- diff --git a/en/input/vector/ogr.txt b/en/input/vector/ogr.txt index ef4b4bea80a..f6bcd6c64a9 100644 --- a/en/input/vector/ogr.txt +++ b/en/input/vector/ogr.txt @@ -9,7 +9,7 @@ OGR Vector Layers Through MapServer :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2021-05-06 +:Last Updated: 2026-06-02 .. contents:: Table of Contents :depth: 3 @@ -75,11 +75,10 @@ Here is a list of some of the popular vector formats that are supported: - `ArcInfo E00 Coverages`_ - Atlas BNA (see GDAL `extra-drivers `__) - `Comma Separated Value (.csv)`_ -- `DODS/OPeNDAP`_ +- DODS/OPeNDAP (see GDAL `extra-drivers `__) - `ESRI Personal GeoDatabase`_ - `ESRI Shapefiles`_ -- `FMEObjects Gateway`_ -- `Géoconcept Export`_ +- FME (see GDAL `extra-drivers `__) - `GeoJSON`_ - `GeoPackage`_ - `GeoRSS`_ @@ -88,7 +87,7 @@ Here is a list of some of the popular vector formats that are supported: - `GRASS`_ - `GPX`_ - `Informix DataBlade`_ -- `INGRES`_ +- INGRES (see GDAL `extra-drivers `__) - `INTERLIS`_ - `KML`_ - `MapInfo files`_ @@ -96,10 +95,8 @@ Here is a list of some of the popular vector formats that are supported: - `Microstation DGN files`_ - `MySQL`_ - `ODBC`_ -- `OGDI Vectors`_ - `Oracle Spatial`_ - `PostgreSQL`_ -- `SDTS`_ - `SQLite`_ - `UK.NTF (National Transfer Format)`_ - `US Census TIGER/Line`_ @@ -1017,33 +1014,27 @@ SISTEMA INFORMATIVO TERRITORIALE ED AMBIENTALE ( http://www.geografia.toscana.it .. _`ArcInfo Binary Coverages`: https://gdal.org/drivers/vector/avcbin.html .. _`ArcInfo E00 Coverages`: https://gdal.org/drivers/vector/avce00.html .. _`Comma Separated Value (.csv)`: https://gdal.org/drivers/vector/csv.html -.. _`DODS/OPeNDAP`: https://gdal.org/drivers/vector/dods.html .. _`DWG`: https://gdal.org/drivers/vector/dwg.html .. _`DXF`: https://gdal.org/drivers/vector/dxf.html .. _`ESRI Personal GeoDatabase`: https://gdal.org/drivers/vector/pgeo.html .. _`ESRI Shapefiles`: https://gdal.org/drivers/vector/shapefile.html -.. _`FMEObjects Gateway`: https://gdal.org/drivers/vector/fme.html .. _`GML`: https://gdal.org/drivers/vector/gml.html .. _`GMT`: https://gdal.org/drivers/vector/gmt.html -.. _`Géoconcept Export`: https://gdal.org/drivers/vector/geoconcept.html .. _`GeoJSON`: https://gdal.org/drivers/vector/geojson.html .. _`GeoPackage`: https://gdal.org/drivers/vector/gpkg.html .. _`GeoRSS`: https://gdal.org/drivers/vector/georss.html .. _`GPX`: https://gdal.org/drivers/vector/gpx.html .. _`GRASS`: https://gdal.org/drivers/vector/grass.html .. _`Informix DataBlade`: https://gdal.org/drivers/vector/idb.html -.. _`INGRES`: https://gdal.org/drivers/vector/ingres.html .. _`INTERLIS`: https://gdal.org/drivers/vector/ili.html .. _`KML`: https://gdal.org/drivers/vector/kml.html .. _`MapInfo files`: https://gdal.org/drivers/vector/mitab.html .. _`Memory`: https://gdal.org/drivers/vector/memory.html .. _`Microstation DGN files`: https://gdal.org/drivers/vector/dgn.html .. _`MySQL`: https://gdal.org/drivers/vector/mysql.html -.. _`OGDI Vectors`: https://gdal.org/drivers/vector/ogdi.html .. _`ODBC`: https://gdal.org/en/stable/drivers/vector/odbc.html .. _`Oracle Spatial`: https://gdal.org/en/stable/drivers/vector/oci.html .. _`PostgreSQL`: https://gdal.org/drivers/vector/pg.html -.. _`SDTS`: https://gdal.org/drivers/vector/sdts.html .. _`SQLite`: https://gdal.org/drivers/vector/sqlite.html .. _`UK.NTF (National Transfer Format)`: https://gdal.org/drivers/vector/ntf.html .. _`US Census TIGER/Line`: https://gdal.org/drivers/vector/tiger.html diff --git a/en/input/vector/oracle.txt b/en/input/vector/oracle.txt index 87c818bb4ec..6609a64965d 100644 --- a/en/input/vector/oracle.txt +++ b/en/input/vector/oracle.txt @@ -7,7 +7,7 @@ :Author: Bart van den Eijnden :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2021-05-05 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 4 @@ -344,7 +344,7 @@ Syntax for your MAP file: .. note:: Make sure you set the wms_extent METADATA for the LAYER, as otherwise the - "Getcapabilities" request takes a lot of time. + "getCapabilities" request takes a lot of time. What MapServer Components are related to Oracle Spatial access -------------------------------------------------------------- diff --git a/en/input/vector/postgis.txt b/en/input/vector/postgis.txt index f5a5cef2980..7b96f955f61 100644 --- a/en/input/vector/postgis.txt +++ b/en/input/vector/postgis.txt @@ -6,7 +6,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2022-04-25 +:Last Updated: 2026-06-02 .. contents:: Table of Contents :depth: 3 @@ -422,7 +422,7 @@ Support for SQL/MM Curves PostGIS is able to store circular interpolated curves, as part of the SQL Multimedia Applications Spatial specification (read about the `SQL/MM specification -`__). +`__). For more information about PostGIS' support, see the *SQL-MM Part 3* section in the PostGIS documentation, such as `here diff --git a/en/installation/oracle.txt b/en/installation/oracle.txt index 73ab7ae6ba4..5382c384000 100644 --- a/en/installation/oracle.txt +++ b/en/installation/oracle.txt @@ -207,9 +207,9 @@ Testing & Error handling ........................ So you are fine now. Load the mapfile in your application and try it. If -everything goes well: Great, if not, possibly this ugly error-emssage occurs -(this one cmae by querying MapServer through the WMS interface as a -GetMap-request): +everything goes well: great, if not, possibly this ugly error message occurs +(this one was made by querying MapServer through the WMS interface as a +GetMap request): :: diff --git a/en/installation/unix.txt b/en/installation/unix.txt index 1cbd6ef2cc6..3443126cdd3 100644 --- a/en/installation/unix.txt +++ b/en/installation/unix.txt @@ -13,7 +13,7 @@ :Contact: thomas.bonfort at gmail.com :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2025-04-14 +:Last Updated: 2026-05-01 .. contents:: Table of Contents :depth: 2 @@ -24,23 +24,23 @@ Introduction ============================================================================= -The University of Minnesota's MapServer is an open-source and freely -available map rendering engine for the web. Due to its open-source nature, +The University of Minnesota's MapServer is an Open Source and freely +available map rendering engine for the web. Due to its Open Source nature, it can be compiled on a wide variety of platforms and operating systems. We will focus on how to obtain, compile and install MapServer on UNIX-like platforms. .. note:: - Detailed configuration options are maintained in the `INSTALL.CMAKE`_ + Detailed configuration options are maintained in the `INSTALL_CMAKE.md`_ file packaged at the root of the source directory: .. tip:: - The minimum CMake version required is 3.0 as of the MapServer 7.6.0 release + The minimum CMake version required is 3.16 as of the MapServer 8.4.0 release -You might also check the `MapServerCompilation`_ wiki page for -additional information. +The old `MapServerCompilation`_ wiki page contains outdated information, but +could be useful for early versions of MapServer. ============================================================================= Compiler Requirements @@ -133,8 +133,8 @@ environment variables to secure your server are listed in :ref:`environment_vari within the PostgreSQL database. Ideally, your client library matches the database you are querying from. -* `giflib`_: libgif / `libgif`_ is is used for reading GIF files used - as PIXMAP symbols. +* `giflib`_: GIFLIB (or on some platforms "libgif") is used for reading + GIF files used as PIXMAP symbols. * `FastCGI`_: FastCGI is a popular protocol for interfacing MapServer with various web servers. You will need to install the development @@ -580,8 +580,8 @@ server configuration isn't right: The :ref:`introduction` document provides excellent coverage of getting started with MapServer. -.. _`INSTALL.CMAKE`: https://github.com/MapServer/MapServer/blob/main/INSTALL.CMAKE -.. _`MapServerCompilation`: https://trac.osgeo.org/mapserver/wiki/MapServerCompilation +.. _`INSTALL_CMAKE.md`: https://github.com/MapServer/MapServer/blob/main/INSTALL_CMAKE.md +.. _`MapServerCompilation`: https://web.archive.org/web/20240625061519/https://trac.osgeo.org/mapserver/wiki/MapServerCompilation .. _`libpng`: http://www.libpng.org/pub/png/libpng.html .. _`FreeType`: https://freetype.org/ .. _`libjpeg`: https://www.ijg.org/ @@ -589,9 +589,9 @@ with MapServer. .. _`PROJ`: https://proj.org .. _`libcurl`: https://curl.se/libcurl/ .. _`GDAL`: https://gdal.org/ -.. _`GEOS`: https://trac.osgeo.org/geos/ -.. _`libxml`: http://xmlsoft.org -.. _`Oracle Spatial OCI`: https://www.oracle.com/ca-en/database/technologies/instant-client/downloads.html +.. _`GEOS`: https://libgeos.org/ +.. _`libxml`: https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home +.. _`Oracle Spatial OCI`: https://www.oracle.com/database/technologies/instant-client/downloads.html .. _`libpq`: https://www.postgresql.org/ .. _`giflib`: https://giflib.sourceforge.net/ .. _`FastCGI`: https://fastcgi-archives.github.io/ @@ -599,8 +599,7 @@ with MapServer. .. _`Cairo SVG parser support`: https://mapserver.org/development/rfc/ms-rfc-73.html .. _`OGC`: https://www.ogc.org .. _`PostGIS`: https://postgis.net/ -.. _`setting up cgi-bin`: https://httpd.apache.org/docs/2.2/howto/cgi.html +.. _`setting up cgi-bin`: https://httpd.apache.org/docs/current/howto/cgi.html .. _`PostgreSQL`: https://www.postgresql.org/ -.. _`libgif`: https://launchpad.net/ubuntu/precise/+package/libgif-dev .. _`HarfBuzz`: https://github.com/harfbuzz/harfbuzz .. _`FriBidi`: https://github.com/fribidi/fribidi diff --git a/en/installation/win32.txt b/en/installation/win32.txt index 0ffbfb760d3..d18a0f2ef8e 100644 --- a/en/installation/win32.txt +++ b/en/installation/win32.txt @@ -115,7 +115,7 @@ these files. .. _`7-Zip`: https://www.7-zip.org/ -Cygwin is a free, open-source software package which is a port of these tools +Cygwin is a free, Open Source software package which is a port of these tools on Windows. You can use the gzip and tar utilities from this tool collection. Cygwin is available from https://www.cygwin.com. @@ -139,7 +139,7 @@ Interim Builds title. The absolute latest copy of the source code can be obtained from :ref:`git`; however, the GitHub repository does not contain several important source files (maplexer.c, mapparser.c and mapparser.h) normally generated on unix, so if possible, using a nightly -snaphot is substantially easier than working directly from :ref:`git`. +snapshot is substantially easier than working directly from :ref:`git`. **Required Libraries** ---------------------- diff --git a/en/introduction.txt b/en/introduction.txt index 513dd19cb3c..235a3d4bea0 100644 --- a/en/introduction.txt +++ b/en/introduction.txt @@ -10,7 +10,7 @@ An Introduction to MapServer :Contact: david.fawcett at moea.state.mn.us :Author: Howard Butler :Contact: hobu.inc at gmail.com -:Last Updated: 2025-04-14 +:Last Updated: 2026-06-02 .. contents:: :depth: 3 @@ -965,8 +965,9 @@ Tutorial Test Suite (msautotest) ............................................................................... -`msautotest `__ contains test mapfiles -and data for most MapServer functionality. +The `msautotest `__ +folder in the MapServer repository contains test mapfiles and data for most +MapServer functionality. Books diff --git a/en/mapcache/caches.txt b/en/mapcache/caches.txt index ddf0a5a339f..33e83d8dbb4 100644 --- a/en/mapcache/caches.txt +++ b/en/mapcache/caches.txt @@ -147,16 +147,16 @@ value for each tile to store. Berkeley DB Caches ------------------ -The Berkeley DB cache backend stores tiles in a key-value flat-file database, +The Berkeley DB (BDB) cache backend stores tiles in a key-value flat-file database, and therefore does not have the disadvantages of disk caches with regards to the number of files stored on the filesystem. As the image blobs are stored contiguously, the block size chosen for the filesystem has no influence on the storage capacity of the volume. -Note that for a given bdb cache, only a single database file is created, which +Note that for a given BDB cache, only a single database file is created, which will store the tiles of its associated tilesets (i.e. there is not a database file created per tileset, grid, and/or dimension). If you need to store different -tilesets to different files, then use multiple dbd cache entries. It is not +tilesets to different files, then use multiple BDB cache entries. It is not possible to use multiple database files for tileset grids or dimensions. The Berkeley DB based caches are a bit faster than the disk based caches during @@ -331,7 +331,7 @@ Blank Tile Detection MapCache's SQLite caches support the detection and storage of blank (i.e. uniform color) tiles, and will store a quadruplet of the rgba color component in the data blob instead of the compressed image data itself. That quadruplet will be -transformed on-the-fly to a 1-bit palleted PNG before being returned to the client. +transformed on-the-fly to a 1-bit paletted PNG before being returned to the client. .. code-block:: xml @@ -403,7 +403,7 @@ x,y, and z: {inv_x} and {inv_div_x} will probably be rarely used, whereas {inv_y} and {inv_div_y} will find some usage by people who prefer to index - their dbfiles files from top to bottom rather than bottom to top. + their *dbfile* files from top to bottom rather than bottom to top. .. note:: @@ -589,7 +589,7 @@ You can add multiple entries. To limit the memory used by blank tiles inside the memcache instance, you may enable blank tile detection, in which case a `#rgba` quadruplet will be stored to the cache instead of the actual image data. MapCache will convert -that on-the-fly to a 1-bit palleted PNG image before returning it to the client. +that on-the-fly to a 1-bit paletted PNG image before returning it to the client. .. code-block:: xml diff --git a/en/mapcache/formats.txt b/en/mapcache/formats.txt index eb49dffb401..4172f838313 100644 --- a/en/mapcache/formats.txt +++ b/en/mapcache/formats.txt @@ -42,7 +42,7 @@ PNG Format -------------------------------------------------------------------------------- The PNG format creates PNG images, with optional quantization (reduction of -the number of colors to create an 8-bit palleted PNG). +the number of colors to create an 8-bit paletted PNG). .. code-block:: xml @@ -56,7 +56,7 @@ the number of colors to create an 8-bit palleted PNG). zlib compression. - *colors*: Number of colors to use for quantization. Omit this key to produce 24 or 32 bit RGB/RGBA PNGs, or set to a value between 2 and 256 - to create an 8-bit palleted PNG. The quantization step is destructive: + to create an 8-bit paletted PNG. The quantization step is destructive: There is no guarantee that pixels will not have a noticeable shift in color in the case when the tile contains many colors. diff --git a/en/mapcache/index.txt b/en/mapcache/index.txt index fd6ec6e1599..af8cc53a52a 100644 --- a/en/mapcache/index.txt +++ b/en/mapcache/index.txt @@ -1,7 +1,7 @@ .. _mapcache: ***************************************************************************** -MapCache 1.14.1 +MapCache 1.16.0 ***************************************************************************** :Author: Thomas Bonfort diff --git a/en/mapcache/install.txt b/en/mapcache/install.txt index 2cf4da402f6..d862b5d1c34 100644 --- a/en/mapcache/install.txt +++ b/en/mapcache/install.txt @@ -14,7 +14,7 @@ Compilation & Installation :Contact: mathieu.coudert at gmail.com :Author: Seth Girvin :Contact: sgirvin at compass.ie -:Last Updated: 2023-01-30 +:Last Updated: 2026-04-20 .. contents:: Table of Contents :depth: 3 @@ -69,10 +69,10 @@ functionalities: run MapCache as an Apache module - **gdal / geos**: *libgdal1-dev* *libgeos-dev*. Needed to enable advanced seeding options (for only seeding tiles that intersect a given geographical feature) -- **sqlite**: *libsqlite3-dev*. For enabling the SQLite backend storages -- **tiff**: *libtiff4-dev*. For enabling the TIFF backend storages -- **berkeley db** *libdb4.8-dev* : For enabling the Berkeley DB backend storages -- **lmdb** *liblmdb-dev* : For enabling the Lightning Memory-Mapped Database backend storages +- **sqlite**: *libsqlite3-dev*. For enabling the SQLite backend storage +- **tiff**: *libtiff4-dev*. For enabling the TIFF backend storage +- **berkeley db** *libdb4.8-dev* : For enabling the Berkeley DB backend storage +- **lmdb** *liblmdb-dev* : For enabling the Lightning Memory-Mapped Database backend storage (available since MapCache 1.14.0 release) .. note:: @@ -181,8 +181,8 @@ nginx source. Download the nginx source code: $ cd nginx-1.1.19/ Run the configure command with the flag `--add-module`. This flag -must point to MapCache's nginx child directory. Assuming that -MapServer source was cloned or un tarred into to `/usr/local/src`, +must point to MapCache's nginx child directory. Assuming that the +MapServer source was cloned or extracted into to `/usr/local/src`, an example configure command for nginx would look like this: .. code-block:: bash @@ -477,7 +477,7 @@ Here is a list of supported options that can be enabled/disabled at build. -DWITH_OGR=[0|1] GDAL (actually OGR) is used by the seeding utility to allow the seeding of - tiles only intersecting a given polygon, e.g. to preseed all the tiles of a + tiles only intersecting a given polygon, e.g. to pre-seed all the tiles of a given country. - **GEOS** (*optional*, from 0.5 onwards) @@ -540,7 +540,7 @@ Here is a list of supported options that can be enabled/disabled at build. When writing TIFF files, MapCache can also optionally add georeferencing information if compiled with libtiff support. GeoTiff writing does not - produce the full tags needed for defining which preojection the grid is + produce the full tags needed for defining which projection the grid is in, but will only produce those defining the pixel scale and the tiepoints (i.e. the equivalent information found in the accompanying .tfw files). @@ -638,8 +638,8 @@ Optional: MapCache as an Apache module - **GDAL / GEOS**: Needed to enable advanced seeding options (for only seeding tiles that intersect a given geographical feature) -- **SQLITE**: For enabling the SQLite backend storages -- **TIFF**: For enabling the TIFF backend storages +- **SQLITE**: For enabling the SQLite backend storage +- **TIFF**: For enabling the TIFF backend storage Configure Your Makefile ----------------------- diff --git a/en/mapcache/proxying.txt b/en/mapcache/proxying.txt index c777f0ff9d5..d6c0814eec7 100644 --- a/en/mapcache/proxying.txt +++ b/en/mapcache/proxying.txt @@ -87,7 +87,7 @@ request that concerns the "somelayername" layer only. A that has no child will match any incoming request that could not be serviced by MapCache directly from its cache, and can be used to forward all unsupported request to a full OGC- -compliant server so that an un-cached response can be returned to the +compliant server so that an uncached response can be returned to the client. .. seealso:: :ref:`mapcache_dimensions` diff --git a/en/mapfile/class.txt b/en/mapfile/class.txt index c0b82a1331e..bbb5d38cb76 100644 --- a/en/mapfile/class.txt +++ b/en/mapfile/class.txt @@ -95,7 +95,7 @@ EXPRESSION [string] :name: mapfile-class-fallback FALLBACK [true|false] - .. versionadded:: 8.6 + .. versionadded:: 8.6.0 Specifies whether the class should act as a fallback class. Default is false. A fallback class is applied if and only if none of the previously diff --git a/en/mapfile/encoding.txt b/en/mapfile/encoding.txt index 89316899cfd..a6437baba99 100644 --- a/en/mapfile/encoding.txt +++ b/en/mapfile/encoding.txt @@ -9,7 +9,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2020-10-28 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 3 @@ -42,7 +42,7 @@ Requirements .. note:: In terms of map labels with international characters, since the MapServer 7.0 release, - other important dependant libaries besides libiconv are `Freetype `__ + other important dependent libraries besides libiconv are `Freetype `__ (to get information about glyph sizes), `Fribidi `__ (to handle bidirectional text), and `Harfbuzz `__ (for text shaping). diff --git a/en/mapfile/geomtransform.txt b/en/mapfile/geomtransform.txt index 8c1e631caa9..c09d32f9412 100644 --- a/en/mapfile/geomtransform.txt +++ b/en/mapfile/geomtransform.txt @@ -583,7 +583,7 @@ centerline - an example showing a generated red centerline that is used to label lakes, from a polygon datasource `lakes.db` (and uses - `densify()` to add more verticies to the generated red line, so it + `densify()` to add more vertices to the generated red line, so it follows the lake's shape) : .. code-block:: mapfile @@ -627,10 +627,10 @@ densify .. versionadded:: 8.0 densify() -- *(densify([shape],tolerance)*: Add more verticies to the +- *(densify([shape],tolerance)*: Add more vertices to the feature (`[shape]`). Requires a positive tolerance value. Might be useful in combination with `centerline()` to - add more verticies to the generated labeled line. + add more vertices to the generated labeled line. .. index:: pair: GEOMTRANSFORM; generalize @@ -739,7 +739,7 @@ One of the :ref:`STYLE` definitions for the example (tolerance 40): - an example showing a generated red centerline that is used to label a province, from a polygon datasource `ns.db` (and uses - `simplify()` to reduce the verticies in the generated line) : + `simplify()` to reduce the vertices in the generated line) : .. code-block:: mapfile diff --git a/en/mapfile/identify.txt b/en/mapfile/identify.txt index b10b7ffa916..5a3598ab047 100644 --- a/en/mapfile/identify.txt +++ b/en/mapfile/identify.txt @@ -7,7 +7,7 @@ IDENTIFY ***************************************************************************** -.. versionadded:: 8.6 +.. versionadded:: 8.6.0 Controls how vector features are identified, typically through WMS GetFeatureInfo or MODE=QUERY requests. @@ -112,3 +112,5 @@ CLASSGROUP [string] SYMBOL "my_symbol" END END + +.. seealso:: original Pull Request `#7318 `__ diff --git a/en/mapfile/label.txt b/en/mapfile/label.txt index 248f823f8dc..6de17aa4649 100644 --- a/en/mapfile/label.txt +++ b/en/mapfile/label.txt @@ -553,7 +553,7 @@ SHADOWCOLOR [r] [g] [b] | [hexadecimal string] Color of drop shadow. A label with the same text will be rendered in this color before the main label is drawn, resulting in a shadow effect on the the label characters. The offset of the - renderered shadow is set with SHADOWSIZE. + rendered shadow is set with SHADOWSIZE. - `r`, `g` and `b` shall be integers [0..255]. To specify green, the following is used: diff --git a/en/mapfile/layer.txt b/en/mapfile/layer.txt index 012afd3ea5a..c0cf54e325e 100644 --- a/en/mapfile/layer.txt +++ b/en/mapfile/layer.txt @@ -52,7 +52,7 @@ BINDVALS Inside a layer, only a single class will be used for the rendering of a feature. Each feature is tested against each class in the order in which they are defined in the mapfile. The first class that matches - the its min/max scale constraints and its :ref:`EXPRESSION ` + its min/max scale constraints and its :ref:`EXPRESSION ` check for the current feature will be used for rendering. This can be controlled with @@ -101,7 +101,7 @@ CLASSITEM [attribute] One or more COMPOSITE blocks can be used to signal that rendering should be done in a temporary image and merged onto the final map image in a final step. The options defined inside the COMPOSITE block - will determine how this merging should be done (e.g. by appying opacity, + will determine how this merging should be done (e.g. by applying opacity, composition operator, or pixel filters) .. seealso:: @@ -128,7 +128,7 @@ CONNECTION [string] .. WARNING:: MapServer's native SDE driver was removed for the MapServer 7.0 release (see `discussion `__). - SDE support can still be accessed through the `OGR driver `__. + GDAL's SDE driver was removed in the GDAL `3.2.0 release `__. .. seealso:: @@ -481,7 +481,7 @@ GEOMTRANSFORM [|] - an example showing a generated red centerline that is used to label lakes, from a polygon datasource `lakes.db` (and uses - `densify()` to add more verticies to the generated red line, so it + `densify()` to add more vertices to the generated red line, so it follows the lake's shape) : .. code-block:: mapfile @@ -522,10 +522,10 @@ GEOMTRANSFORM [|] .. versionadded:: 8.0 densify() - - *(densify([shape],tolerance)*: Add more verticies to the + - *(densify([shape],tolerance)*: Add more vertices to the feature (`[shape]`). Requires a positive tolerance value. Might be useful in combination with `centerline()` to - add more verticies to the generated labeled line. + add more vertices to the generated labeled line. .. index:: triple: LAYER; GEOMTRANSFORM; generalize @@ -552,7 +552,7 @@ GEOMTRANSFORM [|] - an example showing a generated red centerline that is used to label a province, from a polygon datasource `ns.db` (and uses - `simplify()` to reduce the verticies in the generated line) : + `simplify()` to reduce the vertices in the generated line) : .. code-block:: mapfile @@ -618,7 +618,7 @@ GEOMTRANSFORM [|] There is a difference between STYLE and LAYER GEOMTRANSFORM. LAYER-level will receive ground coordinates - (meters, degress, etc) and STYLE-level will receive pixel + (meters, degrees, etc) and STYLE-level will receive pixel coordinates. The argument to methods such as simplify() must be in the same units as the coordinates of the shapes at that point of the rendering workflow, i.e. pixels at the STYLE-level and in @@ -723,7 +723,7 @@ HEADER [filename] .. _layer-identify: :ref:`IDENTIFY` - .. versionadded:: 8.6 + .. versionadded:: 8.6.0 Signals the start of an :ref:`IDENTIFY` object. diff --git a/en/mapfile/map.txt b/en/mapfile/map.txt index 295f3d81b2c..ccc01b566dd 100644 --- a/en/mapfile/map.txt +++ b/en/mapfile/map.txt @@ -47,7 +47,7 @@ ANGLE [double] map rotation, use an almost zero value like 0.0001) - Starting with MapServer 7.2, if using the :ref:`STYLE` . ANGLE parameter - of a ponctual symbol, that parameter is relative to the map's orientation + of a punctual symbol, that parameter is relative to the map's orientation (i.e. it is computed after the `MAP` object's `ANGLE`). For example, if you have specified an `ANGLE` for the map of 45, and then have a symbol diff --git a/en/mapfile/projection.txt b/en/mapfile/projection.txt index 2675c243511..99215be3a3c 100644 --- a/en/mapfile/projection.txt +++ b/en/mapfile/projection.txt @@ -269,4 +269,4 @@ For More Information .. _`PROJ`: https://proj.org .. _`Web Mercator projection`: https://en.wikipedia.org/wiki/Web_Mercator_projection -.. _`email list archives`: https://lists.osgeo.org/pipermail/mapserver-users/ +.. _`email list archives`: https://www.mail-archive.com/mapserver-users@lists.osgeo.org/ diff --git a/en/mapfile/scalebar.txt b/en/mapfile/scalebar.txt index 772412de76f..3fa2606d7cd 100644 --- a/en/mapfile/scalebar.txt +++ b/en/mapfile/scalebar.txt @@ -7,6 +7,12 @@ SCALEBAR ***************************************************************************** + .. note:: + + MapServer supports only cartesian distances (straight-line distance measured + on a flat surface), it does not convert distances into an ellipsoidal + distance (measured on a spherical shape). + Scalebars currently do not make use of TrueType fonts. The size of the scalebar image is NOT known prior to rendering, so be careful not to hard-code width and height in the tag in the template file. Future @@ -222,6 +228,10 @@ STATUS [on|off|embed] STYLE [integer] Chooses the scalebar style. Valid styles are 0 and 1. + +.. index:: + pair: SCALEBAR; TRANSPARENT + :name: mapfile-scalebar-transparent TRANSPARENT [on|off] diff --git a/en/mapfile/symbol.txt b/en/mapfile/symbol.txt index 25586b3a983..d0c2a8681fa 100644 --- a/en/mapfile/symbol.txt +++ b/en/mapfile/symbol.txt @@ -62,7 +62,7 @@ ANCHORPOINT [x] [y] .. note:: SVG symbols might require to have their width/height set inside the SVG file, for ANCHORPOINT to work correctly. See - `report `__. + `report `__. .. index:: pair: SYMBOL; ANTIALIAS diff --git a/en/mapfile/symbology/construction.txt b/en/mapfile/symbology/construction.txt index 3e1b7efb27c..56c70f3bd4d 100644 --- a/en/mapfile/symbology/construction.txt +++ b/en/mapfile/symbology/construction.txt @@ -92,7 +92,7 @@ coloured lane will have a width of (7-1)/2 = 3 units. Combining symbols can be a solution for many kinds of cartographical questions. A combination of different geometry types is also possible. A polygon data set can be rendered as lines to frame the -polygons with a line signature. It can also be rendred as polygons +polygons with a line signature. It can also be rendered as polygons with a symbol filling the polygon. When the polygon fill is rendered on top of the lines, the inner part of the underlying outline is covered by the fill symbol of the polygon. What is observed here is a diff --git a/en/mapfile/template.txt b/en/mapfile/template.txt index 0da334b7c4f..33fd0480e38 100644 --- a/en/mapfile/template.txt +++ b/en/mapfile/template.txt @@ -11,7 +11,7 @@ :Contact: frank.koormann at intevation.de :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2024-01-25 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 2 diff --git a/en/mapfile/union.txt b/en/mapfile/union.txt index b3fc4eb5864..e232fbb56ae 100644 --- a/en/mapfile/union.txt +++ b/en/mapfile/union.txt @@ -11,7 +11,7 @@ :Contact: szekerest at gmail.com :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2021-03-30 +:Last Updated: 2026-03-29 .. contents:: Table of Contents :depth: 3 diff --git a/en/mapscript/index.txt b/en/mapscript/index.txt index 821cb4bfdac..bbd0da14d48 100644 --- a/en/mapscript/index.txt +++ b/en/mapscript/index.txt @@ -6,16 +6,11 @@ :Release: |release| - .. warning:: - - As of the MapServer 8.0.0 release PHP support is only available through - MapServer's :ref:`SWIG API `. - .. note:: - As of the MapServer 7.4.0 release PHP is available through - MapServer's :ref:`SWIG API `. PHP 8.2 and PHP 8.1 are currently - supported with MapServer 8.0.1. + Since the MapServer 8.0.0 release PHP support is only available through + MapServer's :ref:`SWIG API `. Supported versions are PHP 8.5 and + PHP 8.4 with MapServer 8.6.3 .. toctree:: :maxdepth: 2 diff --git a/en/mapscript/mapfile.txt b/en/mapscript/mapfile.txt index c9843d45d77..22fe7932e70 100644 --- a/en/mapscript/mapfile.txt +++ b/en/mapscript/mapfile.txt @@ -12,7 +12,7 @@ :Author: Sean Gillies :Author: Seth Girvin :Contact: sethg at geographika.co.uk -:Last Updated: 2021-05-22 +:Last Updated: 2026-03-29 .. contents:: :depth: 2 diff --git a/en/mapscript/mapscript-api/index.rst b/en/mapscript/mapscript-api/index.rst index 73db4225ecd..4916dd607e9 100644 --- a/en/mapscript/mapscript-api/index.rst +++ b/en/mapscript/mapscript-api/index.rst @@ -24,7 +24,7 @@ :Contact: jmckenna at gatewaygeomatics.com :Author: Seth Girvin :Contact: sethg at geographika.co.uk -:Last Updated: 2023-06-13 +:Last Updated: 2025-12-03 ============================================================================= Introduction @@ -43,16 +43,11 @@ is read-only. Note that because of the way that MapScript is generated many confusing, meaningless, and even dangerous attributes might be exposed by objects. -.. warning:: +.. note:: - As of the MapServer 8.0.0 release PHP support is only available through - MapServer's :ref:`SWIG API `. The unmaintained `native` PHP MapScript - support was removed. - - .. note:: - - PHP support is included in the SWIG API as of the MapServer 7.4.0 release. - PHP 8.2 and PHP 8.1 are currently supported with MapServer 8.0.1. + Since the MapServer 8.0.0 release PHP support is only available through + MapServer's :ref:`SWIG API `. Supported versions are PHP 8.5 and + PHP 8.4 with MapServer 8.6.3 ============================================================================= Appendices diff --git a/en/mapscript/php/index.txt b/en/mapscript/php/index.txt index aeb85702f78..433439d498a 100644 --- a/en/mapscript/php/index.txt +++ b/en/mapscript/php/index.txt @@ -7,7 +7,11 @@ PHP MapScript ***************************************************************************** -:Release: |release| +.. warning:: + + Since the MapServer 8.0.0 release PHP support is only available through + MapServer's :ref:`SWIG API `. The unmaintained `native` PHP MapScript + support (referred to in this section of the documentation) was removed. .. toctree:: :maxdepth: 2 @@ -16,15 +20,5 @@ phpmapscript migration_guide by_example - - -.. warning:: - As of the MapServer 8.0.0 release PHP support is only available through - MapServer's :ref:`SWIG API `. The unmaintained `native` PHP MapScript - support was removed. - -.. note:: - As of the 7.4.0 release PHP 7 is available through - MapServer's :ref:`SWIG API `. diff --git a/en/mapscript/php/php_intro.txt b/en/mapscript/php/php_intro.txt index 9b63532bc95..b938e4daf5a 100644 --- a/en/mapscript/php/php_intro.txt +++ b/en/mapscript/php/php_intro.txt @@ -11,7 +11,7 @@ PHP MapScript As of the MapServer 8.0.0 release PHP support is only available through MapServer's :ref:`SWIG API `. The unmaintained `native` PHP MapScript - support was removed. + support (referred to in this section of the documentation) was removed. Introduction ************* diff --git a/en/mapscript/php/phpmapscript.txt b/en/mapscript/php/phpmapscript.txt index d8f104ea31a..b0796173aad 100644 --- a/en/mapscript/php/phpmapscript.txt +++ b/en/mapscript/php/phpmapscript.txt @@ -14,20 +14,14 @@ .. warning:: - As of the MapServer 8.0.0 release PHP support is only available through + Since the MapServer 8.0.0 release PHP support is only available through MapServer's :ref:`SWIG API `. The unmaintained `native` PHP MapScript - support was removed. + support (referred to in this section of the documentation) was removed. .. note:: If you are using MapServer 5.6 and older, please refer to the :ref:`PHP MapScript 5.6 documentation ` instead. - - .. tip:: - - PHP 7 native support is included as of the MapServer 7.4.0 release. - Also, as of the 7.4.0 release PHP 7 is available through - MapServer's :ref:`SWIG ` API. .. contents:: :depth: 3 diff --git a/en/ogc/filter_encoding.txt b/en/ogc/filter_encoding.txt index 5dc0d393648..9a1156d7055 100644 --- a/en/ogc/filter_encoding.txt +++ b/en/ogc/filter_encoding.txt @@ -10,7 +10,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com :Author: Yewondwossen Assefa -:Last Updated: 2024-06-27 +:Last Updated: 2026-03-28 .. contents:: Table of Contents :depth: 2 @@ -44,7 +44,7 @@ Links to SLD-related Information - `MapServer OGC Web Services Workshop`_. - `Open GIS Consortium (OGC) home page`_. -.. _`Filter Encoding Implementation Specification`: https://www.ogc.org/standard/filter/ +.. _`Filter Encoding Implementation Specification`: https://www.ogc.org/standards/filter/ .. _`Open GIS Consortium (OGC) home page`: https://www.ogc.org .. _`MapServer OGC Web Services Workshop`: https://mapserver.github.io/ms-ogc-workshop/ @@ -547,7 +547,7 @@ Following are some MapServer specific notes on this test suite: 5. *Test number 1.3.6.1*: - The returned feature xml won't validate because the validation is done - against a specific xsd (geomatry.xsd). + against a specific xsd (geometry.xsd). - The data conversion on multipoints and multilayers are not supported within GDAL. diff --git a/en/ogc/inspire.txt b/en/ogc/inspire.txt index b7c4c6b05ce..ccb75fd805a 100644 --- a/en/ogc/inspire.txt +++ b/en/ogc/inspire.txt @@ -342,13 +342,47 @@ in msautotest:: +--- TN.RailTransportNetwork.RailwayLink +--- TN.AirTransportNetwork.AirLink +Conformance Testing +=================== +`INSPIRE Validator`_ is the standard testing tool for INSPIRE web services. +While it can be used as a standalone product, other testing frameworks like +`GDI-DE Testsuite`_ in Germany build on it and extend it. + +The `INSPIRE Validator`_ contains a 'Conformance Class: View Service - WMS' test suite +for testing WMS compliance. +In order to make these tests pass and enforce strict compliance, you will need to +add some extra configuration settings to the `WEB.METADATA` section:: + + WEB + METADATA + "ows_inspire_capabilities" "url|embed" # make this an INSPIRE service + "ows_compliance_mode" "true" # Enable strict OGC compliance + ... + END + END + +.. tip:: + In MapServer <= 8.6.3, you also need to override the + INSPIRE schema repository location, because INSPIRE + validator will throw an error on the default:: + + WEB + METADATA + ... + "inspire_schemas_location" "https://inspire.ec.europa.eu/schemas" + ... + END + END + .. #### rST Link Section #### .. _`European directive`: https://knowledge-base.inspire.ec.europa.eu/index_en +.. _`GDI-DE Testsuite`: https://testsuite.gdi-de.org .. _`INSPIRE Technical Guidance document`: https://inspire-mif.github.io/technical-guidelines/services/view-wms/ - .. _`INSPIRE schemas`: https://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd +.. _`INSPIRE Validator`: https://github.com/INSPIRE-MIF/helpdesk-validator/ +.. _`http://inspire.ec.europa.eu/schemas`: https://inspire.ec.europa.eu/schemas .. _`WMS INSPIRE tester`: https://github.com/neogeo-technologies/inspire_tester .. _document: https://web.archive.org/web/20121110042846/http://www.neogeo-online.net/blog/wp-content/uploads/2011/04/MAPSERVER_INSPIRE.pdf .. _`INSPIRE Metadata Implementing Rules`: https://knowledge-base.inspire.ec.europa.eu/publications/inspire-metadata-implementing-rules-technical-guidelines-based-en-iso-19115-and-en-iso-19119_en diff --git a/en/ogc/mapscript.txt b/en/ogc/mapscript.txt index 63e876e0d8c..a43817f113e 100644 --- a/en/ogc/mapscript.txt +++ b/en/ogc/mapscript.txt @@ -19,8 +19,8 @@ Introduction ============================================================================= -With the implementation of MapServer :ref:`rfc16` in MapServer 4.9, MapScript -now has the ability to invoke MapServer's ability to execute OGC Web Service +Since the implementation of MapServer :ref:`rfc16` in MapServer 4.9, MapScript +has the ability to invoke MapServer's ability to execute OGC Web Service requests such as WMS, WCS, and WFS as well as capturing the results of processing the requests. @@ -430,7 +430,7 @@ is an example displaying a :ref:`wms capabilities `. Use in Non-CGI Environments (mod_php, etc) ============================================================================= -The loadParams() call establish parses the cgi environment varabiables +The loadParams() call establish parses the cgi environment variables (QUERY_STRING, and REQUEST_METHOD) into parameters in the OWSRequest object. In non-cgi environments, such as when php, python and perl are used as "loaded modules" in Apache, or Java with Tomcat, the loadParams() call diff --git a/en/ogc/ogc_api.txt b/en/ogc/ogc_api.txt index 1c1ff0d3956..d4dd8717a8f 100644 --- a/en/ogc/ogc_api.txt +++ b/en/ogc/ogc_api.txt @@ -9,7 +9,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2025-10-10 +:Last Updated: 2025-12-12 .. contents:: Table of Contents :depth: 3 @@ -104,10 +104,11 @@ Example 1. On Unix: :: $ ./mapserv -v - MapServer version 8.1-dev OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ - SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=RSVG - SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT - SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER + MapServer version 8.7-dev PROJ version 9.7 GDAL version 3.11 OUTPUT=PNG + OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE + SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=RSVG SUPPORTS=ICONV + SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER + SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER SUPPORTS=GEOS SUPPORTS=PBF INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE INPUT=FLATGEOBUF @@ -116,13 +117,14 @@ Example 2. On Windows: :: C:\ms4w> mapserv -v - MapServer version 8.1.0-dev (MS4W 5.0.0-dev) OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML - SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO - SUPPORTS=SVG_SYMBOLS SUPPORTS=SVGCAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI - SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT - SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER SUPPORTS=FASTCGI - SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=PBF INPUT=JPEG INPUT=POSTGIS INPUT=OGR - INPUT=GDAL INPUT=SHAPEFILE INPUT=FLATGEOBUF + MapServer version 8.7-dev (MS4W 5.2.0) PROJ version 9.8 + GDAL version 3.13 OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG + SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=SVGCAIRO + SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT + SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER + SUPPORTS=OGCAPI_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS + SUPPORTS=PBF INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE + INPUT=FLATGEOBUF .. index:: pair: WMS Server; Mapfile @@ -141,6 +143,23 @@ mapfile such as:: localdemo "/ms4w/apps/ogcapi-demo/ogcapi-demo.map" END +You can also point to the location of the HTML templates to use for +`ogcapi?f=html` requests, by setting the `OGCAPI_HTML_TEMPLATE_DIRECTORY` +environment variable in your CONFIG file, such as:: + + ENV + # + # OGC API + # + OGCAPI_HTML_TEMPLATE_DIRECTORY "/ms4w/share/ogcapi/templates/html-bootstrap/" + END + +.. NOTE:: + If the `OGCAPI_HTML_TEMPLATE_DIRECTORY` environment variable is not set, or + the mapfile's WEB.METADATA parameter `oga_html_template_directory` is not set, + then no HTML output will be generated (you may see a `"Template directory not + set."` error message for `ogcapi?f=html` requests). + .. TIP:: For Ubuntu users, by default MapServer will install a sample config file at */usr/local/etc/mapserver-sample.conf*, and you must @@ -284,7 +303,7 @@ Example OGC API Server Mapfile "ows_abstract" "Oceans, NaturalEarth dataset, 2020" "gml_include_items" "all" #REQUIRED "gml_featureid" "ne_id" #REQUIRED - "oga_use_default_extent_for_getfeature" # Optional. Can improve performance. + "oga_use_default_extent_for_getfeature" "true" # Optional. Can improve performance. END TYPE POLYGON STATUS ON @@ -435,28 +454,17 @@ Further Configuration The following metadata may be used for additional configuration of the service: +.. _ogcapi_metadata: + Web Object Metadata ------------------- .. index:: - triple: OGCAPI; METADATA; ows_schemas_location - -**ows_schemas_location** - - .. versionadded:: 8.2.0 - -- *Description:* (Optional) (Note the name *ows_schemas_location* because all - OGC Web Services (OWS) use the same metadata) Root of the web tree where - the family of OGC API JSON Schema files are located. This must be a valid URL - where the actual .yaml files are located if you want your OpenAPI description - to be valid. Default is *http://schemas.opengis.net* - -.. index:: - triple: OGCAPI; METADATA; ows_schemas_location + triple: OGCAPI; METADATA; ows_extra_params **ows_extra_params** - .. versionadded:: 8.4.0 + .. versionadded:: 8.6.0 - *Description:* (Optional) The ``ows_extra_params`` (or ``oga_extra_params``) metadata entry allows you to append additional query parameters to all URLs generated by MapServer. This can be used, for example, @@ -511,3 +519,16 @@ Web Object Metadata The extra parameters are available in HTML templates for the OGC Features API as ``{{ template.extra_params }}``. The templates supplied in the MapServer repository append this value to all URLs by default. + +.. index:: + triple: OGCAPI; METADATA; ows_schemas_location + +**ows_schemas_location** + + .. versionadded:: 8.2.0 + +- *Description:* (Optional) (Note the name *ows_schemas_location* because all + OGC Web Services (OWS) use the same metadata) Root of the web tree where + the family of OGC API JSON Schema files are located. This must be a valid URL + where the actual .yaml files are located if you want your OpenAPI description + to be valid. Default is *http://schemas.opengis.net* diff --git a/en/ogc/sld.txt b/en/ogc/sld.txt index a17bebdcc84..58a02c53014 100644 --- a/en/ogc/sld.txt +++ b/en/ogc/sld.txt @@ -10,7 +10,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com :Author: Yewondwossen Assefa -:Last Updated: 2025-08-18 +:Last Updated: 2026-03-23 .. contents:: :depth: 2 @@ -42,7 +42,7 @@ Links to SLD-related Information - `MapServer OGC Web Services Workshop`_. - `Open GIS Consortium (OGC) home page`_. -.. _`Styled Layer Descriptor Implementation Specification`: https://www.ogc.org/standard/sld/ +.. _`Styled Layer Descriptor Implementation Specification`: https://www.ogc.org/standards/sld/ .. _`MapServer OGC Web Services Workshop`: https://mapserver.github.io/ms-ogc-workshop/ .. _`Open GIS Consortium (OGC) home page`: https://www.ogc.org diff --git a/en/ogc/sos_server.txt b/en/ogc/sos_server.txt index aaecc1a2a86..18fd6e5a66f 100644 --- a/en/ogc/sos_server.txt +++ b/en/ogc/sos_server.txt @@ -9,7 +9,7 @@ :Author: Jeff McKenna :Contact: jmckenna at gatewaygeomatics.com -:Last Updated: 2021-03-27 +:Last Updated: 2026-04-09 .. contents:: Table of Contents :depth: 2 @@ -42,7 +42,7 @@ Links to SOS-Related Information -------------------------------- - `SOS specification documents `__ -- OGC's `Sensor Web Enablement `__ working group +- OGC's `Sensor Web Enablement `__ overview Relevant Definitions -------------------- @@ -72,33 +72,39 @@ Setting Up an SOS Server Using MapServer Install the Required Software ----------------------------- -SOS requests are handled by the ":ref:`mapserv`" CGI program. The +SOS requests are handled by the :ref:`mapserv` CGI program. The first step is to check that your mapserv executable includes SOS support. One way to verify this is to use the "-v" command-line switch and look for "SUPPORTS=SOS_SERVER". Example 1. On Unix: -:: +.. code-block:: bash $ ./mapserv -v - MapServer version 4.9 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP - OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER - SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT - SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS INPUT=JPEG - INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG + MapServer version 8.7-dev PROJ version 9.8 GDAL version 3.12 + OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG + SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=RSVG + SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT + SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER + SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER SUPPORTS=GEOS SUPPORTS=PBF + INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE + INPUT=FLATGEOBUF Example 2. On Windows: -:: - - C:\MS4W\Apache\cgi-bin> mapserv -v - MapServer version 4.9 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP - OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER - SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT - SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS INPUT=JPEG - INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG +.. code-block:: bash + + C:\ms4w> mapserv -v + MapServer version 8.7-dev (MS4W 5.2.0) PROJ version 9.9 + GDAL version 3.13 OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ + SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS + SUPPORTS=SVGCAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER + SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT + SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER + SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=PBF INPUT=JPEG + INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE INPUT=FLATGEOBUF .. note:: Windows users can install `MS4W `__ which supports SOS server. @@ -106,13 +112,13 @@ Example 2. On Windows: If you don't have SOS support in your MapServer build, then you must compile MapServer with the following in mind: -- flag *-DUSE_SOS_SVR* is required +- CMake flag *-DWITH_SOS* is required -- requires either *-DUSE_WMS_SVR* or *-DUSE_WFS_SVR* flags to be enabled +- requires either *-DWITH_WMS* or *-DWITH_WFS* flags to be enabled - requires libxml2 and proj libraries -- requires ICONV support (*-DUSE_ICONV*) on Windows +- requires ICONV support (*-DWITH_ICONV*) on Windows For more help with MapServer compilation see the appropriate HowTo: :ref:`Unix ` / :ref:`Windows ` @@ -288,6 +294,7 @@ things are likely not going to work. .. note:: The SERVICE parameter is required for all SOS requests. +`SOS GetCapabilities live example `__ GetObservation Request ###################### @@ -388,7 +395,11 @@ Example 4: http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map& Request=GetObservation&service=SOS&Offering=WQ1289& observedproperty=Water Quality&version=1.0.0& - responseFormat=text/xml; subtype="om/1.0.0"&resultModel=om:Observation + responseFormat=text/xml; subtype="om/1.0.0"&resultModel=om:Observation + +Example 5: + +`SOS GetObservation live example `__ DescribeSensor Request ###################### @@ -861,12 +872,12 @@ Layer Object Metadata The logic for the bounding box returned as part of the offering is the following: - - note that it is a mandatory element that needs an espg code and + - note that it is a mandatory element that needs an EPSG code and lower/upper corner coordinates - - looks for the espg parameter in the first layer of the offering + - looks for the EPSG parameter in the first layer of the offering (this could be an ows/sos_srs or a projection object with the - epsg code (mandatory) + EPSG code (mandatory) - looks for sos_offering_extent. If the metadata is not available, the extents of all layers in the offering will be used to compute it. @@ -948,7 +959,7 @@ Layer Object Metadata All *sos_procedure* links from layers in the offerings will be - outputed together, such as the following taken from a + outputted together, such as the following taken from a GetCapabilities response: .. code-block:: xml @@ -996,7 +1007,8 @@ In MapServer 5.0 SOS support has been upgraded to use a new metadata called sos_procedure_item. The value for sos_procedure_item is the field/attribute name containing the procedure values. The use of this metadata as well as the sos_procedure is described here per type of request (refer to -https://github.com/MapServer/MapServer/issues/2050 for more description): +`issue #2050 `__ +for more description): It should be noted that, for very large datasets defined only with sos_procedure_item, this may result in costly processing, because MapServer diff --git a/en/ogc/wcs_format.txt b/en/ogc/wcs_format.txt index 59ffc79bda6..a85ad1de2d7 100644 --- a/en/ogc/wcs_format.txt +++ b/en/ogc/wcs_format.txt @@ -11,7 +11,9 @@ :Contact: nbarker at ittvis.com :Author: Gail Millin :Contact: nbarker at ittvis.com -:Last Updated: 2024-02-28 +:Author: Jeff McKenna +:Contact: jmckenna at gatewaygeomatics.com +:Last Updated: 2026-04-20 .. contents:: @@ -20,25 +22,28 @@ This document explains how to use MapServer to deliver Landsat, SPOT, DEM, and NetCDF temporal/banded data through the MapServer WCS interface. Thanks go to -Steve Lime and Frank Warmerdam for their assistance with these projects +Steve Lime and Frank Warmerdam for their assistance with these projects. It also shows how to configure MapServer for GRIB2 output format. +.. seealso:: :ref:`WCS Server HowTo ` + Landsat ======= -To serve Landsat imagery through the MapServer Web Coverage Service specify -the :ref:`OUTPUTFORMAT` object. For format support install the GDAL library -and from the command prompt and cd to where GDAL is installed and use the -command, gdalinfo --formats. A list of all supported formats will appear and -will specify if the format is read only **** or read and write **** +To serve Landsat imagery through the MapServer Web Coverage Service we must configure +the :ref:`OUTPUTFORMAT` object. First, you should verify that your local `GDAL `__ +library supports that raster format: from the command prompt, use the `gdalinfo `__ +command to see what formats are supported, by executing *gdalinfo --formats*. +A list of all supported formats will appear and will specify if the format is +read-only **** or read and write ****; for WCS the format needs to be supported for read and write (except for *GDAL's* own WCS format, however). For the example below the Landsat 7 15m resolution mosaic is in a Enhanced -Compressed Wavelets format (ECW). By running the gdalinfo.exe program I could +Compressed Wavelets format (ECW). By running the gdalinfo command we can verify that the ECW format has write permissions, therefore the format can be -specified in the MapFile and requested using the GetCoverage request. +specified in the mapfile and requested using the GetCoverage request. .. code-block:: mapfile @@ -74,8 +79,8 @@ specified in the MapFile and requested using the GetCoverage request. END A GetCoverage request can then be requested (using the parameters set in the -MapFile) by creating a URL with the elements: - Your Server, MapServer -Program, Location of MapFile, Type of Service (WCS), Request (GetCoverage), +mapfile) by creating a URL with the elements: - Your Server, MapServer +Program, Location of mapfile, Type of Service (WCS), Request (GetCoverage), Coverage (Landsat7), BBOX (0,0,700005,1050000), CRS (EPSG:27700), ResX (75) ResY (75), Format (ECW). @@ -86,7 +91,7 @@ SPOT imagery can be delivered through MapServer Web Coverage Service similarly to the Landsat example above. The main difference is that as SPOT is a greyscale image the wcs_bandcount = 1 rather than a Landsat image which consists of 3 bands. For this example the well known GeoTiff format will be -used to demonstrate what to specify in a MapFile for SPOT data. +used to demonstrate what to specify in a mapfile for SPOT data. .. code-block:: mapfile @@ -119,7 +124,7 @@ used to demonstrate what to specify in a MapFile for SPOT data. END END -The key parameters to specify in the WCS MapFile for any data layer and format +The key parameters to specify in the WCS mapfile for any data layer and format are:: - Layer Name = Create a short name for the data @@ -135,7 +140,7 @@ DEM It is possible to deliver 16 bit DEM data through the MapServer Web Coverage Service. -Firstly it is necessary to specify the output format in the map file +Firstly it is necessary to specify the output format in the mapfile: .. code-block:: mapfile @@ -147,7 +152,7 @@ Firstly it is necessary to specify the output format in the map file EXTENSION "tif" END -and the corresponding layer +and the corresponding layer: .. code-block:: mapfile @@ -170,8 +175,9 @@ and the corresponding layer END END -Performance gains can be made by using the gdaladdo utility described at -https://gdal.org/programs/gdaladdo.html +.. TIP:: + Performance gains can be made by using the `gdaladdo `__ + utility on your source rasters. NetCDF ====== @@ -261,7 +267,7 @@ like:: POLYGON ((xxx,xxxx,.......)) -Define your output format as +Define your output format as: .. code-block:: mapfile @@ -273,19 +279,26 @@ Define your output format as EXTENSION 'tif' END -Then you need to define your tile index within the map file +Then you need to define your tile index within the mapfile: + +.. NOTE:: + You must setup a :ref:`VALIDATION ` block for MapServer to + properly pass the *time* values in the WCS request. .. code-block:: mapfile LAYER NAME 'time_idx' TYPE TILEINDEX - DATA 'timeIndex' - FILTERITEM 'time' - FILTER '%time%' + DATA 'timeIndex.shp' + FILTER ("[time]" = '%time%') + VALIDATION + #handle time values of format YYYY-MM-DDThh:mm:ss + 'time' '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$' + END END -and the actual layer +and the corresponding layer: .. code-block:: mapfile @@ -318,7 +331,7 @@ and the actual layer The TempData coverage layer will now let you subset with the &bands=... &time=... subset parameters! -To do a coordinate reprojection specify in the request &Response_CRS=ESPG:xxxx +To do a coordinate reprojection specify in the request &Response_CRS=EPSG:xxxx When you start doing temporal subsetting with WCS and MapServer you can see the need for an automatic way of generating map files such as using an XSL @@ -344,7 +357,7 @@ This requires MapServer 7.2.0 for format-specific and layer-specific creation options mechanism, as well as GDAL 2.3.0 for GRIB2 output support. -Define your output format as +Define your output format as: .. code-block:: mapfile @@ -360,7 +373,7 @@ Define your output format as (consult `GDAL GRIB driver documentation`_ for more options that can be provided in FORMATOPTION) -and the actual layer +and the corresponding layer: .. code-block:: mapfile diff --git a/en/ogc/wcs_server.txt b/en/ogc/wcs_server.txt index 9fce168ea5c..4d1850a0529 100644 --- a/en/ogc/wcs_server.txt +++ b/en/ogc/wcs_server.txt @@ -13,10 +13,10 @@ :Contact: stephan.meissl at eox.at :Author: Fabian Schindler :Contact: fabian.schindler at eox.at -:Last Updated: 2025-08-02 +:Last Updated: 2026-04-20 .. contents:: Table of Contents - :depth: 2 + :depth: 3 :backlinks: top @@ -24,7 +24,7 @@ Introduction ============ A WCS (or Web Coverage Service) allows for the publication of -"coverages"- digital geospatial information representing space-varying +"coverages": digital geospatial information representing space-varying phenomena. In the MapServer world it allows for unfiltered access to raster data. Conceptually it is easy think of WCS as a raster equivalent of WFS. The following documentation is based on the `Open @@ -34,6 +34,7 @@ Implementation Specification version 1.0.0`_. Links to WCS-Related Information -------------------------------- +- :ref:`MapServer WCS Use Cases ` - `OGC'c WCS Standard page`_ - `WCS 1.0.0 specification`_ - `WCS 1.1.1c1 specification`_ @@ -44,27 +45,57 @@ Links to WCS-Related Information - `WCS 2.0 Specification - KVP Protocol Binding Extension`_ - `WCS 2.0 Specification - XML/POST Protocol Binding Extension`_ -- :ref:`WMS Server HowTo ` - Software Requirements --------------------- In order to enable MapServer to serve WCS data, it MUST be compiled against certain libraries: -- PROJ: The reprojection library. Version 4.4.3 or greater is required. -- GDAL: raster support library. -- MapServer: version >= 4.4 (tested with 5.0.2 while updating this document) +- `PROJ `__: The reprojection library. Version 4.4.3 or + greater is required. +- `GDAL `__: raster support library. +- MapServer: version >= 4.4 (tested with 8.6.1 while updating this document) -For WCS 1.1.x (MapServer 5.2) and WCS 2.0 (MapServer 6.0) support +For WCS 1.1.x support (since MapServer 5.2) and WCS 2.0 support (since MapServer 6.0) there is an additional requirement: -- libxml2: An xml parser and generation library. +- `libxml2 `__: An xml + parser and generation library. + +(Unix users should refer to the :ref:`unix` document for any compiling +instructions, and Windows users might want to use `MS4W `__, +which comes ready with WCS support) + +You can check that your :ref:`mapserv` executable includes WCS server support +by using the "-v" command-line switch and look for "SUPPORTS=WCS_SERVER". + +Example 1. On Unix: + +.. code-block:: bash + + $ ./mapserv -v + MapServer version 8.7-dev PROJ version 9.8 GDAL version 3.12 + OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG + SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=RSVG + SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT + SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER + SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER SUPPORTS=GEOS SUPPORTS=PBF + INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE + INPUT=FLATGEOBUF -Please see the :ref:`MapServer UNIX Compilation and Installation HowTo -` for detailed instructions on compiling MapServer with support -for these libraries and features. For Windows users, `MapServer for -Windows (MS4W)`_ comes with WCS Server support. +Example 2. On Windows: + +.. code-block:: bash + + C:\ms4w> mapserv -v + MapServer version 8.7-dev (MS4W 5.2.0) PROJ version 9.9 + GDAL version 3.13 OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ + SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS + SUPPORTS=SVGCAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER + SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT + SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=OGCAPI_SERVER + SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=PBF INPUT=JPEG + INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE INPUT=FLATGEOBUF .. index:: pair: WCS Server; Mapfile @@ -72,98 +103,105 @@ Windows (MS4W)`_ comes with WCS Server support. Configuring Your Mapfile to Serve WCS Layers ============================================ -Much as in the WMS and WFS support, WCS publishing is enabled by -adding certain magic METADATA keyword/value pairs to a .map file. +Similar to configuring :ref:`WMS ` and :ref:`WFS ` +support, WCS publishing in MapServer is enabled by adding certain magic +METADATA keyword/value pairs to a `.map` file. MapServer will serve and include in its WCS capabilities only the layers that meet the following conditions: - Data source is a raster, which is processed using GDAL - (e.g GeoTIFF, Erdas Imagine, ...) + (e.g GeoTIFF, NetCDF, ...) - LAYER NAME must be set - LAYER TYPE is set to RASTER -- WEB metadata or LAYER metadata "wcs_enable_request" must be set +- WEB metadata or LAYER metadata "wcs_enable_request" must be set + (see `MS RFC 67`_) - WEB metadata "wcs_label" must be set - LAYER metadata "wcs_label" must be set - LAYER metadata "wcs_rangeset_name" must be set - LAYER metadata "wcs_rangeset_label" must be set -- LAYER is enabled to be served via WCS (see `MS RFC 67`_) - -- LAYER PROJECTION must be set, even if PROJECTION is set at the MAP - level (a bug?) +- LAYER PROJECTION must be set (which tells MapServer the source projection + of the raster), and must also set the map-level PROJECTION (which + specifies the output projection) Example WCS Server Mapfile -------------------------- -The following is an example of a simple WCS Server mapfile. Note the -comments for the required parameters. +The following is an example of a simple WCS Server mapfile (that servers one +single raster). Note the comments for the required parameters. .. code-block:: mapfile - MAP - NAME WCS_server - STATUS ON - SIZE 400 300 - SYMBOLSET "../etc/symbols.txt" - EXTENT -2200000 -712631 3072800 3840000 - UNITS METERS - SHAPEPATH "../data" - IMAGECOLOR 255 255 255 - FONTSET "../etc/fonts.txt" - - - # - # Start of web interface definition - # - WEB - IMAGEPATH "/ms4w/tmp/ms_tmp/" - IMAGEURL "/ms_tmp/" - METADATA - "wcs_label" "GMap WCS Demo Server" ### required - "wcs_description" "Some text description of the service" - "wcs_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?" ### recommended - "wcs_fees" "none" - "wcs_accessconstraints" "none" - "wcs_keywordlist" "wcs,test" - "wcs_metadatalink_type" "TC211" - "wcs_metadatalink_format" "text/plain" - "wcs_metadatalink_href" "http://someurl.com" - "wcs_address" "124 Gilmour Street" - "wcs_city" "Ottawa" - "wcs_stateorprovince" "ON" - "wcs_postcode" "90210" - "wcs_country" "Canada" - "wcs_contactelectronicmailaddress" "blah@blah" - "wcs_contactperson" "me" - "wcs_contactorganization" "unemployed" - "wcs_contactposition" "manager" - "wcs_contactvoicetelephone" "613-555-1234" - "wcs_contactfacimiletelephone" "613-555-1235" - "wcs_service_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?" - "wcs_enable_request" "*" + MAP + NAME "WCS_server" + STATUS ON + SIZE 400 300 + SYMBOLSET "../etc/symbols.txt" + EXTENT -6661783 2801107 11407237 8055791 #for EPSG:3857, but useful only when testing mapfile through map2img (with WCS) + UNITS METERS + SHAPEPATH "./data" + IMAGECOLOR 255 255 255 + FONTSET "../etc/fonts.txt" + + CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_tmp/ms_error.txt" + DEBUG 5 + + WEB + IMAGEPATH "/ms4w/tmp/ms_tmp/" + IMAGEURL "/ms_tmp/" + METADATA + "wcs_label" "WCS Demo Server" ### required + "wcs_description" "Some text description of the service" ### recommended + "wcs_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=/ms4w/apps/wcs-demo/wcs.map" ### recommended + "wcs_service_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=/ms4w/apps/wcs-demo/wcs.map" ### recommended + "ows_title" "WCS Demo Server for MapServer" ### recommended + "ows_abstract" "This demonstration server showcases MapServer and its OGC support." ### recommended + "ows_contactperson" "me" + "ows_contactposition" "VIP" + "ows_contactorganization" "FOSS4G" + "ows_contactelectronicmailaddress" "blah@blah.com" + "ows_contactvoicetelephone" "+xx-xxx-xxx-xxxx" + "ows_contactfacsimiletelephone" "+xx-xxx-xxx-xxxx" + "ows_role" "developer" + "ows_addresstype" "postal" + "ows_address" "1234 Main Street" + "ows_city" "xxxxx" + "ows_stateorprovince" "xx" + "ows_postcode" "xxx xxx" + "ows_country" "Canada" + "ows_fees" "None" + "ows_accessconstraints" "None" + "ows_hoursofservice" "xxx" + "ows_contactinstructions" "xxx" + "wcs_keywordlist" "WCS,MODIS,NDVI,MapServer" + "wcs_enable_request" "*" ### required + END END - END - - PROJECTION - "init=epsg:3978" - END - - LAYER - NAME bathymetry - METADATA - "wcs_label" "Elevation/Bathymetry" ### required - "wcs_rangeset_name" "Range 1" ### required to support DescribeCoverage request - "wcs_rangeset_label" "My Label" ### required to support DescribeCoverage request - END - TYPE RASTER ### required - STATUS ON - DATA bath_mapserver.tif + #output projection PROJECTION - "init=epsg:3978" + "init=epsg:3857" #web mercator, see https://spatialreference.org/ref/epsg/3857/ END - END - END # Map File + + LAYER + NAME "bluemarble-2004" + METADATA + "wcs_label" "Elevation/Bathymetry" ### required + "wcs_rangeset_name" "My range" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My label" ### required to support DescribeCoverage request + "wcs_formats" "image/tiff" ### required + "ows_extent" "-180 -90 180 90" ### recommended + END + TYPE RASTER ### required + STATUS ON + DATA "world.topo.bathy.200401.3x5400x2700_geo.tif" + #the data's source projection + PROJECTION + "init=epsg:4326" #latlong, see https://spatialreference.org/ref/epsg/4326/ + END + DEBUG 5 + END # layer + END # mapfile .. index:: pair: WCS Server; Output formats @@ -172,13 +210,13 @@ Output Formats -------------- The raster formats supported by MapServer WCS are determined by the -wcs_formats metadata item on the LAYER. This should contain a space +*wcs_formats* metadata item on the LAYER. This should contain a space separated list of OUTPUTFORMAT driver names separated by spaces. If absent, all raster OUTPUTFORMATs are allowed. WCS is a "raw data" oriented format. So it often most suitable to use it with format using the BYTE, INT16 and FLOAT32 IMAGEMODEs with GDAL -related output formats rather than the built in "rendering oriented" +related output formats rather than the built-in "rendering oriented" output formats. By default the only GDAL format driver defined is the GTiff driver. The following are example output format declarations utilizing the raw image modes:: @@ -200,10 +238,294 @@ utilizing the raw image modes:: FORMATOPTION "FILENAME=result.grd" END -The FORMATOPTION FILENAME defines the preferred name of the result -file when returned WCS GetCoverage results. +The *FORMATOPTION FILENAME* defines the preferred name of the file returned +from WCS GetCoverage requests. + +.. TIP:: + The :ref:`MapServer WCS Use Cases ` document has more examples + of formats (for both input and output). + +Spatio/Temporal Indexes +----------------------- + +MapServer has long supported a method of breaking a dataset into smaller, more +manageable pieces or tiles. In this case a shapefile is used to store the +boundary of each tile, and an attribute holds the location of the actual data. +Within a MapServer mapfile the layer keywords *TILEINDEX* and *TILEITEM* are used +to activate tiling. + +Consider the example where an organization wants to serve hundreds or even +thousands of MODIS scenes in GeoTIFF format. Five images cover the spatial extent and each group +of five varies by date of acquisition. This turns out to be a fairly common +scenario for organizations interested in WCS, one that the existing tiling +support does not adequately address. In previous versions of MapServer a +developer would have to create one tileindex and one layer definition for +each group of five images. This could result in configuration files that are +prohibitively long and difficult to manage. + +In order to more efficiently support the WCS specification a new tiling scheme +has been implemented within MapServer. One that supports spatial sub-setting, +but also ad hoc sub-setting based on any attributes found within tileindex. +In many cases a temporal attribute could be used, but sub-setting is not +limited to that case. The new scheme introduces the concept of **tileindex +layers**, that is, *a separate layer definition is used to describe the tile +index dataset*. With this we get all the benefits of any MapServer layer, most +importantly we can apply MapServer filters to the data. Filters can be defined +at runtime using MapServer CGI, MapScript or via the WCS server interface. The +syntax for the layer using the index remains unchanged except that the value +for :ref:`TILEINDEX` refers to the index layer instead of an external shapefile. + +So, looking at the example above again we can reduce our MapServer +configuration to two layer definitions, one for the tileindex and one for the +imagery itself. Extracting a single date's worth of imagery is now a matter of +setting the appropriate filter within the tileindex layer. + +Building Spatio-Temporal TileIndexes +```````````````````````````````````` + +**Step 1: Create your spatial index** + +Taking the above example, the first step is to create the spatial index with the +GDAL utility `gdaltindex `__. +Simply point gdaltindex at the directory containing the +collection of images and it will build a shapefile index suitable for use with +MapServer. + +For example, the following command creates a shapefile index, for a folder +that contains many GeoTIFF images: + +.. code-block:: bash + + gdaltindex -of "ESRI Shapefile" index_bluemarble.shp *.tif + +Since GDAL 3.11 you can alternatively use the `gdal program `__ +such as: + +.. code-block:: bash + + gdal raster index --of "ESRI Shapefile" *.tif index_bluemarble.shp + +If you open that new spatial index in `QGIS `__ and then +view its attributes, you'll notice a single *location* field with all of the +GeoTIFF filenames, such as: + +.. image:: ../images/wcs-index1.png + :height: 330 + :width: 300 + :class: no-scaled-link + +**Step 2: Execute shptree on your spatial index file** + +Use MapServer's :ref:`shptree ` utility to make it faster for MapServer +to parse the index, with a command such as: + +.. code-block:: bash + + shptree index_bluemarble.shp + +You should notice that a new *.qix* file was created. + +**Step 3: Add the temporal information to the index** + +The next step would be to add the temporal (time) information to that index. + +You could either use QGIS again & manually add the time values to the index +attributes (in a new string field such as *imgdate*), or write a script to do +that: the pseudo code would look something like: + +- open the index .dbf file for reading + +- create a new column to hold the image acquisition date + +- for each image; 1) extract the image acquisition date and 2) insert it into + the new column - +- close the index .dbf file + +Whatever you choose, the resulting attributes of your spatial index file +may look like: + +.. image:: ../images/wcs-index2.png + :height: 323 + :width: 400 + :class: no-scaled-link + +Mapfile: define your Spatio/Temporal TileIndexes +```````````````````````````````````````````````` + +**Step 1: Setup your tileindex LAYER** + +The tileindex layer is where you point to the tileindex file that you +recently generated, and also define the FILTER for time requests, and +setup validation for that time format. + +.. NOTE:: + You must setup a :ref:`VALIDATION ` block for MapServer to + properly pass the *time* values in the WCS request. + +.. code-block:: mapfile + + /* tileindex layer */ + LAYER + NAME "bluemarble-idx" + TYPE TILEINDEX + DATA "index_bluemarble.shp" + FILTER ("[imgdate]" = '%time%') + VALIDATION + #handle time values of format YYYY-MM-DDThh:mm:ss + 'time' '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$' + END + PROJECTION + "init=epsg:4326" + END + END + +**Step 2: Setup your raster images LAYER** + +Now you can setup your raster images layer, that will point to the other tileindex +layer. + +.. NOTE:: + You must list all possible time values in the "wcs_timeposition" metadata. + +.. code-block:: mapfile + + /* raster layer, that points to the above tileindex layer */ + LAYER + NAME "bluemarble-2004" + METADATA + "wcs_label" "Elevation/Bathymetry" ### required + "wcs_description" "My WCS layer" ### recommended + "wcs_rangeset_name" "My range" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My label" ### required to support DescribeCoverage request + "wcs_formats" "image/tiff" ### required + "ows_extent" "-180 -90 180 90" ### recommended + "wcs_resolution" "0.066666666700000 0.066666666700000" ### required + "wcs_nativeformat" "raw binary" + "wcs_bandcount" "3" + "wcs_timeposition" "2004-01-01T00:00:00,2004-02-01T00:00:00,2004-03-01T00:00:00,2004-04-01T00:00:00,2004-05-01T00:00:00,2004-06-01T00:00:00,2004-07-01T00:00:00,2004-08-01T00:00:00,2004-09-01T00:00:00,2004-10-01T00:00:00,2004-11-01T00:00:00,2004-12-01T00:00:00" ### required + "wcs_timeitem" "imgdate" ### required + "wcs_rangeset_axes" "bands" + "wcs_rangeset_label" "Bands" + "wcs_rangeset_name" "Bands" + END + TYPE RASTER ### required + STATUS ON + TILEINDEX "bluemarble-idx" + TILEITEM "location" + #the data's source projection + PROJECTION + "init=epsg:4326" #latlong, see https://spatialreference.org/ref/epsg/4326/ + END + DEBUG 5 + END # layer + +Example WCS Server Mapfile with Spatial/Temporal +------------------------------------------------ + +The following is an example of a WCS Server mapfile that serves raster images +by pointing to a separate tileindex layer. Note the comments for the +required parameters. + +.. code-block:: mapfile + + MAP + NAME "WCS_server" + STATUS ON + SIZE 400 300 + SYMBOLSET "../etc/symbols.txt" + EXTENT -6661783 2801107 11407237 8055791 #for EPSG:3857, but useful only when testing mapfile through map2img (with WCS) + UNITS METERS + SHAPEPATH "./data" + IMAGECOLOR 255 255 255 + FONTSET "../etc/fonts.txt" + + CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_tmp/ms_error.txt" + DEBUG 5 + + WEB + IMAGEPATH "/ms4w/tmp/ms_tmp/" + IMAGEURL "/ms_tmp/" + METADATA + "wcs_label" "WCS Demo Server" ### required + "wcs_description" "Some text description of the service" ### recommended + "wcs_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=/ms4w/apps/wcs-demo/wcs-tiled.map" ### recommended + "wcs_service_onlineresource" "http://127.0.0.1/cgi-bin/mapserv.exe?MAP=/ms4w/apps/wcs-demo/wcs-tiled.map" ### recommended + "ows_title" "WCS Demo Server for MapServer" ### recommended + "ows_abstract" "This demonstration server showcases MapServer and its OGC support." ### recommended + "ows_contactperson" "me" + "ows_contactposition" "VIP" + "ows_contactorganization" "FOSS4G" + "ows_contactelectronicmailaddress" "blah@blah.com" + "ows_contactvoicetelephone" "+xx-xxx-xxx-xxxx" + "ows_contactfacsimiletelephone" "+xx-xxx-xxx-xxxx" + "ows_role" "developer" + "ows_addresstype" "postal" + "ows_address" "1234 Main Street" + "ows_city" "xxxxx" + "ows_stateorprovince" "xx" + "ows_postcode" "xxx xxx" + "ows_country" "Canada" + "ows_fees" "None" + "ows_accessconstraints" "None" + "ows_hoursofservice" "xxx" + "ows_contactinstructions" "xxx" + "wcs_keywordlist" "WCS,MODIS,NDVI,MapServer" + "wcs_enable_request" "*" ### required + END + END + + #output projection + PROJECTION + "init=epsg:3857" #web mercator, see https://spatialreference.org/ref/epsg/3857/ + END + + /* tileindex layer */ + LAYER + NAME "bluemarble-idx" + TYPE TILEINDEX + DATA "index_bluemarble.shp" + FILTER ("[imgdate]" = '%time%') + VALIDATION + #handle time values of format YYYY-MM-DDThh:mm:ss + 'time' '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$' + END + PROJECTION + "init=epsg:4326" + END + END + + /* raster layer, that points to the above tileindex layer */ + LAYER + NAME "bluemarble-2004" + METADATA + "wcs_label" "Elevation/Bathymetry" ### required + "wcs_description" "My WCS layer" ### recommended + "wcs_rangeset_name" "My range" ### required to support DescribeCoverage request + "wcs_rangeset_label" "My label" ### required to support DescribeCoverage request + "wcs_formats" "image/tiff" ### required + "ows_extent" "-180 -90 180 90" ### recommended + "wcs_resolution" "0.066666666700000 0.066666666700000" ### required + "wcs_nativeformat" "raw binary" + "wcs_bandcount" "3" + "wcs_timeposition" "2004-01-01T00:00:00,2004-02-01T00:00:00,2004-03-01T00:00:00,2004-04-01T00:00:00,2004-05-01T00:00:00,2004-06-01T00:00:00,2004-07-01T00:00:00,2004-08-01T00:00:00,2004-09-01T00:00:00,2004-10-01T00:00:00,2004-11-01T00:00:00,2004-12-01T00:00:00" ### required + "wcs_timeitem" "imgdate" ### required + "wcs_rangeset_axes" "bands" + "wcs_rangeset_label" "Bands" + "wcs_rangeset_name" "Bands" + END + TYPE RASTER ### required + STATUS ON + TILEINDEX "bluemarble-idx" + TILEITEM "location" + #the data's source projection + PROJECTION + "init=epsg:4326" #latlong, see https://spatialreference.org/ref/epsg/4326/ + END + DEBUG 5 + END # layer + END # mapfile + Test Your WCS 1.0 Server ======================== @@ -227,16 +549,33 @@ you add the parameters call to the MapServer executable, by setting *MS_MAP_PATTERN* or *MS_MAP_NO_PATH* or hiding the *MAP=* parameter on public servers, as recommended in the document :ref:`limit_mapfile_access`. All possible - environment variables to secure your server are listed in :ref:`environment_variables`. - + environment variables to secure your server are listed in :ref:`environment_variables`. If you get an error message in the XML output then take necessary actions. Common problems and solutions are listed in the FAQ at the end of this document. +.. TIP:: + To see MapServer error messages as you execute WCS requests, be sure + to set the `CONFIG "MS_ERRORFILE"` parameter, as well as `DEBUG 5` at in your + LAYER, such as: + + .. code-block:: mapfile + + MAP + ... + CONFIG "MS_ERRORFILE" "/ms4w/tmp/ms_error.txt" + DEBUG 5 + ... + LAYER + DEBUG 5 + ... + END + END + If everything went well, you should have a complete XML capabilities -document. Search it for the word "WARNING"... MapServer inserts XML -comments starting with "