Để thực hiện GetCapabilities request ta chủ yếu sử dụng 3 lớp quan trọng trong
CarbonTools, chúng đều nằm trong Package CarbonTools.Core.OGCCapabilities:
SourceOGCCapabilites, DataOGCCapabilities và HandlerOGCCapabilities.
5.2.1.1.Lớp SourceOGCCapabilities
Lớp này chứa các thông tin cần thiết cho việc thực hiện request như: địa chỉ của server để gởi request lên, version của WFS hay WMS mà server cung cấp….
SourceOGCCapabilities gồm các thuộc tính chính như sau:
STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa
1 Address System.Uri Chứa địa chỉ của server nơi mà
request được gởi đến 2 ServiceType CarbonTools.Core.Ba
se.OGCServiceTypes
Xác định loại service cần lấy thông tin là WFS hay WMS Có 2 giá trị là: CarbonTools.Core.Base.OGCS erviceTypes.WFS: Cho biết loại service cần lấy là WFS. CarbonTools.Core.Base.OGCS erviceTypes.WMS: Cho biết loại service cần lấy là WMS.
3 Version string Cho biết phiên bản của WFS
hay WMS muốn lấy từ server
4 Credentials System.Net.Network
Credential
Chứa thông tin về việc xác thực người dùng trên server.
Chương 5. CarbonTools
5.2.1.2.Lớp DataOGCCapabilities
Lớp này chứa kết quả trả về sau khi thực hiện GetCapabilities request. Các thuộc tính quan trọng STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa 1 ServiceType CarbonTools.Co re.Base.OGCSer viceTypes Xác định loại service cần lấy thông tin là WFS hay WMS Có 2 giá trị là: CarbonTools.Core.Base.OGCServic eTypes.WFS: Cho biết loại service cần lấy thông tin là WFS
CarbonTools.Core.Base.OGCServic eTypes.WMS: Cho biết loại service cần lấy thông tin là WMS
2 RequestItems RequestItemCo
llection
Chứa các thông tin về các request được server hỗ trợ (như:
GetCapabilites, GetMap…). Các thông tin này gồ: tên request, địa chỉđể gởi request, các giao thức được hỗ trợ cho request (GET, POST).
3 LayerItems CarbonTools.C
ore.OGCCapabi lities.LayerItem
Danh sách các loại Feature có trên server
Chương 5. CarbonTools
5.2.1.3.Lớp HandlerOGCCapabilities
Lớp này có tác dụng thực hiện việc gởi request lên server theo phương pháp bất đồng bộ và nhận kết quả trả về. Các thuộc tính STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa 1 Source CarbonTools.Core.OGC Capabilities.SourceOGC Capabilities Chứa các thông tin của request cần gởi lên server 2 Data CarbonTools.Core.OGC Capabilities.DataOGCCa pabilities Chứa kết quả trả về sau khi gởi request
3 Synchronous boolean Cho biết có thực hiện
request theo kiểu đồng bộ hay không
4 OperationDone EventHandler Đây là 1 delegate. có
tác dụng thông báo khi mà quá trình nhận dữ liệu không đồng bộ được thực hiện xong. 5 ProgressChange
d
EventHandler Đây là 1 delegate, có
tác dụng thông báo về tình trạng của tiến trình nhận dữ liệu không đồng bộ.
Chương 5. CarbonTools
Phương thức của lớp này
GetCapabilities(): Gởi request lên server với các thông tin chứa trong Source và lấy kết quả về, lưu trong Data.
Ví dụ thực hiện request:
SourceOGCCapabilities source = new SourceOGCCapabilities(); source.Version = "1.1.1";
source.Address = new
Uri(“http://localhost/OpenGISServer/VNesOpenGISServe r.aspx”, true);
HandlerOGCCapabilites handler = new HandlerOGCCapabilities(source);
//Hàm handler_ProgressChanged được gọi mỗi khi có sự //thay
đổi về trạng thái của tiến trình nhận dữ liệu
handler.ProgressChanged += new
EventHandler(handler_ProgressChanged);
//Sau khi quá trình nhận dữ liệu kết thúc thì hàm
//handler_OperationDone được gọi
handler.OperationDone += new
EventHandler(handler_OperationDone);
//Gởi request theo phương pháp không đồng bộ
handler.Synchronous = false;
//Sau khi gọi hàm này thì ta vẫn có thể thực hiện tiếp //các tác vụ khác vì quá trình gởi và nhận dữ liệu //được thực hiện
riêng biệt trong 1 tiểu trình khác.
handler.GetCapabilities();
//Hàm đáp ứng sự kiện khi tiến trình thay đổi trạng //thái
private void handler_ProgressChanged(object sender,
EventArgs e)
Chương 5. CarbonTools
//Sử dụng Progressbar đê thể hiện tiến trình thực
//hiện request, cập nhật giá trị của Progressbar khi
//tiến trình thay đổi trạng thái.
progressBar1.Value = handler.GetProgress(100); statusBarPanel1.Text = handler.State.ToString(); }
//Hàm đáp ứng sự kiện khi tiến trình hoàn thành
private void handler_OperationDone(object sender, EventArgs
e)
{
//Lấy danh sách các loại Feature (Layer) trên server
LayerItemCollection featureTypes = ((DataOGCCapabilities)handler.Data).LayerItems; enumerator = layers.GetEnumerator(); while ( enumerator.MoveNext() ) { LayerItem currentType = (LayerItem)enumerator.Current; string TypeName = currentType.Name; string TypeTitle = currentType.Title; }
}