2.10. 定义投影和范围¶
2.10.1. 查看示例¶
这张地图显然是与前面所示地图不同的区域,看起来不一样。此地图使用另一个地图投影。
在Mapfile的投影定义部分,投影由Proj.4库通过参数进行处理。有关PROJ.4库的更多信息,请访问https://proj4.org/。
以下是 Mapfile 源文件 mfa6.map
在本例中使用:
1MAP
2 IMAGETYPE "PNG24"
3 EXTENT -20042150 -7515806 20104978 7515807
4 SIZE 350 260
5 SHAPEPATH "/gdata"
6 SYMBOLSET "../symbols/symbols35.sym"
7 FONTSET "../fonts/fonts.list"
8 PROJECTION
9 "init=epsg:3857"
10 END
11 LAYER
12 NAME "topo"
13 DATA "land_shallow_topo_8192.tif"
14 STATUS OFF
15 TYPE RASTER
16 PROJECTION
17 "init=epsg:4326"
18 END
19 END
20END
文件的更改如下:
Open the file: diff_mfa6_mfa5.html
将注意到的第一件事是, MapFile是原始的 EXTENT
,被新的范围值取代,它看起来不像经度和纬度。此外,还添加了投影对象 PROJECTION
,并向 LAYER
添加了 PROJECTION
定义。
查看新空间范围的参数:
EXTENT 201621.496941 -294488.285333 1425518.020722 498254.511514
2.10.2. Mapfile的编写方式¶
投影可以在地图对象中定义,也可以在层对象中定义。可以在地图对象中定义投影(只能定义一次,但可以定义多个)此定义的投影是地图的输出投影,MapServer将使用此投影来呈现地图结果。中定义的投影 LAYER
对象是输入投影,即层对象对应的数据的投影。Layer对象中的投影定义可以与地图对象中的投影定义不同,MapServer将进行投影转换并重新投影到输出投影。如果 LAYER
对象中没有投影信息,MapServer将假定输入和输出投影是相同的。
在Mapfile中, PROJECTION
对象不是必需的。但是,如果想要支持OGC互操作性规范(WMS/WFS/WCS),则仍然需要在Mapfile中对其进行明确定义。
此定义仅在地图对象中定义一次,即成为输出投影-MapServer将在此投影中呈现地图。也可以使用投影对象层对象定义输入投影。可以在不同的层上投影MapServer将它们重新投影到输出投影。如果未定义投影层中的对象,则MapServer会假定输入投影与输出投影相同。除非创建支持OGC可互操作Web服务规范(WMS/WFS/WCS)的Mapfile,否则这不是所需的对象。
MapServer的预测有两种定义方式。传统的方法是通过Proj.4参数来定义它,例如下面定义的美国大陆的Lambert方位等面积投影。
这是输出投影定义:
PROJECTION
"proj=laea"
"ellps=clrk66"
"lat_0=45"
"lon_0=-100"
END
另一种方法是使用EPSG代码。这些代码是由欧洲石油调查集团(EPSG)定义的标准投影代码(或空间参考标识符)。由MapServer中的以下EPSG代码定义,EPSG:2163
也表示(Lambert方位角等面积),效果相同:
PROJECTION
"init=epsg:2163"
END
如果想了解更多关于EPSG代码的信息,请查看 /usr/ROJ/PSG
或 C:/PROJ/NAD/EPSG
( /ms4w/proj/nad
MS4W)。此外,请查看EPSG网站http://www.epsg.org.
2.10.3. 用CS2CS计算投影坐标¶
投影坐标可以使用Qgis或其他地理信息系统软件包计算,也可以使用PROJ.4的cs2cs工具计算。以下命令是可用于重新投影的原始范围值:
cs2cs +proj=latlong +datum=WGS84 +to +proj=laea +ellps=clrk66 +lat_0=45 +lon_0=-100
键入命令后,输入西南坐标对(左下坐标),用空格分隔: -97.54 1.619778
方法返回的结果 cs2cs
实用程序为:
208398.01 -372335.44 0.000
接下来,键入同样由空格分隔的东北坐标对(右上角坐标): -82.122902 49.38562
返回下列值:
1285308.08 632638.93 0.000
cs2cs
返回一个三元值。第三个值0.000可以忽略,它用于表示海拔高度(我们不使用它)。
现在,可以在Mapfile中定义此投影下的地图范围:
EXTENT 208398.01 -372335.44 1285308.08 632638.93
请注意,此处的定义与Mapfile中实际使用的定义不同。重新投影时,使用数据范围定义的地图可能与您预期的不同。通过考虑对射程进行缓冲,射程可以上下、左右扩展几公里(根据投影和具体应用的不同而不同)。需要多少扩容可以由QGIS等桌面GIS软件来辅助,这样可能会更方便。
2.10.4. 地图投影在线文档¶
如果您需要了解更多有关地图投影的信息,请查看下面的一些链接: