错误

不支持绘制 EPP(): EPPL7

不使用 EPPL7 数据时,就会显示错误。

对于没有尝试查看 EPPL7 图层 (EPPL7 是一种栅格数据格式) 的用户,这是一个可能令人摸不着头脑的错误。完整的错误可能会显示如下:

msDrawRaster(): Unrecognized or unsupported image format ...

drawEPP(): EPPL7 support is not available.

解释

当 MapServer 尝试绘制一个图层,程序会企图使用所有它所知道的驱动程序。EPPL7 驱动是最后一个被尝试的驱动,这意味着如果一个图层由于任何原因无法被绘制, 您将会看到这条错误信息。

还有其他的情况会出现这条错误信息,例如:

  • 服务器正在返回一个服务异常 (这时MapServer还没有探测以及解析获得一个有意义的错误信息) 或者返回一个无法读取的图像 ... 例如一个GIF 图像,而 MapServer 并不支持 GIF 图像。

  • WMS 服务器经常为多种图像格式做广告,但它本身在地图获取请求中并不遵守它们

loadLayer(): 未知标识符。类的数量已到达最大极限

当试图绘制包含大量类别的图层时错误出现。

此错误说明MapServer已达到层的最大类数限制。这个最大值可以在MapServer源中修改,然后可以重新编译。 map.h 包含默认值,下面是MapServer 4.10和4.8的默认值:

#define MS_MAXCLASSES 250
#define MS_MAXSTYLES 5
#define MS_MAXLAYERS 200

注解

这个限制在 MapServer 5.0 已经被更正且应该不再是一个问题。

loadMapInternal(): 所提供地图范围无效

在读取一个 Mapfile 或者一个图层时,MapServer 显示无效地图范围。

从MapServer 4.6开始,MapServer对层和映射范围的要求更严格。如果minx大于maxx,或者miny大于maxy,将生成此错误。请检查地图的范围、图层范围或WMS扩展设置,以确保情况并非如此。地图服务器 always 以以下形式接受范围:

EXTENT minx miny maxx maxy

如何获得一个文件的范围值?

获取矢量文件范围的最简单方法是使用“ogrinfo”实用程序,它是GDAL/OGR库的一部分(对于栅格文件,您将使用“gdalinfo”实用程序)。Windows用户可以下载“fwtools”包,其中包括所有gdal和ogr命令行实用程序。` ms4w`u还包括实用程序(在*ms4w/tools/gdal ogr utils/*中)。Linux用户可能已经有了gdal库,如果没有,您也可以使用'fwtools'包。

例如,这里是一个shapefile 执行 oginfo 命令的结果 (注意“范围”边界):

$ ogrinfo province.shp province -summary
  INFO: Open of `province.shp'
  using driver `ESRI Shapefile' successful.

  Layer name: province
  Geometry: Polygon
  Feature Count: 1071
  Extent: (-2340603.750000, -719746.062500) - (3009430.500000, 3836605.250000)
  Layer SRS WKT:
  (unknown)
  AREA: Real (16.0)
  PERIMETER: Real (16.0)
  PROVINCE_: Real (16.0)
  PROVINCE_I: Real (16.0)
  STATUS: String (64.0)
  NAME: String (64.0)
  NAME_E: String (64.0)
  NAME_F: String (64.0)
  REG_CODE: Real (16.0)
  POLY_FEATU: Real (16.0)
  ISLAND: String (64.0)
  ISLAND_E: String (64.0)
  ISLAND_F: String (64.0)
  YYY: Real (16.0)
  SIZE: Real (16.0)
  ANGLE: Real (16.0)

Ogrinfo 使用 (minx, miny),(maxx, maxy) 格式对文件范围赋值,因此一个 Mapfile 的范围值会是:

EXTENT -2340603.750000 -719746.062500 3009430.500000 3836605.250000

注解

Mapfile 中的范围必须与 MAPPROJECTION 的范围保持一致.

msGetLabelSize(): 未找到所请求字体

在尝试显示某种特殊字体时出现此类错误。

这条信息告诉您 MapServer 无法找到指定的字体。

Make sure that the font is properly referenced in the FONTSET lookup file.

参见

FONTSET

msLoadFontset(): 打开字体设置时出现错误

在尝试显示一个标签时出现错误。

此消息告诉您,MapServer在指定:ref:mapfile`里找不到 :ref:`FONTSET .

The FONTSET path is relative to the mapfile location.

参见

FONTSET

msLoadMap(): 无法打开 Mapfile

在尝试显示地图图像时出现此类错误。

这条信息告诉你 MapServer 无法 Mapfile 或者 Mapfile 存在问题。请确认你是否指定了正确的文件路径。Linux/Unix 用户应确定网络用户也具有访问 Mapfile 路径的权限。请确认 Mapfile 使用 shp2img 以确定语法正确。

错误信息指示 MapServer 所认为的 Mapfile 路径为:

[MapServer Error]: msLoadMap(): (D:/ms4w/apps/blah/blah.map)
Failed to open map file D:/ms4w/apps/blah/blah.map

msProcessProjection(): 在 'init' 文件中没有找到选项

在尝试显示指定地图投影时出现此类错误。

这条信息提示你所尝试使用的投影在 epsg 文件中没有被定义。请在记事本编辑器中打开你的 epsg 文件并搜索你的投影以确定它的存在。

在Windows上,epsg文件的默认位置是 C:PROJNAD. ms4w用户将在*\ms4w\proj\nad*。

参见

PROJECTION 和https://epsg.io/(https://spatialreference.org不是

维护时间更长,但可能仍然有用)

msProcessProjection(): 不存在该文件或目录

在尝试访问一个 epsg 文件时出现此类错误。

这条信息告诉您 MapServer 无法找到指定的 epsg 文件。

在Windows上,epsg文件的默认位置是 C:PROJNAD. ms4w用户将在*\ms4w\proj\nad*。

Linux/Unix用户应该小心 specify the correct case 在引用epsg文件时,因为文件名在Linux/Unix上区分大小写。”init=epsg:4326“是指epsg文件名,因此”init=epsg:4326“将不起作用,因为它需要查找 的*EPSG* 文件名为大写。

设置 epsg 文件位置

如果您需要设置 epsg 文件位置,有几个选项可供选择:

  1. 使用一个名为“PROJ_LIB”的系统变量 (在 windows 中为“环境变量”)并使其指向您的 epsg 路径。

  2. 使用 Mapfile 参数 CONFIG 以固定 epsg 文件位置。该变量在 MAP 层次中被定义

    参见

    Mapfile

    MAP
        ...
        CONFIG "PROJ_LIB" "C:/somedir/proj/nad/"
        ...
    END
    
  3. 通过Web服务器设置环境变量。Apache有一个setenv指令,可以设置环境变量。在Apache文件中添加如下内容 httpd.conf

    SetEnv PROJ_LIB C:/somedir/proj/nad/
    

msProcessProjection(): 投影库错误。主坐标或半径 是否为零未定义

在尝试指定投影参数时出现此类错误。

自 MapServer 4.0 开始,你需要为地图投影制定地球椭球。遗漏该椭球参数在此后的 MapServer 版本中会导致错误。

有效例子

4.0 及更新版本:

PROJECTION
  "proj=latlong"
  "ellps=WGS84"
END

早于 MapServer 4.0:

PROJECTION
  "proj=latlong"
END

参见

PROJECTION 和https://epsg.io/(https://spatialreference.org不是

维护时间更长,但可能仍然有用)

msQueryByPoint: 没有结果从搜索返回

为什么我在检索一个已知存在的要素时得到消息 "msQueryByPoint(): 没有结果从搜索返回。没有找到符合条件的记录"

要素检索在您的图层定义的类中要求一个范本实体。这个值使用 MapServer 的范本语法指向一个 html 碎片。

Mapfile 碎片示例:

LAYER
  NAME "Parcel9"
  TYPE POLYGON
  STATUS OFF
  DATA "Parcels/area09_parcels"
  CLASS
    STYLE
      OUTLINECOLOR 128 128 128
      COLOR 153 205 255
    END
    TEMPLATE "templates/Parcels/area09_parcels.html"
  END

  HEADER "templates/Parcels/area09_parcels_header.html"
  FOOTER "templates/Parcels/area09_parcels_footer.html"

END

范本示例:

<tr>
  <td>[lrn]</td>
  <td>[PIN]</td>
</tr>

[lrn] 是一个标志着结果线编号从 1 开始的特殊的关键词, [PIN] 是一个要素属性的名称。

msReturnPage(): 网页应用程序错误。畸形范本名

如果尝试访问具有MapServer无法识别的文件扩展名的模板文件,则可能发生此错误。模板的有效文件扩展名为:

.gml
.html
.htm
.js
.kml
.svg
.tmpl
.wml
.xml

尝试使用URL模板进行查询时也可能发生此错误。问题是URL模板只允许用于只返回一个结果的查询模式(例如查询或itemquery)

你只能在 模式=检索 或 模式=项目检索 时对一个检索使用URL 范本。如果你尝试在 模式=n检索 或 模式=项目n检索 时使用 URL 范本,你将会得到以下错误:

Content-type: text/html msReturnPage(): Web application error. Malformed template name

msSaveImageGD(): 无法访问文件

在尝试显示地图图像时出现错误。

该错误在 MapServer 无法显示地图图像时出现。您需要检查一下几项:

  • Mapfile 中的 IMAGEPATH 与 IMAGEURL 参数是有效的

  • 在 CGI 模式中,初始页面中的任何 IMAGEPATH 与 IMAGEURL 变量设置是有效的

  • Linux/Unix 用户需要确认网络用户具有写入 IMAGEPATH 的权限

msWMSLoadGetMapParams(): WMS 服务器错误。图像大小超出范围。宽度与高度必须在 1 到 2048 像素之间

错误在用户 (通过WMS) 请求一个超出服务允许的最大高度或宽度的地图图像时被返回/显示。

要增加服务的最大地图宽度和高度,请使用 MAP 对象。生成更大的地图图像需要更多的处理能力和内存,所以要小心。

无法加载dll(mapscript)

一个或更多 mapscript.dll 依赖的动态链接库无法加载

您可以会在 Windows 中获得这个问题。在很多情况下,这源于一个丢失或无法加载的共享库。错误信息提到 mapscript.dll,但可以确定一个或多 libmap.dll 依赖的动态链接库丢失。所以首先您可能需要检查您的应用路径中 libmap.dll 的依赖对象。您可以使用 Visual Studio Dependency Walker 来完成这个任务。您也可以使用一个文件监控工具 (像SysInternal's filemon) 来监测无法加载的动态链接库。我建议在应用程序文件夹中存放所有您的应用程序所需要的动态链接库文件。如果您可以运行mapscript 的示例程序,你的编译应该是正确的,且所有的动态链接库文件可用。

C#-特殊信息

您可能注意到 mapscript C# 接口在桌面和 ASP.NET 应用程序中具有不同表现。尽管您可以正确运行绘制地图示例,在 ASP.NET 应用程序中您可能会遇到动态链接库加载问题。在创建一个 ASP.NET 项目时,您的应用程序文件夹将会默认为 'Inetpubwwwroot[YourApp]bin'。根据您的操作系统,程序主进程为 aspnet_wp.exe 或 w3wp.exe。该应用程序将会在一个不同于交互用户的安全环境 (默认在 ASPNET 用户环境) 下运行。将动态链接库文件存放在您的应用程序目录以外的时候,您应当考虑在交互与 ASPNET 用户环境下路径环境变量的差异和/或您可能没有足够的权限访问您的程序文件夹以外的动态链接库文件。