MapServer迁移指南

最后更新

2021-07-13

从MapServer 7.4迁移到7.6

  • MapServer现在至少需要CMake 3.0版才能进行编译

  • 现在默认情况下启用PointZM数据支持(X、Y、Z、M坐标

  • 现在支持Proj6API。阅读有关Proj自 PROJ 6.0 release 。请注意,较早的项目版本(如5.2.0)仍可与MapServer一起使用。

    小技巧

    以下是(截至2021-07-13)MapServer与GDAL和Proj:的最佳组合

    MapServer 7.6.4 + GDAL 2.4.4 + PROJ 5.2.0 (GDAL 2 series)
    MapServer 7.6.4 + GDAL 3.3.1 + PROJ 8.1.0 (GDAL 3 series)
    
  • 已在映射文件层中添加了CONNECTIONOPTIONS参数,以利用GDAL/OGR驱动程序选项。(见 RFC 125 ),例如:

    LAYER
      NAME "test"
      CONNECTIONTYPE OGR
      CONNECTION "./data/nested_attrs.geojson"
      CONNECTIONOPTIONS
        "FLATTEN_NESTED_ATTRIBUTES" "YES"
      END
      [...]
    END
    
  • 新的处理指令 RENDERMODE (通过以下方式添加 RFC 124 SLD changes )以启用“画家模型”,其中一个层的所有类都是使用 ALL_MATCHING_CLASSES 设置,例如:

    LAYER
      NAME "test"
      CONNECTIONTYPE OGR
      CONNECTION "./data/nested_attrs.geojson"
      PROCESSING "RENDERMODE=ALL_MATCHING_CLASSES"
      CLASS
        ...
      END
      CLASS
        ...
      END
      CLASS
        ...
      END
    END
    

    更多信息,请访问 issue 5839

    备注

    RFC 124(SLD改进)已实施,PR#5832除外: SLD: Improve WMS GetStyles request

  • 可将WMS客户端图层设置为Essential,使用新的 wms_essential 元数据项,这将导致MapServer失败并报告错误(通常MapServer只会忽略该层)。

    备注

    使能 wms_essential 这意味着如果连接出现问题(例如 CONNECTION 无法访问URL,或输入的URL不正确 wms_namewms_format )浏览器中将返回一个XML错误。如果您通过命令行调用MapServer,则您的 MAP 设置为 CONFIG "ON_MISSING_DATA" 仍将被用于在本地处理该错误的方式。

    这里是一个新的例子 wms_essential 参数:

    LAYER
      NAME "country_bounds"
      TYPE RASTER
      STATUS ON
      CONNECTION "https://demo.mapserver.org/cgi-bin/wms?"
      CONNECTIONTYPE WMS
      METADATA
        "wms_srs"             "EPSG:4326"
        "wms_name"            "country_bounds"
        "wms_server_version"  "1.1.1"
        "wms_format"          "image/png"
        "wms_essential"       "1"
      END
    END
    
  • Windows用户现在可以在其目录路径和文件名中使用元音符号(如äöü等特殊字符),例如:

    LAYER
      ..
      DATA  "ä1-test.tif"
      ..
    END #layer
    

MapServer 7.2到7.4迁移

  • php 7 mapscript支持:建议用户切换到mapserver的新 SWIG 对php 7+的API支持(推荐理由:正如我们在中断的php7更改中看到的,从长远来看,通过swig管理php对mapserver维护人员来说会更容易。)一些重要的swig注意事项:

    • 你至少需要 SWIG-3.0.11 (但建议使用4.0.0)。

    • 如果您注意到旧的本机PHP MapScrip API中缺少任何可用函数,请首先查看 SWIG API 要使用的替代函数的参考文档,如果没有类似的可用的 file a ticket 用于您所需的每个功能。

    • 您的所有PHP脚本(利用MapServer对象和函数)现在必须始终首先包含生成的 mapscript.php 包含MapServer常量的文件:

      // required SWIG include (contains MapServer constants for PHP7)
      include("C:/ms4w/apps/phpmapscriptng-swig/include/mapscript.php");
      
    • 注意如何声明新对象的更改:

      // open map
      $oMap = new mapObj("C:/ms4w/apps/phpmapscriptng-swig/sample.map");
      

      而不是以前的方式:

      // open map
      $oMap = ms_newMapObj("C:/ms4w/apps/phpmapscript/sample.map");
      

MapServer 7.0到7.2迁移

  • label->partials现在默认为“false”而不是“true”,这意味着默认情况下,不完全适合地图图像的标签将被丢弃。

MapServer 6.4到7.0迁移

  • 联合层和集群层的预定义字段名已更改。字段名中的冒号已替换为下划线,以避免生成无效的GetFeatureInfo结果。映射文件中的字段名应根据此更改进行修改。

  • 分层滤波器 must 仅使用MapServer表达式语法。驱动程序将尝试从MapServer语法转换为本机语法(例如SQL)。仍然可以使用以下方法设置本机表达式:1)在数据语句中进行子选择,或2)使用新的本机过滤器处理键。

# OGR Layer Before
LAYER
  ...
  FILTER 'where id=234'
END

# OGR Layer After
LAYER
  ...
  PROCESSING 'NATIVE_FILTER=id=234'
END
  • MapServer属性查询(例如mode=item [n] 查询) must 使用mapserver表达式语法(qstring和qitem(opt))指定。对于RDBMS后端,不再发送SQL片段,而是底层驱动程序将尝试将表达式转换为本机Systax(例如SQL)。如果转换失败(或者驱动程序不支持转换),那么MapServer将改为计算表达式。

  • 由于RFC113图层合成的结果,图层不透明度现在被弃用。mapfile解析器和MapScript getter/setter函数将继续工作,但是如果与复合块一起使用,将出现不可预测的结果。有关详细信息,请参见http://www.mapserver.org/development/rfc/ms-rfc-113.html。

# Before
LAYER
  ...
  OPACITY 70
END

# After
LAYER
  ...
  COMPOSITE
    OPACITY 70
  END
END
  • 非UTF-8编码数据源的处理已更改为RFC103。Mapfiles现在 must 以UTF-8编码保存,MapServer返回的请求将始终采用UTF-8编码。用于破解非UTF-8编码数据源的各种“xxx-u编码”元数据条目现在已经过时,并被一个层级编码关键字替换。

  • 不再支持本地ESRI SDE图层(请参阅https://github.com/MapServer/MapServer/pull/5068).OGR仍然是那些真正需要它的人的替代方案,尽管OGR/SDE驱动程序遇到了促使从MapServer中删除的相同问题。

  • gd图形库支持被删除(http://www.mapserver.org/development/rfc/ms-rfc-99.html),从6.2开始是可选的。

    • 虽然可以使用agg/png8驱动程序生成8位png输出,但无法从mapserver生成gif输出。

    • 位图字体已替换为嵌入式TrueType字体(请参阅http://www.mapserver.org/development/rfc/ms-rfc-104.html)

  • RFC 98-标签/文本呈现大修(http://www.mapserver.org/development/rfc/ms-rfc-98.html)可能导致标签/字符位置的细微变化。不支持隐含强制换行符的负maxlength,解决方法意味着预处理此类标签以包含换行符或换行符。

  • 通过sld添加的外部图形现在必须根据map->web->validation块的“sld_外部图形”条目进行验证。

MAP
 WEB
  VALIDATION
   "sld_external_graphic" "^/path/to/symbols/.*png"
  END
 END
END

MapServer 6.2到6.4迁移

  • “OWS扩展”层元数据不再用于获取未引用栅格数据的地理参考信息。请改用“扩展”层键

LAYER
  ...
  EXTENT -180 90 180 90
END
  • 不能在元数据块中指定验证模式(即使用XXX U验证U模式和默认的U XXX元数据条目),请使用验证块。见4596 4604 4608或 运行时替换

  • 在切换到cmake后,生成已更改。构建说明包含在源目录的install.cmake文件中。您需要在系统上安装cmake。mapscripts(php除外)的用户也需要安装swig。

  • WFS分页参数StartIndex更改为基于0而不是1(0是第一个功能)。外部参考见4180。

  • 模板替换标记区分大小写,现在不区分大小写。

MapServer 6.0到6.2迁移

本节记录从版本6.0.x(或更早版本)迁移到6.2(即向后不兼容)时必须对MapServer应用程序进行的更改,以及一些新功能的信息。

生成系统更改

如果您是从源代码构建MapServer,那么您可能会感兴趣以下内容:

  • libtool的使用:在版本6.2中,Unix/Linux构建脚本和生成文件被转换为使用libtool。这种更改的一个影响是,主源代码树中的“mapserv”文件是libtool包装脚本,而不是实际的二进制文件。要使用“mapserv”,实际上必须使用“make install”,然后指向已安装的二进制文件。有关更多信息,请参阅https://mapserver.org/installation/unix.html installation上的compiling on unix文档。

  • --with php configure选项已更改为直接指向php config脚本,而不是指向php头所在的目录。

CGI变化

  • 不再支持通过url更改min/maxscale或min/maxscaledenom。

  • 用CGI命令更改标签的语法已更改,同时支持多个标签。上一个语法…&map.layer[0].class[0]=label+color+255+0+0+end&…替换为…&map.layer[0].class[0].label[0]=color+255+0+0&…注意,CGI标签修改在6.2.0中被破坏,在6.2.1中被修复。

呈现更改

  • Style->Gap判读从6.2开始,Style->Gap使用中心到中心的距离指定符号之间的间隙。在早期版本的MapServer中,Gap被用作符号边界之间的近似距离。更多信息请参见票3867。

    为了在6.2中获得与6.0相同的效果,样式->间隙必须随着符号的大小而增大。

  • 在早期版本的MapServer中,除去符号之间的一个像素间隙,在符号之间添加了一个额外的像素间隙(除了样式->间隙中指定的间隙)。这已在6.2中中止。更多信息请参见票3868。

    为了使6.2的效果与6.0的效果相同,样式->间隙必须增加一个像素。

  • Style->InitialGap引入了对更强大的线条样式的支持,并引入了Style->InitialGap。有关更多信息,请参阅票据3879和文档。

  • symbol->anchorpoint引入了一个符号anchorpoint,以便于符号的精确定位。有关更多信息,请参阅票据4066和文档。

  • 矢量符号大小计算的更改。在6.2中,矢量符号坐标被移动以消除负的x和y坐标值。详见票4116。

    为了得到用负坐标值可以得到的位移效应,应使用符号->锚定点。

MapServer 5.6到6.0迁移

本节记录了从5.6.x版(或更早版本)迁移到6.0版(即向后不兼容)时必须对MapServer应用程序进行的更改,以及一些新功能的信息。

映射文件更改-表达式分析

版本6.0的特点是对表达式解析功能进行了广泛的修改。虽然这增加了功能,但也引入了一些回归:

逻辑表达式

  • regex现在被定义为字符串(例如,“^a”而不是“/^a/”)

  • regex运算符是~用于区分大小写的比较,~*用于不区分大小写

  • 不区分大小写的字符串比较运算符为=*

类文本表达式是6.0中的真表达式。这允许对数值数据进行特殊格式设置,但也意味着必须使用字符串运算符来连接属性值和字符串文本。

  • 旧/坏:文本([面积]英亩)

  • 新建(选项1)/良好:文本(“[区域]”+“英亩”)

  • 新建(选项2)/良好:文本“[面积]英亩”

在正数方面,您现在可以控制小数位数,舍入,甚至合并显示区域值。

有关详细信息,请参阅https://mapserver.org/development/rfc/ms-rfc-64.html和https://github.com/MapServer/MapServer/issues/3736。

Mapfile 更改-标签样式

随着对标签绘制控制的需求越来越大,很明显我们无法无限地扩展Labelobj。在6.0中,我们介绍了标签样式的概念,也就是说,在labelobj中有一个styleobj。样式可用于向标签添加伴随的标记或边界框元素-类似于注释层。最大的好处是一次完成。所以你可以同时绘制复杂的道路和护盾。很干净啊?另外,您还可以为支持它的任何StyleObj属性进行属性绑定。

因此,参数backgroundcolor、backgroundshadowcolor、backgroundshadowsize不再是。要在6.0中绘制标签“框”,您需要执行以下操作:

LABEL
  ...
  STYLE # a shadow
    GEOMTRANSFORM 'labelpoly'
    COLOR 222 222 222
    OFFSET 2 2
  END
  STYLE # bbox
    GEOMTRANSFORM 'labelpoly'
    COLOR 255 255 255
    OUTLINECOLOR 0 0 0
  END
END

更详细,但是 much 从长远来看更灵活。

Mapfile 更改-标签最大重叠角度

MS RFC 60:标签增强:能够跳过字符重叠过多的角度跟踪标签 引入了一个新的maxoverlappangle关键字来过滤字符重叠的角度跟随标签。此新选项在6.0中默认启用,最大重叠角度的默认值为22.5度。

按照 MS RFC 60:标签增强:能够跳过字符重叠过多的角度跟踪标签 ,可以将maxoverlappangle设置为0以返回6.0之前的行为,即使用硬编码的maxoverlappangle=0.4*ms_pi(180度的40%=72度)。

核心变更-渲染大修

MapServer的渲染后端已针对版本6进行了重构,以允许我们支持所有渲染驱动程序(gd、agg、pdf、svg等)的所有功能。

  • PDF支持通过cairo库输出。已删除对非免费pdflib库的依赖。

  • SVG支持通过cairo库输出。已删除本机MapServer SVG驱动程序。

  • agg支持在默认情况下编译(无外部依赖项),是png和jpeg输出的默认渲染器。

  • GD支持仅限于PC256图像模式,即PNG或GIF。它是GIF输出的默认渲染器。

  • SWF(闪存)支持已被放弃。

  • 现在构建MapServer需要libpng、libjpeg和giflib的头文件。安装这些库的-devel包。

  • 所有符号现在都按照角度参数逆时针旋转。以前的版本是顺时针旋转矢量符号。

  • 使用矢量符号填充的多边形不会在瓷砖边界处干净地连接。对于图案填充类型符号,请使用图案填充符号而不是对角矢量符号。

  • 渲染器之间的一些不一致已经消除。依赖于精确符号放置的人应该检查这些,因为符号的大小和宽度,或者线上符号之间的间距可能有一些细微的变化。

  • 在点图层上没有关联符号的样式块将不会产生输出,这与以前版本中的单个像素不同。使用椭圆符号代替。

Mapfile 更改-线条样式

现在必须在图层定义的类样式中指定所有线条样式。

以下参数/关键字已从符号移动到样式:

图案位置间隙线条帽线条连接线条接合最大尺寸

符号样式参数/关键字在版本5中重命名为模式。

符号类型cartoline已删除。

agg或cairo不支持linecap三角形,因此不再可用。三角线的末端效果可以通过使用geomtransform开始和结束(填充)矢量三角形符号和角度自动来实现。这只适用于线条末端,而不适用于虚线。

CGI变化

现在运行时替换 需要 在进行替换之前要有一个验证模式(这是可选的)。这可以像以前一样通过层元数据标签来完成,或者在层或Web验证块内完成。更多信息请参见票证#3522。

所有与查询映射相关的模式(例如nquerymap、itemquerymap等)都已删除,以便使用“qformat”参数。该参数采用输出格式名或mime/type作为值,并使用它来处理一组查询结果。例如:

…&mode=nquerymap&…将变为…&mode=nquery&qformat=png24&…

OGC Web服务

默认情况下,所有OGC Web服务现在都被禁用。如果要像在MapServer 5.6和更早版本中那样启用它们,请在map::web部分中添加以下元数据:

"ows_enable_request"   "*"

另请参见:https://mapserver.org/development/rfc/ms-rfc-67.html

映射文件更改-WCS元数据

为了避免混淆,在OGC WCS服务中只评估“wcs_u*”和“ows_*”前缀元数据条目。以前的版本使用“wms_u*”前缀项作为回退,在版本6.0中删除该回退项,以便强制执行显式决策。

mapfile更改-ogc请求-转储参数已删除

转储层参数已被删除。要启用WMS GetFeatureInfo请求-gml(info_format=application/vnd.ogc.gml)中几何图形的输出,请使用层元数据::

METADATA
  gml_geometries "geom"
  gml_geom_type "polygon"
  ...
END

映射文件更改-能够转义单引号/双引号

我们现在可以在字符串和逻辑表达式中转义单引号和双引号。实例:

NAME "RO\"AD" # double quote inside a a double quote delimited string
NAME 'RO\'AD' # single quote inside a a single quote delimited string
FILTER ('[CTY_NAME]' = 'Ita\'sca') # logical expression that contains a single quote

注意:转义符(反斜杠)仅在以下字符为“、”或时才起作用。

对于Windows用户:如果有以结尾的单引号/双引号分隔的路径字符串,则必须转义最后一个反斜杠。

SHAPEPATH "C:\ms4w\shapefiles\"
# should be modified to...
SHAPEPATH "C:\ms4w\shapefiles\\"

php mapscript更改

  • 需要php 5.2.0或更高版本。

  • php/mapscript现在对错误报告使用异常。所有错误都是可捕获的。

  • 可以像其他所有PHP对象一样设置对象属性。即myobj->myproperty=10;

    注意:set/setproperty方法仍然可用。

  • 所有对象构造函数在失败时引发异常

  • 可以使用php“new”操作符创建对象。即$myshape=ms_new shapeobj(ms_shape_line);//或$myshape=new shapeobj(ms_shape_line);

    注:“ms_new symbolobj()”和“new symbolobj”不同:
    • ms_newsymboobj()返回新/现有符号的ID。

    • new symbolobj()返回symbolobj。你不需要

      使用getSymbolObjectByID()获取它。

  • 可克隆对象应使用php clone关键字进行克隆。没有更多的克隆方法。

  • 已删除的类属性

    • MAPOBJ:图像类型、图像质量、隔行扫描、比例、透明

    • Classobj:最大比例,最小比例

    • 层对象:LabelSizeItem、LabelAgleItem、LabelMaxScale、LabelMinScale,

      最大刻度、最小刻度、符号刻度、透明度

    • legendobj:交错,透明

    • scalebarobj:交错,透明

    • 符号obj:间隙,样式长度

    • webobj:最小,最大

  • 已移除的类方法

    • ProjectionObj:免费

    • 自由行

    • 免费赠送

    • 自由的:自由的

    • shapeobj:自由,联合地球

    • 符号obj:free,getStyleArray

    • 图像对象:免费

    • outputformatobj:获取格式选项,设置格式选项

    • shapefileobj:免费

    • 图层对象:GetFilter、GetShape

  • referencemapobj有新的属性:marker、markername、markersize、maxboxsize、minboxsize

  • 销毁时自动关闭/写入shapeFileObj。(在脚本末尾或带有显式unset())

  • layerObj->clearProcessing()方法现在返回void。

  • mapobj->querybyindex():addtoquery参数的默认行为不正常,现在是。

  • 现在返回ms_success/ms_failure的方法:

    • 符号obj:设置点,设置模式

    • scalebarobj:设置图像颜色

    • outputformatobj:验证

    • layerObj:设置处理,添加功能,绘制

    • MAPOBJ:movelayerup、movelayerdown、zoomrectangle、zoomscale、setprojection,

      setwktprojection、setlayersdrawingorder

  • 现在失败时返回空值的方法:

    • CopyObj:克隆

    • TyelObj:克隆

    • 层obj:nextshape,getextent

    • mapobj:克隆、绘制、drawquery getlayerbyname、getprojection,

  • 现在返回空数组的方法

    • 符号obj:GetPatternArray

    • layerObj:获取项、获取处理、获取网格相交坐标

    • mapobj:getlayersindexbygroup、getallgroupname、getlayersdrawingorder、getalllayersname

MapScript(所有口味)

为了解决5.4/5.6版本中引入的一些问题,再次对层查询结果处理进行了重新处理。结果getshape和getfeature方法已不复存在。现在应该使用重构的getshape方法访问层形状。该方法获取resultObj并返回shapeObj。典型的用法是(在Perl中):

$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();

resultObj封装用于管理结果集的数据。

要独立于查询访问形状,请使用新的resultObj类:

$layer->open();$shape=$layer->getshape(new mapscript::resultobj(1));$layer->close();

有关详细信息,请参阅https://mapserver.org/development/rfc/ms-rfc-65.html。

OUTPUTFORMAT

从mapfile中读取时的outputformat参数验证现在将在以前被静默修复的某些问题上触发错误。例如,使用带有jpeg格式的rgba imagemode会触发错误,而不是自动切换到imagemode rgb。

默认输出格式名称、驱动程序和mimetype已被显著重新组织:

  • png:agg/png(图像/png)

  • jpeg:agg/jpeg(图像/jpeg)

  • gif:gd/gif(图像/gif)

  • png8:agg/png8(与agg/png相同,但应用256色量化)(image/png;mode=8bit)

  • PNG24:agg/png(向后兼容)(image/png;mode=24位)

  • pdf:cairo/pdf(应用程序/x-pdf)

  • svg:cairo/svg(image/svg+xml)

  • gtiff:gdal/gtiff(图像/tiff)

  • kml:kml(application/vnd.google earth.kml++xml)

  • kmz:kmz(application/vnd.google earth.kmz)

栅格

  • 对渲染没有gdal的栅格的支持已被移除。现在,栅格层(或WMS层)需要根据gdal库构建mapserver。

  • 上述更改还意味着不再支持EPPL栅格层。

不推荐使用的功能

  • 对flash/swf输出的支持作为渲染大修的一部分被删除,因为它不再与新的体系结构兼容。对flash/swf的支持可以重新引入,但需要大量的工作(即需要资金)。

  • 自从不再维护“connectiontype mygis”以来,对它的支持就被放弃了,现在有更好的方法来使用mysql数据源,比如通过ogr。

MapServer 5.4到5.6迁移

本节记录从5.4.x版(或更早版本)迁移到5.6版(即向后不兼容)时必须对MapServer应用程序进行的更改,以及一些新功能的信息。

WFS 1.1轴方向

WFS规范先前版本中的轴顺序是始终使用东距(x或lon)和北距(y或lat)。WFS 1.1规定,根据特定的SRS,X轴可能朝西或不朝东,Y轴可能朝南或不朝北。WFS描绘操作应考虑轴顺序。这会影响一些常用的EPSG代码,如ESPG:4326。当前的实现确保返回到服务器的GetFeature请求的坐标反映了EPSG代码在4000到5000之间的逆轴顺序。

更改imagemap outputformat的mime类型

RFC 36增加了对模板输出格式的支持,但是这个新功能对于WMS GetFeatureInfo输出不可用(请参见票据3024)。在MapServer5.6中,这是通过按mime类型实现查询模板的输出格式查找来解决的。但是,这导致了实际的文本/HTML查询模板与预配置的imagemap outputformat(也使用了文本/HTML mime类型)之间的文本/HTML mime类型冲突。

为了解决此冲突,ImageMap输出格式的mime类型已更改为“text/html;driver=imagemap”。这不太可能对现有的应用程序造成很多副作用,但是为了以防万一,这里会记录这些更改。

MapServer 5.2到5.4迁移

本节记录从5.2版迁移时必须对MapServer应用程序进行的更改。(或早期版本)到5.4(即向后不兼容),以及一些新功能的信息。

Mapfile 、符号集和模板的新要求

由于在以前版本的MapServer中发现了一些潜在的安全漏洞,RFC-56引入了一些更改,以加强对MapFile和模板的访问控制,并限制泄漏任意文件内容的风险。这些更改是在5.4.0版中引入的,也被重新移植到v5.2.2和4.10.4版。

新要求如下:

  • map和symbolset关键字必须添加到任何尚未包含它们的mapfile和symbolset中。

  • 必须更新所有MapServer模板,以便在第一行包含“MapServer模板”魔力字符串。根据模板表单集的不同,可以将此字符串嵌入注释中,并在输出生成过程中跳过整行。例如

    • 在HTML中:<!--MapServer模板-->

    • 在javascript://mapserver模板中

另请参见:https://mapserver.org/development/rfc/ms-rfc-56.html

MapServer 4.10到5.0迁移

本节记录从4.10.x版(或更早版本)迁移到5.x版(即向后不兼容)时必须对MapServer应用程序进行的更改,以及一些新功能的信息。

Mapfile 更改

属性绑定:为了阻止关键字过载和添加功能,MapServer 5.0支持将特性属性绑定到样式和标签属性的新方法。在过去使用的关键字中,如angleitem或labelsizeitem,现在您在要绑定的属性的上下文中表示属性。例如,要将属性绑定到标签大小,可以执行以下操作:

LABEL
  ...
  SIZE [mySizeItem]
END

[]表示绑定(与逻辑表达式相同)。不再支持以下关键字,它们的存在将引发错误:

  • 层:labelangleitem,labelsizeitem

  • 样式:angleitem、sizeitem

以下属性可以接受绑定:

  • 样式:角度、颜色、大纲颜色、大小、符号

  • 标签:角度、颜色、大纲颜色、大小、字体、优先级

颜色可以是十六进制值(例如ffffff)或RGB三元组(例如255 255 255)。

图层透明度:透明度参数的值总是向后的,以解决该参数已被重命名为不透明度的问题。mapfile解析器仍然可以识别透明度,但不推荐使用,应避免使用。

比例参数:MapServer对比例的处理一直是造成混淆的原因。层minscale中使用的值实际上是代表性分数(例如1:24000)的分母。为了澄清这一点,所有的比例参数现在都以denom结束。所以minscale=>minscaledenom,symbolscale=>symbolscaledenom,等等。mapfile解析器仍然可以识别较旧的关键字,但是它们被弃用了,应该避免使用。

符号文件更改

符号样式:在符号定义中使用样式来存储用于线符号化的短划线图案。但是,可能会与类定义中使用的样式对象混淆。为了解决这种混淆,符号样式参数已重命名为pattern。符号文件分析器仍将识别样式关键字,但不推荐使用,应避免使用。

样式/符号变化

在mapsserver 5.0之前,如果在线条层上的样式中使用了PixMap符号,则该符号将用作绘制线条的画笔。在MapServer 5.0中,可以沿直线绘制PixMap符号(请注意,这是使用真正类型的符号提供的)。要实现这一点,用户需要在符号文件中使用参数gap及其pixmap符号定义。间隙表示符号之间的距离。如果没有给出间隙,将使用pixmap符号作为画笔。

agg呈现更改

看见 the AGG rendering specifics 关于增加 Antigrain Geometry 渲染引擎。

URL配置更改

以前版本的mapserver cgi程序允许通过使用诸如map_layer_0_class_0_color=255+0+0等繁琐语法的URL更改某些参数,这会更改一个classobj中的颜色。这不仅对用户来说很麻烦,而且从代码维护的角度来看也很麻烦,因为我们必须为基于URL的配置和基于文件的配置维护单独的加载程序。RFC-31试图通过迁移到一个可以与字符串(在mapscript中或通过url)或文件一起使用的单个对象加载函数来简化这两个过程。

因此,在过去,您必须一次更改参数。现在,您可以将大量的映射文件(有安全限制)传递到CGI接口。映射对象表示法仍然是确定要修改哪个对象所必需的,但是您可以一次更改多个属性。请注意,您可以使用“u”或“.”来分隔标识符。

示例1,更改scaleBar对象:

...&map.scalebar=UNITS+MILES+COLOR+121+121+121+SIZE+300+2&...

示例2,更改演示文稿样式:

...&map.layer[lakes].class[0].style[0]=SYMBOL+crosshatch+COLOR+151+51+151+SIZE+15&...

示例3,创建新功能

...&map_layer[3]=FEATURE+POINTS+500000+1000000+END+TEXT+'A+test+point'+END&...

变量唯一地标识一个对象(对于layerobj和classobj,按名称或索引)。该值是映射文件的一个片段。此时不能创建内联功能以外的新对象。

mapserv属性查询的验证模式

通过mapserv cgi完成的属性查询(qstring)理论上可以用于SQL注入。

尚未报告任何漏洞攻击,但为了降低风险,在5.0中添加了新的验证模式机制。

对于qstring属性查询,qstring查询工作需要qstring_validation_模式层级元数据。元数据值是qstring值必须匹配的正则表达式,否则mapserv会产生致命错误。如果使用qstring,但未提供qstring_验证模式,也会产生致命错误。

请注意,自4.10版以来,类似的验证模式机制可用于%variable%替换,但在这种情况下,它是可选的。%myvar%的模式是通过名为myvar_validation_pattern的元数据提供的。

SWIG MAPcript(Python、Perl、CpHARP、Java)的变化

图层透明度:图层obj transparency参数现在称为opacity。必须更新在代码中设置该值的脚本。

符号样式:符号对象样式参数现在称为pattern。mapscript不允许直接修改该参数。在基于swig的语言中,symbolobj方法setStyle现在称为setPattern。在php/mapscript中,setStyle和getStyle方法现在称为setPattern和getPattern。

已经添加了一个新的msgetVersionInt()函数,该函数以整数格式返回当前的MapServer版本,以便于将来进行版本检查。给定版本x.y.z,它返回(x*0x1000+y*0x100+z)。例如,对于v5.0.0,它将返回0x05000(注意十六进制表示法)。

php/mapscript更改

图层透明度:图层obj transparency参数现在称为opacity。旧的“透明度”名称已被弃用,将在将来的版本中删除。必须更新获取/设置代码中该值的脚本。

所有出现的刻度、最小刻度、最大刻度等…参数已被弃用并重命名为“denom”后缀(例如minscale变为minscale denom等)。不推荐使用的参数将在将来的版本中删除。必须更新获取/设置它们的脚本。

符号对象样式已重命名为模式。旧的“styleLength”参数和setStyle()和getStyleArray()方法已被弃用,应改为使用“patternLength”、setPattern()和getPatternArray()。它们将在将来的版本中被删除。

已弃用layer.getshape(int tileindex,int shapeindex)),并将其重命名为layer.getfeature(int shapeindex[,int tileindex=-1]),以匹配swig mapscript等效项。注意,参数的顺序是颠倒的,因为在getFeature()中tileIndex是可选的。

已弃用class.getExpression()和layer.getFilter(),并将其重命名为class.getExpressionString()和layer.getFilterString(),以匹配swig mapscript中的内容。函数名中的字符串后缀也更清楚地表明返回值不是一个对象,而是它的字符串表示形式。

已经添加了一个新的ms_GetVersionInt()函数,以整数格式返回当前的MapServer版本,以便于将来的版本检查。给定版本x.y.z,它返回(x*0x1000+y*0x100+z)。例如,对于v5.0.0,它将返回0x05000(注意十六进制表示法)。

OGC Web地图服务(WMS)

getmap和getfeatureinfo的必需参数:以前,mapserver在响应ogc时没有检查以下参数:wms getmap或getfeatureinfo请求:

  • SRS

  • FORMAT

  • WIDTH

  • HEIGHT

  • 样式或SLD/SLD U主体

  • BBOX

也就是说,如果WMS客户机没有传递getmap请求,那么它将毫无错误地进行处理。

兼容的ogc:wms 1.1.0和1.1.1需要这些参数。这可能会影响没有传递这些值的ogc:wms客户机请求。1088号机票完全记录了这一问题。除了WMS合规性之外,还决定通过添加此约束,如果OGC客户机请求(如前所述)破坏了某些内容,人们应该无论如何修复其客户机,因为如果他们更改WMS供应商,他们也会遇到问题。

OGC Web功能服务(WFS)

OGC传感器观测服务(SOS)

  • map/layer/metadata/sos_describesensor_url的格式已更改,因此用户现在必须按照以下格式设置值:

“sos-describesensor-url”“http://example.org/sml/%procedure%.xml

这一变更是为了澄清和统一SoS服务器上下文中描述传感器请求的过程含义。

  • 与observedProperty元素的swe:component值相关联的元数据已更改为支持URN方案,而不是以前的“sos-componenturl”元数据。不再支持“sos_componenturl”元数据。相反,应使用“sos-observedproperty-authority”和“sos-observedproperty-version”来格式化swe:组件值。

建立变化

mapserver的主include文件已从“map.h”重命名为“mapserver.h”。

已使用以下选项创建了新的MapServer配置脚本:

Usage: mapserver-config [OPTIONS]
Options:
 [--libs]
 [--dep-libs]
 [--cflags]
 [--defines]
 [--includes]
 [--version]

mapssever的共享链接库和静态链接库已分别重命名为libmapserver.x.y.so和libmapserver.a。

启用覆盖率配置选项已重命名为启用gcov,因为以前的名称让用户认为它可能与启用对WCS或ARC/INFO覆盖率的支持有关:

--enable-gcov           Enable source code coverage testing using gcov

功能标题取消预测

在未来的版本中,可能会删除MapServer中的一些功能。功能可能会被弃用,因为:

  • 它们已被一个更高级或更强大的解决方案所取代。

  • 他们已经停止维修了

这些特性的用户应该为即将发生的更改做好准备,并开始相应地调整他们的映射文件。如果您强烈反对删除其中一个或多个功能,请在通常的MapServer通信通道中打开讨论。

卡通符号:这些是用来克服GD弱点的黑客,它们的功能现在得到了agg渲染器的支持。在当前的MapServer版本中,它们受到了很差的支持。允许设置线条连接和大写样式的关键字将移动到样式块。

带有GD的RGB/RGBA输出:对RGB和RGBA图像类型的支持可能不再保持。GD将继续支持PC256,而RGB和RGBA可能只支持AGG