socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

在实际的cache生成过程中遇到大地理范围和多显示比例的问题时,生成tile cache的耗时是个头大的问题,越低比例尺的绘制耗时将成几何倍数上升,如果要绘制1:1000的全国图的话,完成工作一台主机可能需要几个月的时间,tilecache默认的请求tile规格是256×256,性能实在太低,所以提高每次向geoserver请求图块的规格来稍微提高速度,目前我采用2048×2048。
但openlayers里面256×256是最佳的cache规格,所以tilecache产生的tile必须进行切割成256规格

 1 # -*- coding:utf-8 -*-
 2 
 3 #切割大地图块到小图块,重新索引图块文件目录
 4 
 5 #层名称/缩放级别/000/000/列编号/000/000/行图块文件.png
 6 
 7 import sys, traceback,threading,time,struct,os,os.path,shutil,distutils.dir_util,array,base64,zlib
 8 import PIL,Image
 9 
10 g_layerName='east_china'
11 
12 srcTiles={'path':'','size':(1024,1024)}
13 destTiles={'path':'','size':(256,256)}
14 
15 #layerName - 处理的地图层名,在tilecache.cfg中定义
16 #scale - 显示级别
17 #tileDir - 图块存储目录
18 #destDir - 切割图块存储目录
19 #tilesizeFrom - 当前图块规格
20 #tilesizeTo - 目标图块规格
21 #注意: 维度从下至上递增
22 #一个大网格块列切割成多列,行且歌城多行
23 def splitTile(layerName,scale,tilesDir,destDir,tilesizeFrom=(1024,1024),tilesizeTo=(256,256)):
24     xcols = tilesizeFrom[0]/tilesizeTo[0]
25     xrows = tilesizeFrom[1]/tilesizeTo[1]
26     
27     path2 = "%s/%s/%02d/000/000"%(destDir,layerName,scale)
28     if not os.path.exists(path2):
29         os.makedirs(path2)
30     path1 = "%s/%s/%02d/000/000"%(tilesDir,layerName,scale)
31     cols = map(int,os.listdir(path1))
32     for col in cols: #1列要切割成n列
33         path1 = "%s/%s/%02d/000/000/%02d/000/000"%(tilesDir,layerName,scale,col)
34         for x in range(xcols):
35             newcol = col*xcols + x
36             path2 = "%s/%s/%02d/000/000/%02d/000/000"%(destDir,layerName,scale,newcol) #大土快可以切割成多列
37             if not os.path.exists(path2):
38                 os.makedirs(path2)
39             #print path1
40             files = os.listdir(path1) #list columns
41             for file in files:
42                 name,ext = file.split('.')
43                 path3 = "%s/%s/%02d/000/000/%02d/000/000/%s"%(tilesDir,layerName,scale,col,file) #
44                 img = Image.open(path3)
45                 
46                 rows = range(xrows)
47                 rows.reverse()                
48                 for y in rows:                    
49                     box = (x*tilesizeTo[0],y*tilesizeTo[1],(x+1)*tilesizeTo[0],(y+1)*tilesizeTo[1])
50                     #print box
51                     newimg = img.crop(box)
52                     y = int(name)*xrows + xrows - y -1
53                     print x,y
54                     path2 = "%s/%s/%02d/000/000/%02d/000/000/%02d.png"%(destDir,layerName,scale,newcol,y)  #注意产生的文件编号的数值宽度
55                     newimg.save(path2)
56 
57 def test(*a,**b):
58     print len(a),b
59 #test(1,2,3,k=100)
60 
61 if __name__=='__main__':
62     splitTile('layer1',1,'E:/NewGis/trunk/python/tile1','E:/NewGis/trunk/python/tile2',(512,512),(32,32))



posted on 2010-04-12 10:32 放屁阿狗 阅读(727) 评论(0)  编辑 收藏 引用 所属分类: WebGis

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理