PROJECTION

背景

有数以千计的地理参考系统。为了将数据集与不同地理参考系统结合到地图中,必须将数据集转换(投影)到地图中选定的地理参考系统。如果您想了解更多关于地理参考系统和地图投影的一般信息,请参阅下面的“更多信息”链接,或查看地理信息学课程(地理信息系统、地图学、大地测量学),因为投影是初学者的高级主题。

使用MapServer的投影

要设置投影,必须为输出图像定义一个投影对象(在 MAP 对象)和每个层的一个投影对象(在 LAYER 要投影的对象。MAPServer依赖于 PROJ 投影库。因此,投影对象由一系列PROJ关键字组成,这些关键字可以在对象中直接指定,也可以在 EPSG 文件。EPSG文件是包含投影参数的查找文件,是PROJ库的一部分。

以下两个示例都定义了相同的投影(UTM区域15,NAD83),但使用了两种不同的方法:

示例1:内联投影参数

PROJECTION
  "proj=utm"
  "ellps=GRS80"
  "datum=NAD83"
  "zone=15"
  "units=m"
  "north"
  "no_defs"
END

注解

对于所有可能的PROJ投影参数的列表,官方PROJ站点是最好的(https://PROJ.org),但是旧的wiki有一个完整的列表 PROJ parameters .

示例2:EPSG投影使用

PROJECTION
   "init=epsg:26915"
END

注解

这是指包含具有完整投影参数的“26915”代码的EPSG查找文件。”在这个例子中,epsg“是区分大小写的,因为它指的是一个文件名。如果您的文件系统是区分大小写的,则必须是小写,否则MapServer(PROJ)将抱怨找不到该文件。

注解

有关此坐标系的详细信息,请参见https://epsg.io/26915。

接下来的两个示例都显示了如何定义未投影的lat/long(“地理”):

示例3:内联投影参数

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

示例4:EPSG投影使用

PROJECTION
   "init=epsg:4326"
END

“网络墨卡托”或“谷歌墨卡托”

The EPSG code for the commonly used "Web" or "Google" mercator projection is '3857'. See https://epsg.io/3857 for more information on this coordinate system. This code was also unofficially referred to as EPSG:900913; you are recommended to use the official EPSG:3857 code instead, such as:

PROJECTION
   "init=epsg:3857"
END

投影自动

以下语法可用于OGR连接、shapefile层或栅格层中:

PROJECTION
   AUTO
END
  • 如果是OGR连接,投影将从OGR层中检索。

  • 对于shapefile层,投影将从关联的.prj文件中检索。

  • 如果栅格层引用单个栅格(数据关键字),则将从GDAL数据源检索投影。

  • 如果栅格层引用平铺索引(OGR层或shapefile tile index),则将根据上述描述规则检索投影。

  • 如果栅格层是指在各种投影中带有栅格的平铺索引,则 TILESRS 应指定关键字为相应的栅格选择适当的投影。见 Tileindexes with tiles in different projections 了解更多详细信息。

注解

对于其他层类型,此语法无效。

指定要使用的EPSG文件

:ref:`map``config`可用于指定epsg文件的位置:

MAP
  CONFIG "PROJ_LIB" "/usr/share/proj/"
  PROJECTION
    "init=epsg:3857"
  END # PROJECTION
  ...

CONFIG "PROJ_LIB" line comes before the PROJECTION 块。

重要音符

  • 如果 Mapfile 中的所有数据都在同一投影中,则不必指定任何投影对象。MapServer将假定所有数据都在同一投影中。

  • MAP-级别的投影对象视为输出投影。“map”级别的“extent”和“units”值必须在输出投影单位中。此外,如果在其他投影中有层(而不是“map”级别的投影),则必须为这些层定义“projection”对象,以告诉mapserver它们在哪个投影中。

  • MAP- 水平投影,然后只有一个 LAYER 投影对象,mapserver将假定所有其他层都在指定的 MAP- 水平投影。

  • 总是以小写形式引用epsg文件,因为它是小写文件名,并且在Linux/Unix系统上,此参数区分大小写。

更多信息

  • 如果出现投影错误,请参阅 错误 检查是否讨论了您的准确错误。

  • 搜索MapServer用户 email list archives 很有可能有人以前就面临过你的确切问题。

  • PROJ 完整描述支持投影和坐标系的用户指南。

  • 阅读更多关于 Web Mercator projection .

  • 一位受人尊敬的地图投影作者是约翰·P·斯奈德,如果你想看印刷材料的话。

  • 要查找特定的EPSG投影代码,旧网站https://spatialreference.org/未维护,因此建议改为https://EPSG.io/。