连接Oracle Spatial
前面的测试中我们使用shape文件作为地图数据源,下面我们将从Oracle Spatial空间数据库读取地理数据。
mapserver提供两种方式连接oracle空间数据库,native oracle spatial和ogr。安装包提供了支持native oracle spatial的二进制文件,ogr方式需要自行编译源代码。
借用以往项目的Oracle 10.2.0.3数据库,MapServer采用ms4w_2.3.1编译包,地图服务器安装Oracle10.2客户端,进行本地网络配置,测试连接正常。
关闭Apache MS4W Web Server服务,进入/ms4w/Apache/cgi-bin/ignored-libmap/oracle11g目录,将libmap.dll复制 粘贴到/ms4w/Apache/cgi-bin目录,替换原有文件,启动Apache MS4W Web Server服务。
新建一个Mapfile文件,LAYER部分如下
LAYER
NAME "road"
TYPE LINE
CONNECTION "geouser/123456@geodb" #数据库连接字符串
CONNECTIONTYPE oraclespatial #连接类型为oracle spatial
DATA "GEOLOC FROM NAV_ROAD1 USING SRID 4326" #此处GEOLOC为GEOMETRY字段名,NAV_ROAD1为表名
PROJECTION
"init=epsg:4326" #必须指定SRS编码
END
DUMP TRUE
CLASS
STYLE
COLOR 0 128 128
END
END
END
DATA标签使用如下格式
"[geom_column]
FROM
[table]| [(SELECT [...]
FROM [table]|[Spatial Operator]
[WHERE condition] )]
[USING [UNIQUE column]| [SRID #srid]| [FUNCTION]| [VERSION #version]
]"
注意:不要在FROM之前加入属性字段名,属性字段可添加在FROM后的子查询中,如下所示
GEOLOC FROM (SELECT MI_PRINX AS OID, NAME AS ONAME, COLOR AS COLOR, GEOLOC AS GEOLOC FROM NAV_ROAD1) USING SRID 4326
LABEL或STYLE用到的属性字段必须包含在SELECT子查询中。
修改openlayers客户端代码
var ms_layer = new OpenLayers.Layer.WMS(
"Test Map",
"/cgi-bin/mapserv.exe",
{
layers: 'road',
map: 'I:/cn_data/c2.map',
format: 'png'
},
{
reproject: false,
'numZoomLevels': 20,
gutter: 15,
buffer: 0
}
);
打开浏览器,查看效果。
为图层添加标注(Label)
在地图上标注文字,必然涉及到字体,MapServer采用与操作系统无关的设计,不能自动获知当前操作系统下安装了哪些字体,必须手工创建字体集FONTSET文件。
该文件的格式非常简单,每行配置一个字体,左边是字体名(可自由命名),右边是字体文件的路径(请使用绝对路径),如下所示:
arial C:/WINDOWS/Fonts/arial.ttf
sans C:/WINDOWS/Fonts/SIMSUN.TTC
将以上内容保存为文本文件,文件名和扩展名不限,例如保存为fonts.txt
在Mapfile的Map标签下添加一行
FONTSET fonts.txt #指明字体集文件,可以包含路径
在Mapfile的Layer标签中添加一行
LABELITEM "NAME" #指明标注所用的字段名
在Layer下的CLASS标签中添加以下内容
LABEL
COLOR 0 0 0
OUTLINECOLOR 255 255 255
FONT "sans" #此处sans对应宋体SIMSUN.TTC
TYPE truetype
SIZE 6
POSITION AUTO
PARTIALS FALSE
ENCODING GBK #此处为文字编码,如果不设置该值,中文将不能正确显示。对于中文Windows系统,操作系统的默认编码为GBK。
END
注意:ms4w_3.0beta11属于开发版本,支持shape文件数据源配置label标签,不支持oracle spatial数据源配置label标签。
为了读取oracle空间表中的属性生成标签,我们换用ms4w_2.3.1正式版,系统工作正常。
使用动态样式(STYLE)
实际应用中对地图的渲染有很多要求,MapServer支持动态设置STYLE,修改Mapfile文件LAYER的STYLE,例如:
STYLE
COLOR [COLOR] #COLOR必须使用[r] [g] [b]十进制格式,MapServer不能识别Web开发中常用的RGB十六进制格式
END
每条道路的颜色由道路表的属性字段COLOR决定,与之类似,可以从数据库取值填充SYMBOL,SIZE,ANGLE等标签。