-
Notifications
You must be signed in to change notification settings - Fork 2
/
MIGRATION_GUIDE.html
1386 lines (1340 loc) · 86.3 KB
/
MIGRATION_GUIDE.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>MapServer Migration Guide — MapServer 8.2.2 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="_static/sphinx.css?v=6c7b17ac" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=dd298242" />
<link rel="stylesheet" type="text/css" href="_static/ribbon.css?v=ea091bf4" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=8649718b"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/copybutton.js?v=f281be69"></script>
<link rel="icon" href="_static/mapserver.ico"/>
<link rel="author" title="About these documents" href="about.html" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="copyright" title="Copyright" href="copyright.html" />
<link rel="next" title="Data Input" href="input/index.html" />
<link rel="prev" title="Coverage Analyzer" href="mapcache/coverage.html" />
</head><body>
<!-- for main branch only, do not backport this -->
<table width="100%" style="width: 100%; background-color: white;">
<tr>
<td rowspan="2" style="padding: 10px 0px 10px 10px;">
<a href="index.html" title="Home"><img src="_static/banner.png" alt="MapServer banner" border="0" /></a>
</td>
<td style="padding: 10px 10px 0px 0px; text-align: right; vertical-align: top;">
<a href="index.html" title="Home">Home</a> |
<a href="products.html" title="Products (MapServer core, MapCache, TinyOWS">Products</a> |
<a href="https://github.com/mapserver/mapserver/issues/" title="Issue Tracker (MapServer core)">Issue Tracker</a> |
<a href="community/service_providers.html" title="Professional Service Providers">Service Providers</a> |
<a href="faq.html" title="Frequently Asked Questions">FAQ</a> |
<a href="https://twitter.com/mapserver_osgeo" title="Twitter" target="_blank">Twitter</a> |
<a href="download.html" title="Download Source or Binaries">Download </a> |
<a class="badge" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=KRJ2X44N3HA6U&source=url" target="_blank">
<img src="https://img.shields.io/badge/donate-%E2%9D%A4%C2%A0-ff69b4.svg?style=flat" alt="Donate to MapServer">
</a>
</td>
</tr>
<tr>
<td style="padding: 0px 10px 0px 0px; text-align: right; vertical-align: bottom;">
<img src="_static/flagicons/en.png" alt="en" title="en" border="0" width="18px" height="13px"/>
<a href="ar/MIGRATION_GUIDE.html"><img src="_static/flagicons/ar.png" alt="ar" title="ar" border="0" /></a>
<a href="de/MIGRATION_GUIDE.html"><img src="_static/flagicons/de.png" alt="de" title="de" border="0" /></a>
<a href="el/MIGRATION_GUIDE.html"><img src="_static/flagicons/el.png" alt="el" title="el" border="0" /></a>
<a href="es/MIGRATION_GUIDE.html"><img src="_static/flagicons/es.png" alt="es" title="es" border="0" /></a>
<a href="fr/MIGRATION_GUIDE.html"><img src="_static/flagicons/fr.png" alt="fr" title="fr" border="0" /></a>
<a href="id/MIGRATION_GUIDE.html"><img src="_static/flagicons/id.png" alt="id" title="id" border="0" /></a>
<a href="it/MIGRATION_GUIDE.html"><img src="_static/flagicons/it.png" alt="it" title="it" border="0" /></a>
<a href="ja/MIGRATION_GUIDE.html"><img src="_static/flagicons/ja.png" alt="ja" title="ja" border="0" /></a>
<a href="nl_NL/MIGRATION_GUIDE.html"><img src="_static/flagicons/nl_NL.png" alt="nl_NL" title="nl_NL" border="0" /></a>
<a href="pl/MIGRATION_GUIDE.html"><img src="_static/flagicons/pl.png" alt="pl" title="pl" border="0" /></a>
<a href="ru/MIGRATION_GUIDE.html"><img src="_static/flagicons/ru.png" alt="ru" title="ru" border="0" /></a>
<a href="sq/MIGRATION_GUIDE.html"><img src="_static/flagicons/sq.png" alt="sq" title="sq" border="0" /></a>
<a href="tr/MIGRATION_GUIDE.html"><img src="_static/flagicons/tr.png" alt="tr" title="tr" border="0" /></a>
</td>
</tr>
</table>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="input/index.html" title="Data Input"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="mapcache/coverage.html" title="Coverage Analyzer"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">Home</a> »</li>
<li class="nav-item nav-item-1"><a href="documentation.html" accesskey="U">MapServer 8.2.2 Documentation</a> »</li>
<li class="nav-item nav-item-this"><a href="">MapServer Migration Guide</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="mapserver-migration-guide">
<span id="migration"></span><h1><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer Migration Guide</a><a class="headerlink" href="#mapserver-migration-guide" title="Link to this heading">¶</a></h1>
<dl class="field-list simple">
<dt class="field-odd">Last Updated<span class="colon">:</span></dt>
<dd class="field-odd"><p>2024-08-26</p>
</dd>
</dl>
<nav class="contents" id="table-of-contents">
<p class="topic-title">Table of Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#mapserver-migration-guide" id="id3">MapServer Migration Guide</a></p>
<ul>
<li><p><a class="reference internal" href="#mapserver-8-0-to-8-2-migration" id="id4">MapServer 8.0 to 8.2 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-7-6-to-8-0-migration" id="id5">MapServer 7.6 to 8.0 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-7-4-to-7-6-migration" id="id6">MapServer 7.4 to 7.6 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-7-2-to-7-4-migration" id="id7">MapServer 7.2 to 7.4 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-7-0-to-7-2-migration" id="id8">MapServer 7.0 to 7.2 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-6-4-to-7-0-migration" id="id9">MapServer 6.4 to 7.0 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-6-2-to-6-4-migration" id="id10">MapServer 6.2 to 6.4 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-6-0-to-6-2-migration" id="id11">MapServer 6.0 to 6.2 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-5-6-to-6-0-migration" id="id12">MapServer 5.6 to 6.0 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-5-4-to-5-6-migration" id="id13">MapServer 5.4 to 5.6 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-5-2-to-5-4-migration" id="id14">MapServer 5.2 to 5.4 Migration</a></p></li>
<li><p><a class="reference internal" href="#mapserver-4-10-to-5-0-migration" id="id15">MapServer 4.10 to 5.0 Migration</a></p></li>
</ul>
</li>
</ul>
</nav>
<section id="mapserver-8-0-to-8-2-migration">
<span id="migration-8-2"></span><h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 8.0 to 8.2 Migration</a><a class="headerlink" href="#mapserver-8-0-to-8-2-migration" title="Link to this heading">¶</a></h2>
<ul class="simple">
<li><p>The 8.2 release includes a fix for a security flaw for regex validation
(CVE has been requested)</p></li>
<li><p>The GitHub <a class="reference external" href="https://github.com/MapServer/MapServer/">repository</a> has been
restructured to move all source code into the <em>/src</em> folder</p></li>
<li><p>The unused <cite>sym2img</cite> commandline utility has been removed</p></li>
<li><p>support for GDAL < 3 has been removed</p></li>
<li><p>support for PROJ < 6 has been removed</p></li>
</ul>
</section>
<section id="mapserver-7-6-to-8-0-migration">
<span id="migration-8-0"></span><h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 7.6 to 8.0 Migration</a><a class="headerlink" href="#mapserver-7-6-to-8-0-migration" title="Link to this heading">¶</a></h2>
<ul>
<li><p>The former <cite>shp2img</cite> commandline utility has been renamed to <a class="reference internal" href="utilities/map2img.html#map2img"><span class="std std-ref">map2img</span></a></p></li>
<li><p>Every MapServer installation as of the 8.0.0 release will require a
<a class="reference internal" href="mapfile/config.html#config"><span class="std std-ref">CONFIG</span></a> file.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>For example, compiling from source on Ubuntu, by default MapServer will install
a sample config file at <em>/usr/local/etc/mapserver-sample.conf</em>, and you must
rename that file to <em>mapserver.conf</em>.</p>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>For MS4W users (version >= 5), the config
file can be found at <em>/ms4w/ms4w.conf</em></p>
</div>
</li>
<li><p>Old native PHP MapScript has been removed, in place of PHPNG (SWIG) MapScript.
Follow the MapScript <a class="reference internal" href="mapscript/mapscript-api/index.html#swig"><span class="std std-ref">SWIG API</span></a> documentation. Compiling SWIG <cite>master</cite>
from <a class="reference external" href="https://github.com/swig/swig">GitHub</a> is recommended.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The MS4W community has produced many code examples of PHPNG (SWIG) MapScript:
<a class="reference external" href="https://ms4w.com/trac/wiki/MigrationGuide5.x">https://ms4w.com/trac/wiki/MigrationGuide5.x</a></p>
</div>
</li>
<li><p>To follow the WMS specification, the <cite>STYLES</cite> parameter will now be required for
GetMap requests. To bypass this requirement, you can set <cite>wms_allow_getmap_without_styles</cite>
in your <a class="reference internal" href="ogc/wms_server.html#wms-server"><span class="std std-ref">WMS Server</span></a> mapfile, such as:</p>
<div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">MAP</span>
<span class="p">...</span>
<span class="k">WEB</span>
<span class="k">METADATA</span>
<span class="s">"wms_title"</span> <span class="s">"My WMS Server"</span>
<span class="p">...</span>
<span class="s">"wms_allow_getmap_without_styles"</span> <span class="s">"true"</span>
<span class="k">END</span> <span class="c">#metadata</span>
<span class="k">END</span> <span class="c">#web</span>
<span class="p">...</span>
<span class="k">END</span> <span class="c">#map</span>
</pre></div>
</div>
</li>
<li><p>Several deprecated mapfile parameters have been removed, and will throw an
error if you still specify them now. The following are specific examples
to be aware of (but be sure to review the <a class="reference internal" href="development/rfc/ms-rfc-133.html#rfc133"><span class="std std-ref">full list</span></a>), taken from the
MS4W <a class="reference external" href="https://ms4w.com/trac/wiki/MigrationGuide5.x">migration guide</a>:</p>
<ul>
<li><p><strong>DUMP TRUE</strong></p>
<p>Instead, you can configure querying of your layer by using METADATA instead, such as:</p>
<div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="p">...</span>
<span class="k">METADATA</span>
<span class="s">"wms_title"</span> <span class="s">"Populated Places"</span>
<span class="s">"wms_include_items"</span> <span class="s">"all"</span>
<span class="s">"gml_include_items"</span> <span class="s">"all"</span>
<span class="s">"gml_featureid"</span> <span class="s">"ogc_fid"</span>
<span class="k">END</span> <span class="c">#metadata</span>
<span class="p">...</span>
<span class="k">END</span> <span class="c">#layer</span>
</pre></div>
</div>
</li>
<li><p><strong>OPACITY</strong> at the <strong>LAYER-level</strong></p>
<p>Instead it must be inside a <a class="reference internal" href="mapfile/composite.html#composite"><span class="std std-ref">COMPOSITE</span></a> object:</p>
<div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="p">...</span>
<span class="k">COMPOSITE</span>
<span class="k">OPACITY</span> <span class="mi">40</span>
<span class="k">END</span> <span class="c">#composite</span>
<span class="k">END</span> <span class="c">#layer</span>
</pre></div>
</div>
</li>
<li><p><strong>COLOR</strong> at the <strong>CLASS-level</strong></p>
<p>Instead it must be inside the class’ <a class="reference internal" href="mapfile/style.html#style"><span class="std std-ref">STYLE</span></a> object:</p>
<div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="p">...</span>
<span class="k">CLASS</span>
<span class="p">...</span>
<span class="k">STYLE</span>
<span class="k">COLOR</span> <span class="mi">120</span> <span class="mi">120</span> <span class="mi">120</span>
<span class="k">END</span> <span class="c">#style</span>
<span class="k">END</span> <span class="c">#class</span>
<span class="k">END</span> <span class="c">#layer</span>
</pre></div>
</div>
</li>
</ul>
</li>
<li><p>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
<a class="reference internal" href="cgi/runsub.html#runsub"><span class="std std-ref">Run-time Substitution</span></a>, but with a more limited list of supported mapfile
parameters (see related <a class="reference external" href="https://lists.osgeo.org/pipermail/mapserver-users/2022-October/082795.html">discussion</a>).
Here is an example CGI request pre-8.0 release:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">...&</span><span class="nb">map</span><span class="o">.</span><span class="n">layer</span><span class="p">[</span><span class="n">county</span><span class="p">]</span><span class="o">.</span><span class="n">class</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">label</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="n">SIZE</span><span class="o">+</span><span class="mi">24</span><span class="o">&...</span>
</pre></div>
</div>
</li>
<li><p>Reminder: every mapfile <a class="reference internal" href="mapfile/layer.html#layer"><span class="std std-ref">LAYER</span></a> should include a <strong>NAME</strong> parameter.
The NAME should <strong>not contain</strong> special characters, or spaces, or begin with
a number. This simple name is important for your downstream users (such as
through OGC services).</p>
<div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="k">NAME</span> <span class="s">"mylayer"</span> <span class="c">#strongly recommended</span>
<span class="k">GROUP</span> <span class="s">"mygroup"</span>
<span class="p">...</span>
<span class="k">END</span> <span class="c">#layer</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="mapserver-7-4-to-7-6-migration">
<span id="migration-7-6"></span><h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 7.4 to 7.6 Migration</a><a class="headerlink" href="#mapserver-7-4-to-7-6-migration" title="Link to this heading">¶</a></h2>
<ul>
<li><p>MapServer now requires at least CMake version 3.0 for compiling</p></li>
<li><p>PointZM data support (X,Y,Z,M coordinates) is now enabled by default</p></li>
<li><p>the PROJ 6 API is now supported. Read about the many changes in PROJ since
the <a class="reference external" href="https://proj.org/news.html">PROJ 6.0 release</a>. Note that older
PROJ versions such as 5.2.0 will still work with MapServer.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Here are the (as of 2021-07-13) optimal combinations of MapServer with GDAL & PROJ:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">MapServer</span> <span class="mf">7.6.4</span> <span class="o">+</span> <span class="n">GDAL</span> <span class="mf">2.4.4</span> <span class="o">+</span> <span class="n">PROJ</span> <span class="mf">5.2.0</span> <span class="p">(</span><span class="n">GDAL</span> <span class="mi">2</span> <span class="n">series</span><span class="p">)</span>
<span class="n">MapServer</span> <span class="mf">7.6.4</span> <span class="o">+</span> <span class="n">GDAL</span> <span class="mf">3.3.1</span> <span class="o">+</span> <span class="n">PROJ</span> <span class="mf">8.1.0</span> <span class="p">(</span><span class="n">GDAL</span> <span class="mi">3</span> <span class="n">series</span><span class="p">)</span>
</pre></div>
</div>
</div>
</li>
<li><p>CONNECTIONOPTIONS parameter has been added in the mapfile LAYER, to take
advantage of GDAL/OGR driver options. (see <a class="reference internal" href="development/rfc/ms-rfc-125.html#rfc125"><span class="std std-ref">RFC 125</span></a>) such as:</p>
<blockquote>
<div><div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="k">NAME</span> <span class="s">"test"</span>
<span class="k">CONNECTIONTYPE</span> <span class="nb">OGR</span>
<span class="k">CONNECTION</span> <span class="s">"./data/nested_attrs.geojson"</span>
<span class="k">CONNECTIONOPTIONS</span>
<span class="s">"FLATTEN_NESTED_ATTRIBUTES"</span> <span class="s">"YES"</span>
<span class="k">END</span>
<span class="nx">[...]</span>
<span class="k">END</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>new processing directive <cite>RENDERMODE</cite> (added through <a class="reference internal" href="development/rfc/ms-rfc-124.html#rfc124"><span class="std std-ref">RFC 124 SLD changes</span></a>)
to enable a ‘painters model’ where all classes for a layer are drawn at once with a
<cite>ALL_MATCHING_CLASSES</cite> setting, such as:</p>
<blockquote>
<div><div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="k">NAME</span> <span class="s">"test"</span>
<span class="k">CONNECTIONTYPE</span> <span class="nb">OGR</span>
<span class="k">CONNECTION</span> <span class="s">"./data/nested_attrs.geojson"</span>
<span class="k">PROCESSING</span> <span class="s">"RENDERMODE=ALL_MATCHING_CLASSES"</span>
<span class="k">CLASS</span>
<span class="p">...</span>
<span class="k">END</span>
<span class="k">CLASS</span>
<span class="p">...</span>
<span class="k">END</span>
<span class="k">CLASS</span>
<span class="p">...</span>
<span class="k">END</span>
<span class="k">END</span>
</pre></div>
</div>
</div></blockquote>
<p>More information in <a class="reference external" href="https://github.com/MapServer/MapServer/pull/5839">issue 5839</a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>RFC 124 (SLD improvements) has been implemented except PR#5832:
<a class="reference external" href="https://github.com/MapServer/MapServer/pull/5832">SLD: Improve WMS GetStyles request</a>.</p>
</div>
</li>
<li><p>WMS client layers can be set to essential, with the new <cite>wms_essential</cite> metadata item,
which will cause MapServer to fail and report an error (normally MapServer would just
ignore that layer).</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>enabling <cite>wms_essential</cite> means that if there is a problem with the connection,
(such as the <cite>CONNECTION</cite> url cannot be reached, or an incorrect <cite>wms_name</cite>
or <cite>wms_format</cite>) an XML error will be returned in the browser. If you are calling
MapServer through commandline, your <a class="reference internal" href="mapfile/map.html#map"><span class="std std-ref">MAP</span></a> setting for <cite>CONFIG “ON_MISSING_DATA”</cite>
will still be leveraged for how that error is handled locally.</p>
</div>
<p>Here is an example of the new <cite>wms_essential</cite> parameter:</p>
<blockquote>
<div><div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="k">NAME</span> <span class="s">"country_bounds"</span>
<span class="k">TYPE</span> <span class="nb">RASTER</span>
<span class="k">STATUS</span> <span class="nb">ON</span>
<span class="k">CONNECTION</span> <span class="s">"https://demo.mapserver.org/cgi-bin/wms?"</span>
<span class="k">CONNECTIONTYPE</span> <span class="nb">WMS</span>
<span class="k">METADATA</span>
<span class="s">"wms_srs"</span> <span class="s">"EPSG:4326"</span>
<span class="s">"wms_name"</span> <span class="s">"country_bounds"</span>
<span class="s">"wms_server_version"</span> <span class="s">"1.1.1"</span>
<span class="s">"wms_format"</span> <span class="s">"image/png"</span>
<span class="s">"wms_essential"</span> <span class="s">"1"</span>
<span class="k">END</span>
<span class="k">END</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Windows users can now use umlauts (special characters such as ä ö ü) in their
directory paths and filenames, such as:</p>
<blockquote>
<div><div class="highlight-mapfile notranslate"><div class="highlight"><pre><span></span><span class="k">LAYER</span>
<span class="p">..</span>
<span class="k">DATA</span> <span class="s">"ä1-test.tif"</span>
<span class="p">..</span>
<span class="k">END</span> <span class="c">#layer</span>
</pre></div>
</div>
</div></blockquote>
</li>
</ul>
</section>
<section id="mapserver-7-2-to-7-4-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 7.2 to 7.4 Migration</a><a class="headerlink" href="#mapserver-7-2-to-7-4-migration" title="Link to this heading">¶</a></h2>
<ul>
<li><p>PHP 7 MapScript support: users are recommended to switch to MapServer’s new <a class="reference internal" href="mapscript/mapscript-api/index.html#swig"><span class="std std-ref">SWIG</span></a> API
support of PHP 7+ (reason for recommendation: as we saw with the breaking PHP 7 changes,
managing PHP through SWIG will be easier on the MapServer maintainers in the long run.)
Some important SWIG notes:</p>
<ul>
<li><p>you will require at least <a class="reference external" href="http://www.swig.org/download.html">SWIG-3.0.11</a>
(but 4.0.0 is recommended).</p></li>
<li><p>if you notice any missing functions that were available in the old native PHP MapScript API,
first please check the <a class="reference internal" href="mapscript/mapscript-api/index.html#swig"><span class="std std-ref">SWIG API</span></a> reference document for an alternative function to use,
and if there is nothing similar available then <a class="reference external" href="https://github.com/MapServer/MapServer/issues">file a ticket</a>
for each function that you require.</p></li>
<li><p>all of your PHP scripts (that leverage MapServer objects and functions) must now always
first include the generated <cite>mapscript.php</cite> file containing MapServer constants:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">required</span> <span class="n">SWIG</span> <span class="n">include</span> <span class="p">(</span><span class="n">contains</span> <span class="n">MapServer</span> <span class="n">constants</span> <span class="k">for</span> <span class="n">PHP7</span><span class="p">)</span>
<span class="n">include</span><span class="p">(</span><span class="s2">"C:/ms4w/apps/phpmapscriptng-swig/include/mapscript.php"</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>take note of the change in how to declare your new objects:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>// open map
$oMap = new mapObj("C:/ms4w/apps/phpmapscriptng-swig/sample.map");
</pre></div>
</div>
<p>instead of the former way:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>// open map
$oMap = ms_newMapObj("C:/ms4w/apps/phpmapscript/sample.map");
</pre></div>
</div>
</li>
</ul>
</li>
</ul>
</section>
<section id="mapserver-7-0-to-7-2-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 7.0 to 7.2 Migration</a><a class="headerlink" href="#mapserver-7-0-to-7-2-migration" title="Link to this heading">¶</a></h2>
<ul class="simple">
<li><p>LABEL->PARTIALS now defaults to “FALSE” instead of “TRUE” which implies that
by default labels that do not fully fit in the map image will be discarded.</p></li>
</ul>
</section>
<section id="mapserver-6-4-to-7-0-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 6.4 to 7.0 Migration</a><a class="headerlink" href="#mapserver-6-4-to-7-0-migration" title="Link to this heading">¶</a></h2>
<ul class="simple">
<li><p>The predefined field names for the union and cluster layers have been changed.
Colons in the field names have been replaced with underscores to avoid producing
invalid GetFeatureInfo results. The field names in the mapfiles should be modified
according to this change.</p></li>
<li><p>Layer FILTERs <em>must</em> use MapServer expression syntax only. Drivers will attempt to translate
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.</p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># OGR Layer Before</span>
<span class="n">LAYER</span>
<span class="o">...</span>
<span class="n">FILTER</span> <span class="s1">'where id=234'</span>
<span class="n">END</span>
<span class="c1"># OGR Layer After</span>
<span class="n">LAYER</span>
<span class="o">...</span>
<span class="n">PROCESSING</span> <span class="s1">'NATIVE_FILTER=id=234'</span>
<span class="n">END</span>
</pre></div>
</div>
<ul class="simple">
<li><p>MapServer attribute queries (e.g. mode=item[n]query) <em>must</em> be specified using MapServer
expression syntax (qstring and qitem (opt)). For RDBMS backends you no longer send SQL snippets,
rather the underlying driver will attempt to translate the expression to native syntax (e.g. SQL).
If translation fails (or the driver doesn’t support translation) then MapServer will evaluate
the expression instead.</p></li>
<li><p>Layer opacity is now deprecated a result of RFC 113 - Layer Compositing. The mapfile parser
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 <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-113.html">https://mapserver.org/development/rfc/ms-rfc-113.html</a>.</p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Before</span>
<span class="n">LAYER</span>
<span class="o">...</span>
<span class="n">OPACITY</span> <span class="mi">70</span>
<span class="n">END</span>
<span class="c1"># After</span>
<span class="n">LAYER</span>
<span class="o">...</span>
<span class="n">COMPOSITE</span>
<span class="n">OPACITY</span> <span class="mi">70</span>
<span class="n">END</span>
<span class="n">END</span>
</pre></div>
</div>
<ul>
<li><p>Handling of non UTF-8 encoded datasources has changed with RFC103. Mapfiles
now <em>must</em> be saved in UTF-8 encoding, and requests returned by MapServer
will always be UTF-8 encoded. Various “xxx_encoding” metadata entries used to
hack around non UTF-8 encoded datasources are now obsolete, and have been
replaced by a LAYER-level ENCODING keyword.</p></li>
<li><p>Native ESRI SDE layers are no longer supported (see <a class="reference external" href="https://github.com/MapServer/MapServer/pull/5068">https://github.com/MapServer/MapServer/pull/5068</a>).
OGR remains an alternative for those that really need it although the OGR/SDE driver suffers from the
same issues that prompted the removal from MapServer.</p></li>
<li><p>GD graphics library support was removed (<a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-99.html">https://mapserver.org/development/rfc/ms-rfc-99.html</a>) and
had been optional since 6.2.</p>
<blockquote>
<div><ul class="simple">
<li><p>GIF output cannot be produced from MapServer although 8-bit PNG output can be be produced using the AGG/PNG8 driver.</p></li>
<li><p>Bitmap fonts have been replaced with an embedded TrueType font (see <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-104.html">https://mapserver.org/development/rfc/ms-rfc-104.html</a>)</p></li>
</ul>
</div></blockquote>
</li>
<li><p>RFC 98 - Label/Text Rendering Overhaul (<a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-98.html">https://mapserver.org/development/rfc/ms-rfc-98.html</a>) may
result in subtle label/character placement changes. Support for negative MAXLENGTH that implied forced
linebreaks is not supported anymore, workaround implies pre-processing such labels to include linebreaks
or wrap characters.</p></li>
<li><p>ExternalGraphics added through SLD must now validate against the
“sld_external_graphic” entry of the MAP->WEB->VALIDATION block</p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">MAP</span>
<span class="n">WEB</span>
<span class="n">VALIDATION</span>
<span class="s2">"sld_external_graphic"</span> <span class="s2">"^/path/to/symbols/.*png"</span>
<span class="n">END</span>
<span class="n">END</span>
<span class="n">END</span>
</pre></div>
</div>
</section>
<section id="mapserver-6-2-to-6-4-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 6.2 to 6.4 Migration</a><a class="headerlink" href="#mapserver-6-2-to-6-4-migration" title="Link to this heading">¶</a></h2>
<ul class="simple">
<li><p>The “ows_extent” layer metadata is not used anymore to obtain georeferencing
information for unreferenced raster data. Please use the “extent” layer key
instead</p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">LAYER</span>
<span class="o">...</span>
<span class="n">EXTENT</span> <span class="o">-</span><span class="mi">180</span> <span class="mi">90</span> <span class="mi">180</span> <span class="mi">90</span>
<span class="n">END</span>
</pre></div>
</div>
<ul class="simple">
<li><p>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 <a class="reference internal" href="cgi/runsub.html#runsub"><span class="std std-ref">Run-time Substitution</span></a></p></li>
<li><p>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.</p></li>
<li><p>WFS paging parameter startIndex changed to base on 0 instead of 1 (0 is the first
feature). See #4180 for external references.</p></li>
<li><p>Template substitution tags were case-sensitive, they are now
case-insensitive.</p></li>
</ul>
</section>
<section id="mapserver-6-0-to-6-2-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 6.0 to 6.2 Migration</a><a class="headerlink" href="#mapserver-6-0-to-6-2-migration" title="Link to this heading">¶</a></h2>
<p>This section documents the changes that must be made to MapServer
applications when migrating from version 6.0.x (or earlier versions)
to 6.2 (i.e. backwards incompatibilities), as well as information
on some of the new features.</p>
<section id="build-system-changes">
<h3>Build system changes<a class="headerlink" href="#build-system-changes" title="Link to this heading">¶</a></h3>
<p>If you are building MapServer from source, then the following may be of interest to you:</p>
<ul class="simple">
<li><p>Use of libtool: In version 6.2, the Unix/Linux build scripts and Makefiles were converted to use libtool. One impact of this change is that the ‘mapserv’ file in the main source tree is a libtool wrapper script and not the actual binary. To use ‘mapserv’ you actually have to use ‘make install’ and then point to the installed binary. More info is available in the Compiling on Unix document at <a class="reference external" href="https://mapserver.org/installation/unix.html#installation">https://mapserver.org/installation/unix.html#installation</a></p></li>
<li><p>The –with-php configure option has been changed to point directly to the php-config script instead of to the directory where the PHP headers are located.</p></li>
</ul>
</section>
<section id="cgi-changes">
<h3>CGI Changes<a class="headerlink" href="#cgi-changes" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Changing MIN/MAXSCALE or MIN/MAXSCALEDENOM via URL is no longer supported.</p></li>
<li><p>The syntax for changing a LABEL with CGI commands has changed along with the
ability to support multiple labels
The previous syntax …&map.layer[0].class[0]=label+color+255+0+0+end&… is
replaced with …&map.layer[0].class[0].label[0]=color+255+0+0&…
Note that cgi label modifications are/were broken in 6.2.0 and fixed in 6.2.1</p></li>
</ul>
</section>
<section id="rendering-changes">
<h3>Rendering changes<a class="headerlink" href="#rendering-changes" title="Link to this heading">¶</a></h3>
<ul>
<li><p>STYLE->GAP interpretation
Starting in 6.2, STYLE->GAP specifies the gap between the symbols
using the centre to centre distance.
In earlier versions of MapServer, GAP was used as the approximate
distance between the symbol boundaries.
See ticket #3867 for more information.</p>
<p>In order to get the same effect with 6.2 as with 6.0, STYLE->GAP
must be increased with the size of the symbol.</p>
</li>
<li><p>Removal of one pixel gap between symbols
In earlier versions of MapServer, an extra gap of one pixel was
added between the symbols (in addition to the gap specified in
STYLE->GAP). This has been discontinued in 6.2.
See ticket #3868 for more information.</p>
<p>In order to get the same effect with 6.2 as with 6.0, STYLE->GAP
must be increased with one pixel.</p>
</li>
<li><p>STYLE->INITIALGAP introduced
Support for more powerful line styling has been provided with the
introduction of STYLE->INITIALGAP. See ticket #3879 and the
documentation for more information.</p></li>
<li><p>SYMBOL->ANCHORPOINT introduced
A symbol anchorpoint has been introduced to facilitate precise
positioning of symbols. See ticket #4066 and the documentation for
more information.</p></li>
<li><p>Change in vector symbol size calculation.
In 6.2, vector symbol coordinates are shifted to get rid of
negative x and y coordinate values.
See ticket #4116 for more information.</p>
<p>In order to get the shifting effect that could be obtained using
negative coordinate values, SYMBOL->ANCHORPOINT should be used
instead.</p>
</li>
</ul>
</section>
</section>
<section id="mapserver-5-6-to-6-0-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 5.6 to 6.0 Migration</a><a class="headerlink" href="#mapserver-5-6-to-6-0-migration" title="Link to this heading">¶</a></h2>
<p>This section documents the changes that must be made to MapServer
applications when migrating from version 5.6.x (or earlier versions)
to 6.0 (i.e. backwards incompatibilities), as well as information
on some of the new features.</p>
<section id="mapfile-changes-expression-parsing">
<h3>Mapfile Changes - Expression Parsing<a class="headerlink" href="#mapfile-changes-expression-parsing" title="Link to this heading">¶</a></h3>
<p>Version 6.0 features an extensive reworking of the expression parsing capabilities.
While this adds functionality it also introduces a couple of regressions:</p>
<p>Logical Expressions</p>
<ul class="simple">
<li><p>a regex is now delineated as a string (e.g. ‘^a’ rather than /^a/)</p></li>
<li><p>the regex operator is ~ for case sensitive comparisons and ~* for case insensitive</p></li>
<li><p>case insensitive string comparison operator is =*</p></li>
</ul>
<p>Class text expressions are true expressions in 6.0. This allows for fancy formatting
of numeric data but also means string operators must be used to concatenate attribute
values and string literals.</p>
<ul class="simple">
<li><p>Old/bad: TEXT ([area] acres)</p></li>
<li><p>New (option 1)/good: TEXT (‘[area]’ + ‘ acres’)</p></li>
<li><p>New (option 2)/good: TEXT ‘[area] acres’</p></li>
</ul>
<p>On the plus side you can now control the number of decimal places, round and even commify
the area value for display.</p>
<p>See <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-64.html">https://mapserver.org/development/rfc/ms-rfc-64.html</a> and <a class="reference external" href="https://github.com/MapServer/MapServer/issues/3736">https://github.com/MapServer/MapServer/issues/3736</a>
for more information.</p>
</section>
<section id="mapfile-changes-label-styles">
<h3>Mapfile Changes - Label Styles<a class="headerlink" href="#mapfile-changes-label-styles" title="Link to this heading">¶</a></h3>
<p>As the need for more and more control of label drawing increased it became apparent that
we couldn’t extend labelObj’s endlessly. In 6.0 we introduce the idea of label styles, that
is, a styleObj inside a labelObj. The styles can be used to add accompanying markers or
bounding box elements to a label- kinda like annotation layers. The big benefit is that
it’s done in one pass. So you can draw complex roadwork and shields all at the same time.
Pretty neat huh? Plus you can do attribute binding for any of the styleObj attributes that
support it.</p>
<p>As a result the parameters BACKGROUNDCOLOR, BACKGROUNDSHADOWCOLOR, BACKGROUNDSHADOWSIZE
are no more. To draw a label “box” in 6.0 you’d do:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">LABEL</span>
<span class="o">...</span>
<span class="n">STYLE</span> <span class="c1"># a shadow</span>
<span class="n">GEOMTRANSFORM</span> <span class="s1">'labelpoly'</span>
<span class="n">COLOR</span> <span class="mi">222</span> <span class="mi">222</span> <span class="mi">222</span>
<span class="n">OFFSET</span> <span class="mi">2</span> <span class="mi">2</span>
<span class="n">END</span>
<span class="n">STYLE</span> <span class="c1"># bbox</span>
<span class="n">GEOMTRANSFORM</span> <span class="s1">'labelpoly'</span>
<span class="n">COLOR</span> <span class="mi">255</span> <span class="mi">255</span> <span class="mi">255</span>
<span class="n">OUTLINECOLOR</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span>
<span class="n">END</span>
<span class="n">END</span>
</pre></div>
</div>
<p>More verbose but <em>much</em> more flexible in the long run.</p>
</section>
<section id="mapfile-changes-label-maxoverlapangle">
<h3>Mapfile Changes - Label MAXOVERLAPANGLE<a class="headerlink" href="#mapfile-changes-label-maxoverlapangle" title="Link to this heading">¶</a></h3>
<p><a class="reference internal" href="development/rfc/ms-rfc-60.html#rfc60"><span class="std std-ref">MS RFC 60: Labeling enhancement: ability to skip ANGLE FOLLOW labels with too much character overlap</span></a> introduced a new MAXOVERLAPANGLE keyword to filter out ANGLE
FOLLOW labels in which characters overlap. This new option is enabled by
default in 6.0 with a default value for MAXOVERLAPANGLE of 22.5 degrees.</p>
<p>As per <a class="reference internal" href="development/rfc/ms-rfc-60.html#rfc60"><span class="std std-ref">MS RFC 60: Labeling enhancement: ability to skip ANGLE FOLLOW labels with too much character overlap</span></a>, it is possible to set MAXOVERLAPANGLE to 0 to fall back
on pre-6.0 behavior which was to use hardcoded maxoverlapangle = 0.4*MS_PI
(40% of 180 degrees = 72 degrees).</p>
</section>
<section id="core-changes-rendering-overhaul">
<h3>Core Changes - Rendering Overhaul<a class="headerlink" href="#core-changes-rendering-overhaul" title="Link to this heading">¶</a></h3>
<p>The rendering backends for MapServer have been refactored for version 6 to
allow us to support all features across all rendering drivers (GD,AGG,PDF,SVG, etc…).</p>
<ul class="simple">
<li><p>PDF support is output through the cairo library. The dependency on the non-free
pdflib library has been removed.</p></li>
<li><p>SVG support is output through the cairo library. The native mapserver SVG driver
has been removed.</p></li>
<li><p>AGG support is compiled in by default (no external dependency) and is the
default renderer for png and jpeg outputs.</p></li>
<li><p>GD support is limited to PC256 imagemodes, i.e. png or gif. It is the default
renderer for gif output.</p></li>
<li><p>SWF (flash) support has been dropped.</p></li>
<li><p>Header files for libpng, libjpeg and giflib are now required for building MapServer.
Install the -devel packages of these libraries.</p></li>
<li><p>All symbols now rotated anticlockwise following the ANGLE parameter. Previous versions
rotated vector symbols clockwise.</p></li>
<li><p>Polygon fills with vector symbols will not cleanly join at tile boundaries. For hatching
type symbology, use the HATCH symbol instead of a diagonal vector symbol.</p></li>
<li><p>Some inconsistencies between renderers have been ironed out. People relying on precise
symbol placement should check those, as there may have been some subtle changes in symbol
sizes and widths, or spacing between symbols on lines.</p></li>
<li><p>Style blocks with no associated symbol on point layers will produce no output, as opposed
to a single pixel in previous versions. Use an ellipse symbol instead.</p></li>
</ul>
</section>
<section id="mapfile-changes-line-styling">
<h3>Mapfile Changes - line styling<a class="headerlink" href="#mapfile-changes-line-styling" title="Link to this heading">¶</a></h3>
<p>All line styling must now be specified in class STYLEs in the layer definition.</p>
<p>The following parameters/keywords have been moved from SYMBOL
to STYLE:</p>
<p>PATTERN POSITION GAP LINECAP LINEJOIN LINEJOINMAXSIZE</p>
<p>The SYMBOL STYLE parameter/keyword was renamed to PATTERN in
version 5.</p>
<p>The SYMBOL TYPE cartoline has been removed.</p>
<p>LINECAP triangle is not supported by AGG or Cairo, and is no longer
available. The triangle line end effect can be achieved using
GEOMTRANSFORM start and end with a (filled) vector triangle symbol and
ANGLE AUTO. This will only work for the line ends, and not for
dashes.</p>
</section>
<section id="id1">
<h3>CGI Changes<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3>
<p>Runtime substitution now <em>requires</em> a validation pattern be present before the
substitution will take place (this had been optional). This can be done via
a layer metadata tag as before or within layer or web VALIDATION blocks. See
ticket #3522 for more information.</p>
<p>All of the query map related modes (e.g. NQUERYMAP, ITEMQUERYMAP, etc…) have
been removed in favor of using the “qformat” parameter. That parameter takes
an output format name or mime/type as a value and uses that to process a set
of query results. For example:</p>
<blockquote>
<div><p>…&mode=nquerymap&… would become …&mode=nquery&qformat=png24&…</p>
</div></blockquote>
</section>
<section id="ogc-web-services">
<h3>OGC Web Services<a class="headerlink" href="#ogc-web-services" title="Link to this heading">¶</a></h3>
<p>All OGC Web Services are now disabled by default. If you want to enable them as
they were in MapServer 5.6 and older releases, add the following metadata in the
MAP::WEB section:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="s2">"ows_enable_request"</span> <span class="s2">"*"</span>
</pre></div>
</div>
<p>See also: <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-67.html">https://mapserver.org/development/rfc/ms-rfc-67.html</a></p>
</section>
<section id="mapfile-changes-wcs-metadata">
<h3>Mapfile Changes - WCS Metadata<a class="headerlink" href="#mapfile-changes-wcs-metadata" title="Link to this heading">¶</a></h3>
<p>To avoid confusion only “wcs_*” and “ows_*” prefixed metadata entries
are evaluated in OGC WCS services. Previous versions used “wms_*”
prefixed entries as fallback which is dropped in version 6.0 in favor of
forcing explicit decisions.</p>
</section>
<section id="mapfile-changes-ogc-requests-dump-parameter-removed">
<h3>Mapfile Changes - OGC requests - DUMP parameter removed<a class="headerlink" href="#mapfile-changes-ogc-requests-dump-parameter-removed" title="Link to this heading">¶</a></h3>
<p>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:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">METADATA</span>
<span class="n">gml_geometries</span> <span class="s2">"geom"</span>
<span class="n">gml_geom_type</span> <span class="s2">"polygon"</span>
<span class="o">...</span>
<span class="n">END</span>
</pre></div>
</div>
</section>
<section id="mapfile-changes-ability-to-escape-single-double-quotes">
<h3>Mapfile Changes - Ability to escape single/double quotes<a class="headerlink" href="#mapfile-changes-ability-to-escape-single-double-quotes" title="Link to this heading">¶</a></h3>
<p>We can now escape single and double quotes in strings and logical
expressions. Examples:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">NAME</span> <span class="s2">"RO</span><span class="se">\"</span><span class="s2">AD"</span> <span class="c1"># double quote inside a a double quote delimited string</span>
<span class="n">NAME</span> <span class="s1">'RO</span><span class="se">\'</span><span class="s1">AD'</span> <span class="c1"># single quote inside a a single quote delimited string</span>
<span class="n">FILTER</span> <span class="p">(</span><span class="s1">'[CTY_NAME]'</span> <span class="o">=</span> <span class="s1">'Ita</span><span class="se">\'</span><span class="s1">sca'</span><span class="p">)</span> <span class="c1"># logical expression that contains a single quote</span>
</pre></div>
</div>
<p>NOTE: The escape character (backslash) will only work if the
following character is “, ‘ or .</p>
<p>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.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">SHAPEPATH</span> <span class="s2">"C:\ms4w\shapefiles</span><span class="se">\"</span>
<span class="c1"># should be modified to...</span>
<span class="n">SHAPEPATH</span> <span class="s2">"C:\ms4w\shapefiles</span><span class="se">\\</span><span class="s2">"</span>
</pre></div>
</div>
</section>
<section id="php-mapscript-changes">
<h3>PHP MapScript Changes<a class="headerlink" href="#php-mapscript-changes" title="Link to this heading">¶</a></h3>
<ul>
<li><p>PHP 5.2.0 or more recent is required.</p></li>
<li><p>PHP/MapScript now uses exceptions for error report. All errors are catchable.</p></li>
<li><p>Object properties can be set like all other php object. ie. myObj->myProperty = 10;</p>
<p>NOTE: The set/setProperty methods are still available.</p>
</li>
<li><p>All object constructors throw an exception on failure</p></li>
<li><p>Objects can be created with the php “new” operator. ie.
$myShape = ms_newShapeObj(MS_SHAPE_LINE); // or
$myShape = new shapeObj(MS_SHAPE_LINE);</p>
<dl class="simple">
<dt>NOTE: “ms_newSymbolObj()” and “new symbolObj” are different:</dt><dd><ul class="simple">
<li><p>ms_newSymbolObj() returns the id of the new/existing symbol.</p></li>
<li><dl class="simple">
<dt>new symbolObj() returns the symbolObj. You don’t need to</dt><dd><p>get it with getSymbolObjectById().</p>
</dd>
</dl>
</li>
</ul>
</dd>
</dl>
</li>
<li><p>Cloneable objects should be cloned with the PHP clone keyword. There is no more clone methods.</p></li>
<li><p>Class properties that have been removed</p>
<ul class="simple">
<li><p>mapObj: imagetype, imagequality, interlace, scale, transparent</p></li>
<li><p>classObj: maxscale, minscale</p></li>
<li><dl class="simple">
<dt>layerObj: labelsizeitem, labelangleitem, labelmaxscale, labelminscale,</dt><dd><p>maxscale, minscale, symbolscale, transparency</p>
</dd>
</dl>
</li>
<li><p>legendObj: interlace, transparent</p></li>
<li><p>scalebarObj: interlace, transparent</p></li>
<li><p>symbolObj: gap, stylelength</p></li>
<li><p>webObj: minscale, maxscale</p></li>
</ul>
</li>
<li><p>Class methods that have been removed</p>
<ul class="simple">
<li><p>projectionObj: free</p></li>
<li><p>lineObj: free</p></li>
<li><p>pointObj: free</p></li>
<li><p>rectObj: free</p></li>
<li><p>shapeObj: free, union_geos</p></li>
<li><p>symbolObj: free, getstylearray</p></li>
<li><p>imageObj: free</p></li>
<li><p>outputFormatObj: getformatoption, setformatoption</p></li>
<li><p>shapefileObj: free</p></li>
<li><p>layerObj: getFilter, getShape</p></li>
</ul>
</li>
<li><p>referenceMapObj has new properties: marker, markername, markersize, maxboxsize, minboxsize</p></li>
<li><p>shapeFileObj is automatically closed/written on destroy. (At the end of the script or with an explicit unset())</p></li>
<li><p>layerObj->clearProcessing() method now returns void.</p></li>
<li><p>mapObj->queryByIndex(): default behavior for the addToQuery parameter was not ok, now it is.</p></li>
<li><p>Methods that now return MS_SUCCESS/MS_FAILURE:</p>
<ul class="simple">
<li><p>symbolObj: setPoints, setPattern</p></li>
<li><p>scalebarObj: setImageColor</p></li>
<li><p>outputFormatObj: validate</p></li>
<li><p>layerObj: setProcessing, addFeature, draw</p></li>
<li><dl class="simple">
<dt>mapObj: moveLayerUp, moveLayerDown, zoomRectangle, zoomScale, setProjection,</dt><dd><p>setWKTProjection, setLayersDrawingOrder</p>
</dd>
</dl>
</li>
</ul>
</li>
<li><p>Methods that now return NULL on failure:</p>
<ul class="simple">
<li><p>classObj: clone</p></li>
<li><p>styleObj: clone</p></li>
<li><p>layerObj: nextShape, getExtent</p></li>
<li><p>mapObj: clone, draw, drawQuery getLayerByName, getProjection,</p></li>
</ul>
</li>
<li><p>Methods that now return an empty array</p>
<ul class="simple">
<li><p>symbolObj: getPatternArray</p></li>
<li><p>layerObj: getItems, getProcessing, getGridIntersectionCoordinates</p></li>
<li><p>mapObj: getLayersIndexByGroup, getAllGroupNames, getLayersDrawingOrder, getAllLayerNames</p></li>
</ul>
</li>
</ul>
</section>
<section id="mapscript-all-flavors">
<h3>MapScript (All Flavors)<a class="headerlink" href="#mapscript-all-flavors" title="Link to this heading">¶</a></h3>
<p>The layer query result handing has been re-worked (again) to address some issues introduced in
the 5.4/5.6 versions. Gone are resultsGetShape and getFeature methods. You should now use a
refactored getShape method to access layer shapes. That method takes a resultObj and returns
a shapeObj. Typical use would be (in Perl):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$layer->queryByRect($map, $map->{extent}); # layer is still open
for($i=0; $i<$layer->getNumResults(); $i++) {
$shape = $layer->getShape($layer->getResult($i));
print "$i: ". $shape->getValue(1) ."\n";
}
$layer->close();
</pre></div>
</div>
<p>A resultObj encapsulates the data used to manage a result set.</p>
<p>To access shapes independently of a query use the new resultObj class:</p>
<blockquote>
<div><p>$layer->open();
$shape = $layer->getShape(new mapscript::resultObj(1));
$layer->close();</p>
</div></blockquote>
<p>See <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-65.html">https://mapserver.org/development/rfc/ms-rfc-65.html</a> for more information.</p>
</section>
<section id="outputformat">
<h3>OUTPUTFORMAT<a class="headerlink" href="#outputformat" title="Link to this heading">¶</a></h3>
<p>The OUTPUTFORMAT parameter validation when reading from the mapfile
will now trigger an error on some problems that in the past were
silently fixed up. For instance using RGBA IMAGEMODE with JPEG format
now triggers an error instead of switching to IMAGEMODE RGB silently.</p>
<p>The default outputformats names, drivers and mimetypes have been significantly
reorganized:</p>
<ul class="simple">
<li><p>png : AGG/PNG (image/png)</p></li>
<li><p>jpeg : AGG/JPEG (image/jpeg)</p></li>
<li><p>gif : GD/GIF (image/gif)</p></li>
<li><p>png8 : AGG/PNG8 (same as AGG/PNG, but with 256 color quantization applied)
(image/png; mode=8bit)</p></li>
<li><p>png24 : AGG/PNG (for backwards compatibility) (image/png; mode=24bit)</p></li>
<li><p>pdf : CAIRO/PDF (application/x-pdf)</p></li>
<li><p>svg : CAIRO/SVG (image/svg+xml)</p></li>
<li><p>GTiff : GDAL/GTiff (image/tiff)</p></li>
<li><p>kml : KML (application/vnd.google-earth.kml++xml)</p></li>
<li><p>kmz : KMZ (application/vnd.google-earth.kmz)</p></li>
</ul>
</section>
<section id="rasters">
<h3>Rasters<a class="headerlink" href="#rasters" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>The support for rendering rasters without GDAL has been removed. Now
RASTER layers (or WMS layers) require that MapServer be built against
the GDAL library.</p></li>
<li><p>The above change also means there is no longer support for EPPL raster layers.</p></li>
</ul>
</section>
<section id="deprecated-features">
<h3>Deprecated features<a class="headerlink" href="#deprecated-features" title="Link to this heading">¶</a></h3>
<ul class="simple">
<li><p>Support for Flash/SWF output has been removed as part of the rendering overhaul
because it was no longer compatible with the new architecture.
Support for Flash/SWF could be reintroduced but would require a non trivial
amount of work (i.e. would require funding).</p></li>
<li><p>Support for “CONNECTIONTYPE MyGIS” has been dropped since it was no longer
being maintained and there are better ways to use MySQL data sources theses
days, going through OGR for instance.</p></li>
</ul>
</section>
</section>
<section id="mapserver-5-4-to-5-6-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 5.4 to 5.6 Migration</a><a class="headerlink" href="#mapserver-5-4-to-5-6-migration" title="Link to this heading">¶</a></h2>
<p>This section documents the changes that must be made to MapServer
applications when migrating from version 5.4.x (or earlier versions)
to 5.6 (i.e. backwards incompatibilities), as well as information
on some of the new features.</p>
<section id="mapscript-changes-related-to-single-pass-queries">
<h3>MapScript changes related to single pass queries<a class="headerlink" href="#mapscript-changes-related-to-single-pass-queries" title="Link to this heading">¶</a></h3>
<p>In RFC-52, MapServer was modified to perform queries using a single pass
on the data instead of two passes. This is transparent for CGI applications,
but MapScript scripts must be modified to use the layer.resultsGetShape()
method instead of layer.getShape().</p>
<p>See also: <a class="reference external" href="https://mapserver.org/development/rfc/ms-rfc-52.html">https://mapserver.org/development/rfc/ms-rfc-52.html</a></p>
<p>(Note: the new resultsGetShape() method is not yet available for PHP MapScript
in 5.6.0-beta1)</p>
</section>
<section id="wfs-1-1-axis-orientation">
<h3>WFS 1.1 axis orientation<a class="headerlink" href="#wfs-1-1-axis-orientation" title="Link to this heading">¶</a></h3>
<p>The axis order in previous versions of the WFS specifications was to always use
easting (x or lon ) and northing (y or lat). WFS 1.1 specifies that, depending
on the particular SRS, the x axis may or may not be oriented West-to-East, and
the y axis may or may not be oriented South-to-North. The WFS portrayal operation
shall account for axis order. This affects some of the EPSG codes that were commonly
used such as ESPG:4326. The current implementation makes sure that coordinates
returned to the server for the GetFeature request reflect the inverse axis orders
for EPSG codes between 4000 and 5000.</p>
</section>
<section id="change-of-mime-type-for-the-imagemap-outputformat">
<h3>Change of mime-type for the imagemap outputformat<a class="headerlink" href="#change-of-mime-type-for-the-imagemap-outputformat" title="Link to this heading">¶</a></h3>
<p>RFC 36 added support for templated outptformats, 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
for the text/html mime-type between the actual text/html query
templates and the preconfigured imagemap outputformat which also used the
text/html mime-type.</p>
<p>In order to resolve this conflict, the mime-type of the imagemap outputformat
has been changed to “text/html; driver=imagemap”. This is unlikely to cause
much side-effects to existing applications, but the change is documented here
just in case.</p>
</section>
</section>
<section id="mapserver-5-2-to-5-4-migration">
<h2><a class="toc-backref" href="#table-of-contents" role="doc-backlink">MapServer 5.2 to 5.4 Migration</a><a class="headerlink" href="#mapserver-5-2-to-5-4-migration" title="Link to this heading">¶</a></h2>
<p>This section documents the changes that must be made to MapServer
applications when migrating from version 5.2. (or earlier versions)
to 5.4 (i.e. backwards incompatibilities), as well as information
on some of the new features.</p>
<section id="new-requirements-for-mapfiles-symbolsets-and-templates">
<h3>New requirements for mapfiles, symbolsets and templates<a class="headerlink" href="#new-requirements-for-mapfiles-symbolsets-and-templates" title="Link to this heading">¶</a></h3>
<p>Due to some potential security vulnerabilities that were uncovered in previous
versions of MapServer, RFC-56 introduced a number of changes to tighten
access control on mapfiles and templates and limit the risk of leaking
arbitrary file contents. These changes were introduced in version 5.4.0,
and were also backported to v5.2.2 and 4.10.4.</p>
<p>The new requirements are as follows:</p>
<ul class="simple">
<li><p>The MAP and SYMBOLSET keywords must be added to any mapfile and symbolset
that did not contain them already.</p></li>
<li><p>All MapServer templates must be updated to contain the “MapServer Template”
magic string on the first line. This string can be embedded
in a comment depending on the template format and the whole line will
be skipped in the output generation. e.g.</p>
<ul>
<li><p>In HTML: <!– MapServer Template –></p></li>
<li><p>In JavaScript: // MapServer Template</p></li>
</ul>
</li>
</ul>