Openlayers + Python = tilecache 项目总结
摘要
一:海图矢量数据文件S57相关细节
二:配置 IIS6.0 + TileCache
三:发布WMS
A、利用ARCGIS软件
B、利用DEEGREE软件
四:EPSG 及 PROJ.4初探
详细内容
一: 海图文件
S-57把ISO/IEC 8211 国际标准(信息交换数据文件技要求)用封装数据的技术方法,通常后缀名“.000"。
二:配置IIS + TileCache
TileCache: 用于缓存地图瓦片,即生成一系列PNG图片,用于快速记取地图图片。
关于如何安装配置TileCache这方面的资料较多,可参考http://www.hmgis.cn/post/301.html
具体步骤:
1:安装Python ,并配置IIS使其能够解析Python脚本
“计算机管理”--“默认网站 属性”---“主目录”---“配置”---“添加” ---"D:\Program Files\Python\python.exe" %s %s 扩展名为“.py"
2:下载TileCache,并将其布署在IIS上
3:利用IIS 管理脚本实用程序进行配置 cmd ---c:\inetpub\adminscripts 目录下
输入命令:adsutil set w3wvc/AllowPathInfoForScriptMappings True adsutil setw3svc/1/AllowPathInfoForScriptMappings True
4:将安装的TileCahe文件目录下的 tileCache.cgi文件重命名为tileCache.py
5:编辑TileCache.py文件 删除第一行代码:#!/user/bin/env python 将Service.Load的参数修改为tilecache.cfg的当前绝对路径
6:新建Cache文件夹,并使其具“可写”权限,用于保存生成的瓦片集合
7:编辑 tileCache.cfg文件
[base]
type=DiskCache
base=新建用于保存瓦片集合文件夹的绝对路径(修改行)
[basic] 指定的缓存图层名称
type=WMSLayer
url=WMS调用路径
layers=指定WMS中的图层名称
bbox= 显示的指定范围
8:编辑tileCache文件夹下的index.html
layer =new OpenLayers.Layer.WMS("新建的图层名称(任意)""tilecahe.py?",{layers:'与[basic]指定的缓存名一致', format:'image/png'})
9:浏览index.html,如果可以调用到OpenLayers上WMS,说明配置正确,并可在新建的Cache文件夹中查看到缓存的瓦片集合
10:使用python命令进行切割图片 Usage:tilecahe_seed.py <layer> [<zoom start><zoom stop>]
如:python “C:\Inetpub\wwwroot\tilecache\tilecache_seed.py”basic 0 2
三:发布WMS
A、ARCGIS发布:
1:需安装ARCGIS SERVER + ARCGISDESTOP ,安装文件积很大,在5G左右,且需要license支持。
2:在ARCGISSERVER ,需用 ARCGISSOC用户,发布WMS;数据源为.mxd文件。
a:利用ARCGISSERVER发布WMS的数据源需要MXD文件,而ARCMAP不能读取S57类型文件,使用FME软件转换为SHP。利用ARCMAP将SHP文件保存为 MXD,用于发布WMS,在转化为MXD文件后发现ARCGIS并不支持S-52的标准显示,于是找到ENC FOR ARCGIS 9.3 plugin 用于支持S-52显示
b:ENCFOR ARCGIS 9.3 plugin 可以支持S-52的图标显示,从NOAA网站上下载的S57文件转化后的基,但物标符号与标准并不一致,再加之国内的S57文件不够标准,转化的图片基本不可用
c:至此,一周半的ARCGIS摸索就此终结,鉴于其为非开源软件,重新走上Deegree发布WMS之路。
B、DEEGRE发布WMS
利用DEEGREE发布WMS,主要步骤为:将地理图片集合(图片+头文件)利用RTB切分成金字塔形图片库,发布至WCS, 再通过WCS发布WMS。
1、准确地理图片集合,关键是是生成地理头文件。如果图片是JPG,那头文件为JGW,以此为例:
LINE 1: 栅格图X方向每一个象素所占的纬度值
LINE 2: 旋转度
LINE 3: 旋转度(默认为0)
LINE 4: 栅格图Y方向每一个象素所占的经度值*(-1)
LINE 5: 左上角的经度值(即此区域内最小的经度值) 不限定使用何种EPSG,通常使用的是ESPG:4326即 WGS84
LINE 6: 左上角的纬度值(即此区域内的最大的纬度值)
范例:
0.00461334845906599
0.000000
0.000000
-0.00462935397439714
115.466666666667
2.95
关于地理头文件的描述有多种描述,这只是其中一种,我测试正确的一种方式。检测地理头文件是否正确有一种简单方式, 即将生成的JPG文件拖放到ARCMAP中是否能够自动生成出金字塔的图片。
2、将生成的地理图片集合利用RTB切图,将其发布至WCS,配置XML文件发布WMS。
四、EPSG 与 PROJ.4
EPSG 全称 Europen Petroleum Survey Group, 一个从事大地测量,测绘和制图的石油勘探,由欧洲石油行业专家组成的科学组织。
EPSG 4326 是一种常见的坐标系统,依据WGS84(经纬度)作为坐标点,以格林伪威治作为中央子午线。
WGS84:World Geodetic System 1984,是为全球定位系统使用而建立的坐标系统。
GB73:Nation Imagery and Mapping Agency(NIAA)为美国国防部建立的一个新的坐标系统。
PROJ.4 -CartographicProjections Library
我用到的命令行是CS2CS.EXE 用于实现EPSG之间坐标的转换。
语法参数为:CS2CS [-eEfIirstvwW [args ] ] [ +opts [=args]][+to [opts[=args]] file[s]
举例: 将EPSG 26912 转换成 EPSG 4326的命令行为:
cs2cs-I +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666+lat_0=40.16666666666666 +lon_0=-74 +x_0=300000+y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +to +proj=latlong+datum=WGS84