連接Oracle Spatial
前面的測試中我們使用shape文件作為地圖數(shù)據(jù)源,下面我們將從Oracle Spatial空間數(shù)據(jù)庫讀取地理數(shù)據(jù)。
mapserver提供兩種方式連接oracle空間數(shù)據(jù)庫,native oracle spatial和ogr。安裝包提供了支持native oracle spatial的二進制文件,ogr方式需要自行編譯源代碼。借用以往項目的Oracle 10.2.0.3數(shù)據(jù)庫,MapServer采用ms4w_2.3.1已編譯包,地圖服務(wù)器安裝Oracle10.2客戶端,進行本地網(wǎng)絡(luò)配置,測試連接正常。
關(guān)閉Apache MS4W Web Server服務(wù),進入\ms4w\Apache\cgi-bin\ignored-libmap\oracle11g目錄,將libmap.dll復(fù)制粘貼到\ms4w\Apache\cgi-bin目錄,替換原有文件,啟動Apache MS4W Web Server服務(wù)。
新建一個Mapfile文件,LAYER部分如下
LAYER
NAME "road"
TYPE LINE
CONNECTION "geouser/123456@geodb" #數(shù)據(jù)庫連接字符串
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標(biāo)簽使用如下格式
"[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
}
);
打開瀏覽器,查看效果。
為圖層添加標(biāo)注(Label)
在地圖上標(biāo)注文字,必然涉及到字體,MapServer采用與操作系統(tǒng)無關(guān)的設(shè)計,不能自動獲知當(dāng)前操作系統(tǒng)下安裝了哪些字體,必須手工創(chuàng)建字體集FONTSET文件。
該文件的格式非常簡單,每行配置一個字體,左邊是字體名(可自由命名),右邊是字體文件的路徑(請使用絕對路徑),如下所示:
arial C:\WINDOWS\Fonts\arial.ttf
sans C:\WINDOWS\Fonts\SIMSUN.TTC
將以上內(nèi)容保存為文本文件,文件名和擴展名不限,例如保存為fonts.txt
在Mapfile的Map標(biāo)簽下添加一行
FONTSET fonts.txt #指明字體集文件,可以包含路徑
在Mapfile的Layer標(biāo)簽中添加一行
LABELITEM "NAME" #指明標(biāo)注所用的字段名
在Layer下的CLASS標(biāo)簽中添加以下內(nèi)容
LABEL
COLOR 0 0 0
OUTLINECOLOR 255 255 255
FONT "sans" #此處sans對應(yīng)宋體SIMSUN.TTC
TYPE truetype
SIZE 6
POSITION AUTO
PARTIALS FALSE
ENCODING GBK #此處為文字編碼,如果不設(shè)置該值,中文將不能正確顯示。對于中文Windows系統(tǒng),操作系統(tǒng)的默認(rèn)編碼為GBK。
END
注意:ms4w_3.0beta11屬于開發(fā)版本,支持shape文件數(shù)據(jù)源配置label標(biāo)簽,不支持oracle spatial數(shù)據(jù)源配置label標(biāo)簽。
為了讀取oracle空間表中的屬性生成標(biāo)簽,我們換用ms4w_2.3.1正式版,系統(tǒng)工作正常。
使用動態(tài)樣式(STYLE)
實際應(yīng)用中對地圖的渲染有很多要求,MapServer支持動態(tài)設(shè)置STYLE,修改Mapfile文件LAYER的STYLE,例如:
STYLE
COLOR [COLOR]
END
每條道路的顏色由道路表的屬性字段COLOR決定,與之類似,可以從數(shù)據(jù)庫取值填充SYMBOL,SIZE,ANGLE等標(biāo)簽。
提示:MapServer的顏色碼可以使用[r] [g] [b]十進制格式,也可以使用Web開發(fā)中常用的RRGGBB十六進制格式,例如:#FF0000
posted on 2010-11-26 12:16
天狼 閱讀(2809)
評論(1) 編輯 收藏