例1.6

定义投影和范围

https://demo.mapserver.org/cgi-bin/mapserv?map=/mapserver/apps/tutorial/htdocs/example1-6.map&layer=states&layer=states_label&layer=modis&mode=map

哇!这里发生了什么?

你刚刚经历了飞行中的责备。在映射文件中定义投影对象时,MapServer会将图层和投影信息传递给PROJ库(以前 PROJ.4) which does the reprojection. For more information about the PROJ library, please visit https://proj.org/ .

这个例子试图为MapServer中的投影支持提供一些帮助。

这就是映射文件的外观: Example1-6.map

在我们的mapfile中,您可能注意到的第一件事是原始范围已被注释掉,新的范围值看起来与纬度和经度值不同。另外,我们在顶部附近和每个层中添加了一个投影对象。

让我们看看新的对象和参数:

EXTENT  201621.496941 -294488.285333 1425518.020722 498254.511514

我们提供给MapServer的范围需要与输出投影使用相同的单位。由于Lambert方位角相等面积的单位是米,我们必须给出新的范围以米为单位。我们可以使用QGIS或其他GIS包计算新的数据块,也可以使用PROJ的cs2cs实用程序。下面的命令可用于重新投影原始盘区值:

cs2cs +proj=latlong +datum=WGS84 +to +proj=laea +ellps=clrk66 +lat_0=45 +lon_0=-100

键入命令后,输入西南坐标对(左下角坐标),用空格分隔:

-97.5 41.619778

“cs2cs”实用程序给出的值:

208398.01       -372335.44 0.000

然后输入东北坐标对(右上角坐标),再次用空格分隔:

-82.122902 49.38562

并返回以下值:

1285308.08      632638.93 0.000

您会注意到“cs2cs”返回一组三个值。您可以忽略第三个值0.000,因为它表示高度(我们不使用)。不管怎样,我们现在可以将范围表示为:

EXTENT 208398.01 -372335.44 1285308.08 632638.93

但你说,这与上述范围不符。好吧,这就是你回绝的时候通常会发生的事情——地图不一定像你想象的那样居中。你可以绕着它转,向左走几千米,向右再加几米。或者,您可以使用图形化的地理信息系统包来提供范围。 Here are the instructions 为了得到 EXTENT 使用QGIS。

MapServer可以通过两种方式获取投影定义。第一个显示在映射文件的输出投影对象(第一个投影块)中。这是向PROJ库传递参数的传统方式。另一种方法是使用EPSG代码。这些代码是欧洲石油勘探集团(EPSG)定义的标准投影代码(或空间参考标识符)。在Lambert方位等面积投影的情况下,它的代码是“2163”。如果您在投影后注释掉这四行并取消注释行“init=epsg:2163”,这将向PROJ提供相同的信息。如果您想了解更多关于EPSG代码的信息,请查看“/usr/local/share/proj/EPSG”或“C:/proj/nad/EPSG”(“ms4w”中的“/ms4w/proj/nad”)。

备注

您可以搜索EPSG代码并查看以下地址的地图服务器用法示例 https://epsg.io/

此外,请访问EPSG网站: https://epsg.org

如果您需要了解有关投影的更多信息,请查看以下链接:

你可以通过搜索网页上的“地图投影”找到更多信息。


Back to Example 1.5 | Proceed to Example 1.7