Mapfile¶
- 作者
David Fawcett
- 联系方式
david.fawcett at gmail.com
- 最后更新
2007/08/01
介绍¶
mapserver将 Mapfile 的内容用于配置、数据访问、投影等。因为每次请求映射图像时都会解析 Mapfile ,所以为了优化性能,必须考虑文件中包含的内容。最佳 Mapfile 不包含或引用任何不需要的内容。
1。投影¶
在 Mapfile 中定义投影有两种方法。您可以使用内联投影参数,也可以为该投影指定EPSG代码。如果您使用 EPSG 编码方法, PROJ 使用EPSG代码作为ID在PROJ数据库中查找投影参数。与内联定义投影参数相比,此数据库查找占用的资源要多得多。使用 Mapfile 中的EPSG代码对每个投影定义进行此查找。
使用内联投影参数定义的投影
PROJECTION
"proj=utm"
"ellps=GRS80"
"datum=NAD83"
"zone=15"
"units=m"
"north"
"no_defs"
END
使用EPSG代码定义的投影
PROJECTION
"init=epsg:26915"
END
优化建议
使用内联投影参数定义代替EPSG代码。
如果要使用EPSG代码,请从项目中删除所有不需要的投影定义记录 EPSG 数据库。
2。层¶
对于 Mapfile 中状态为“打开”或“默认”的每个图层,MapServer将加载该图层并准备显示,即使该图层从未显示。
优化建议
构建精益 Mapfile ,只包括您计划使用的图层。
关闭不必要的层;MapServer显示的层越多,花费的时间就越多。让打开的地图视图仅显示确定用户方向所需的最小值,并允许用户根据需要打开其他图层。这对于远程WMS或非常大的栅格尤其适用。
与关闭图层相关的是打开图层,但使用minscaledenom和maxscaledenom确定图层可用的缩放级别。如果地图的显示超出了图层的minscaledenom和maxscaledenom范围,那么mapserver可以跳过该图层的处理。它也产生了一个非常酷的效果,国家边界神奇地变为国家边界。
如果您有一个复杂的应用程序,可以考虑使用多个简单和特定的 Mapfile 来代替一个大型的“无所不能” Mapfile 。
在类似的脉络中,每个类也支持minscaledenom和maxscaledenom。如果您的数据集具有与不同缩放级别相关的数据,那么您可能会发现这是一个非常方便的技巧。例如,给Minscaledenom 1:1000000,县道Minscaledenom 1:100000,街道Maxscaledenom 1:50000。新数据神奇地出现,你会得到很酷的效果,但是当整个国家都在眼前时,你不会让MapServer试图绘制国家的道路!
类按顺序处理,并将一个特性分配给匹配的第一个类。因此,尝试将最常用的类放在类列表的顶部,这样MapServer就不必在找到匹配项之前尝试那么多的类。例如,如果您想突出显示怀俄明州的单一状态,您可能会这样做:
CLASS
EXPRESSION ('[NAME]' eq 'WY'])
STYLE
COLOR 255 0 0
END
END
CLASS
STYLE
COLOR 128 128 128
END
END
但这样做效率会更高,因为98%的病例会在第一次尝试时匹配:
CLASS
EXPRESSION ('[NAME]' ne 'WY'])
STYLE
COLOR 128 128 128
END
END
CLASS
STYLE
COLOR 255 0 0
END
END
使用 tile indexes 而不是多层。