php mapscript迁移指南

作者

艾伦布德罗

联系

地图齿轮网的Aboudreault

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

上次更新时间

2019-05-25

介绍

本文档描述了从一个mapserver版本迁移到另一个mapserver版本(即向后不兼容)时必须对php mapscript应用程序进行的更改,以及有关某些新功能的信息。

迁移到7.4的新SWIG API和PHP 7

从MapServer 7.4.0版本开始,建议用户切换到MapServer的新版本 SWIG 对PHP 7+的API支持(推荐理由:正如我们所看到的,从长远来看,MapServer维护人员通过SWIG管理PHP会更容易)。一些重要的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");
    

迁移5.6到6.0

需要PHP版本

需要php 5.2.0或更高版本。已放弃对早期版本的支持。

错误报告

php mapscript现在对错误报告使用异常。所有错误都是可捕获的。没有通过标准的不可缓存PHP系统报告更多致命错误(仅警告)。

操作对象

  • 可以像其他所有PHP对象一样设置对象属性。

$map->scaledenom = 25000;

备注

set/setproperty方法仍然可用。

  • 可以使用php“new”操作符创建对象。

$myShape = ms_newShapeObj(MS_SHAPE_LINE); // or
$myShape = new shapeObj(MS_SHAPE_LINE);

备注

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

备注

*ms_new symbolobj()*和*new symbolobj()*是不同的

  • ms_newsymboobj()返回新/现有符号的ID。

  • new symbolobj()返回symbolobj。您不需要使用getSymbolObjectByID()获取它。

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

类属性

已删除的类属性:

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

  • layerObj:LabelSizeItem、LabelAgleItem、LabelMaxScale、LabelMinScale、MaxScale、MinScale、SymbolsCale、透明度

  • legendobj:交错,透明

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

  • scalebarobj:交错,透明

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

  • webobj:最小,最大

类方法

已移除的类方法:

  • 图像对象:免费

  • 图层对象:GetFilter、GetShape

  • 自由行

  • 免费赠送

  • ProjectionObj:免费

  • 自由的:自由的

  • shapeobj:联合地理

  • 符号obj:GetStyleArray

  • CopyObj:克隆

  • TyelObj:克隆

  • MaMbOb:克隆

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

层对象

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

MAPbOBJ

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

参考对象AppObjt

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

SuffeFielObjo

shapefileobj在销毁时自动关闭/写入。(在脚本末尾或使用显式free(),unset())

LabelCaseObjo

要释放缓存,必须调用free cache()方法,而不是free()。

现在返回ms-success/ms-failure的方法

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

  • MAPOBJ:movelayerup、movelayerdown、zoomrectangle、zoomscale、setprojection、setwktprojection、setlayersdrawingorder

  • outputformatobj:验证

  • scalebarobj:设置图像颜色

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

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

  • CopyObj:克隆

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

  • 层obj:nextshape,getextent

  • TyelObj:克隆

现在返回空数组的方法

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

  • mapobj:getlayersindexbygroup、getallgroupname、getlayersdrawingorder、getalllayersname

  • 符号obj:GetPatternArray