首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapServer的性能较慢

MapServer的性能较慢
EN

Stack Overflow用户
提问于 2009-04-30 18:01:33
回答 3查看 3.6K关注 0票数 2

我正在使用mapserver创建一个地图,该地图将与google map api一起显示。我遇到了性能问题。

我的地图都是shapefile格式的。

我运行测试来获得渲染贴图的时间。

使用shp2img工具渲染地图时,使用命令行

代码语言:javascript
复制
shp2img -i gif -m C:\myfolder\mymapfile.map -o C:\myfolder\test.gif -all_debug 5 -map_debug 5

我从日志文件中获得以下指标:

代码语言:javascript
复制
[Thu Apr 30 13:50:19 2009].148000 msLoadMap(): 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Layer 0 (PWorld2), 0.032s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap() total time: 0.032s
[Thu Apr 30 13:50:19 2009].195000 msSaveImage() total time: 0.015s
[Thu Apr 30 13:50:19 2009].195000 msFreeMap(): freeing map at 01595E18.
[Thu Apr 30 13:50:19 2009].195000 freeLayer(): freeing layer at 0159CD00.
[Thu Apr 30 13:50:19 2009].195000 shp2img total time: 0.047s

当通过mapserver呈现相同的地图时,使用

代码语言:javascript
复制
http://localhost/cgi-bin/mapserv.exe?mymapfile.map&layers=&mode=tile&tilemode=gmap&tile=1+1+2

日志文件提供了以下信息:

代码语言:javascript
复制
[Thu Apr 30 13:51:50 2009].664000 CGI Request 1 on process 3520
[Thu Apr 30 13:51:50 2009].664000 msTileSetExtent (-10013744.792915, 8348.961808) (-5009.377085, 10010405.208192)
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Layer 0 (PWorld2), 0.359s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap() total time: 0.359s
[Thu Apr 30 13:51:51 2009].23000 msSaveImage() total time: 0.000s
[Thu Apr 30 13:51:51 2009].23000 mapserv request processing time (loadmap not incl.): 0.359s
[Thu Apr 30 13:51:51 2009].23000 msFreeMap(): freeing map at 01598690.

对于相同的地图,shp2img工具渲染地图的速度是mapserver的10倍。添加更多图层并使用google地图的平铺模式时,最长可达10秒。

有人知道为什么mapserver的渲染速度很慢吗?有解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-22 10:57:23

shp2img请求和映射服务器请求之间有几个区别:

1) shp2img创建单个图像,您的mapserv请求生成瓦片。这意味着它可能需要为samen边界框渲染9个瓦片,而不是1个。这会产生开销。尝试在不设置平铺选项的情况下进行渲染,然后再次运行测试。

2)在mapserv中,cgi请求的开销很小。3) Mapserv通过http推送镜像,而shp2img直接写入磁盘。4)您没有在mapserv请求中指定层,这意味着mapserv将查找层。

票数 2
EN

Stack Overflow用户

发布于 2011-12-02 21:42:35

你可以读到这个:http://mapserver.org/optimization/index.html

  • 最重要的一点是删除EPSG文件中未使用的投影。例如,在epsg6 /usr/share/proj/epsg下,我有3个未使用的字体
  • 映射文件解析器从上到下读取文件,因此将最常用的层放在文件的顶部( RedHat解析器以相同的方式工作)

shape文件“应该”具有相同的调用者投影,否则Mapserver必须动态地重新投影它们。

例如,从我的OpenLayers代码(900913):

代码语言:javascript
复制
var options = {
    projection: new OpenLayers.Projection('EPSG:900913'), //aka  EPSG:3785
    displayProjection: new OpenLayers.Projection('EPSG:4326'), //geographic 

我所有的形状文件都是基于900913投影的。

票数 1
EN

Stack Overflow用户

发布于 2009-04-30 19:04:32

我有几个建议,但没有明确的答案,我没有做太多的mapserver配置,但我已经与那些做过的人一起工作过。

  1. 你可以对mapserver做很多优化,我会检查邮件列表,
  2. 会让mapfile尽可能的小,因为打开和解析mapfile会很耗时,所有的瓦片都会提前使用mapserver获取文件。动态平铺的速度不是很快。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/808273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档