Chương 4. Bộ lọc (Filter)

type="xsd:string" use="required"/>

type="xsd:string" use="required"/>

use="required"/>

80

Chương 4. Bộ lọc (Filter)

type="ogc:LowerBoundaryType"/>

type="ogc:UpperBoundaryType"/>

Ngoài các phép toán so sánh chuẩn (=, >, <, >=, <=, <>), còn có các phép toán

khác là ,

Phép toán được dùng để so sánh 1 chuỗi với 1 khuôn mẫu

nào đó. Một mẫu được định nghĩa bởi sự kết hợp của các kí tự thông thường như

các kí tự wildCard, singleChar, escapeChar. Kí tự wildCard được dùng để tượng

trưng cho 1 nhóm các kí tự hoặc là không có kí tự nào. Kí tự singleChar dùng để

tượng trưng cho 1 kí tự duy nhất. Kí tự escapeChar được dùng loại bỏ ý nghĩa của

81

các kí tự singleChar, wildCard và kể cả chính nó.

Chương 4. Bộ lọc (Filter)

Thành phần được dùng để kiểm tra xem giá trị trong nội

dung của nó có rỗng hay không. Giá trị 0 là giá trị khác rỗng.

Thành phần được dùng để kiểm tra xem 1 giá trị có nằm

trong 1 khoảng được chỉ ra bởi 2 thành phần là

hay không.

4.6. Các phép toán Logic

4.6.1. Giới thiệu:

Các phép toán logic được dùng để kết hợp các biểu thức điều kiện lại với nhau.

Phép toán AND sẽ có giá trị là TRUE nếu như tất cả các phép toán kết hợp có giá trị

là TRUE. Phép toán OR sẽ có giá trị là TRUE nếu như có ít nhất 1 phép toán trong

số các phép toán kết hợp có giá trị là TRUE. Phép toán NOT dùng để đảo ngược kết

quả của 1 biểu thức.

4.6.2. Mô tả:

substitutionGroup="ogc:logicOps"/>

substitutionGroup="ogc:logicOps"/>

substitutionGroup="ogc:logicOps"/>

abstract="true"/>

maxOccurs="unbounded">

82

Dưới đây là đoạn lược đồ XML mô tả các phép toán so sánh này:

Chương 4. Bộ lọc (Filter)

ref="ogc:comparisonOps"/>

Các thành phần , hay được dùng để kết hợp các biểu thức

logic, biểu thức không gian hay biểu thức vô hướng để tạo ra 1 biểu thức kết hợp

phức tạp.

4.7. Định danh của Feature (Feature Identifier):

4.7.1. Giới thiệu:

Một định danh của Feature được dùng để chỉ 1 Feature địa lý cụ thể trong ngữ

83

cảnh của dịch vụ web chứa Feature này.

Chương 4. Bộ lọc (Filter)

4.7.2. Mô tả:

use="required"/>

Thành phần được mô tả bởi đoạn lược đồ XML sau:

Thành phần được dùng để chỉ ra các Feature trong 1 biểu thức

Filter hoặc tong các tài liệu XML khác.

4.8. Biểu thức (Expressions):

4.8.1. Giới thiệu:

Một biểu thức là 1 sự kết hợp của 1 hoặc nhiều biểu tượng (symbol) và cho kết

quả là TRUE hoặc là FALSE.

4.8.2. Mô tả:

Một biểu thức có thể được tạo nên bởi các thành phần sau đây:

, , ,

, , .

4.9. Các phép toán số học:

4.9.1. Giới thiệu:

Các thành phần được đề cập trong phần này gồm có các phép toán cộng, trừ,

nhân, chia…. Đây là các phép toán 2 ngôi, nhận 2 tham số và trả về 1 kết quả.

4.9.2. Mô tả:

type="ogc:BinaryOperatorType"

substitutionGroup="ogc:expression"/>

type="ogc:BinaryOperatorType"

substitutionGroup="ogc:expression"/>

84

Dưới đây là đoạn lược đồ XML mô tả các phép toán này:

Chương 4. Bộ lọc (Filter)

type="ogc:BinaryOperatorType"

substitutionGroup="ogc:expression"/>

type="ogc:BinaryOperatorType"

substitutionGroup="ogc:expression"/>

minOccurs="2" maxOccurs="2"/>

Thành phần thực hiện phép toán cộng, hai tham số của nó có thể là bất

kì biểu thức nào.

Thành phần thực hiện phép toán trừ, thành phần thứ 1 là số bị trừ, thành

phần thứ 2 là số trừ, hai tham số của nó có thể là bất kì biểu thức nào.

Thành phần thực hiện phép toán nhân, hai tham số của nó có thể là bất kì

biểu thức nào.

Thành phần

thực hiện phép toán chia,thành phần thứ nhất là số bị chia,

thành phần thứ 2 là số chia, hai tham số của nó có thể là bất kì biểu thức nào. Thành

phần thứ 2 phải khác 0.

4.10. Các hàm (Functions)

4.10.1. Giới thiệu:

Phần này đề cập đến hàm có giá trị đơn, sử dụng thành phần . Một

hàm là 1 thủ tục dùng để thực hiện 1 tác vụ tính toán nào đó. Một hàm có thể không

85

nhận tham số hoặc nhận nhiều tham số và trả về 1 kết quả duy nhất.

Chương 4. Bộ lọc (Filter)

4.10.2. Mô tả:

type="ogc:FunctionType"

substitutionGroup="ogc:expression"/>

minOccurs="0"

maxOccurs="unbounded"/>

use="required"/>

Đoạn lược đồ XML dưới đây mô tả các hàm này:

Một hàm bao gồm tên hàm, được chỉ ra bởi thuộc tính name, không có hoặc có

nhiều tham số chứa trong thành phần . Các tham số có thể là bất kì biểu

thức nào.

4.11. Các khả năng về Filter:

Phần này định nghĩa 1 lược đồ mô tả các khả năng, lược đồ này có thể được

dùng trong các tài liệu mô tả các khả năng của 1 dịch vụ có sử dụng Filter. Tài liệu

này cho biết là dịch vụ này có hỗ trợ các loại Filter nào. Chẳng hạn như 1 Web

Feature Service có sử dụng Filter sẽ cần phải thêm đoạn mô tả đưới đây trong tài

liệu mô tả các khả năng của nó để thông báo cho các client biết là nó có hỗ trợ các

86

loại Filter nào.

Chương 4. Bộ lọc (Filter)

type="ogc:Spatial_CapabilitiesType"/>

type="ogc:Scalar_CapabilitiesType"/>

Một dịch vụ hỗ trợ các Filter về không gian sẽ thêm phần mô tả các khả năng về

Filter không gian. Các khả năng về Filter không gian bao gồm các khả năng lọc dữ

liệu không gian dựa trên hình chữ nhật bao và các phép toán về không gian khác là

:Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains,

DWithin và Beyond.

Các khả năng về Filter không gian được mô tả trong đoạn lược đồ XML dưới

type="ogc:Spatial_OperatorsType"/>

87

đây:

Chương 4. Bộ lọc (Filter)

Các khả năng về các Filter vô hướng bao gồm khả năng xử lí các biểu thức

logic, biểu thức so sánh, biểu thức chứa các phép toán số học và biểu thức chứa các

type="ogc:Comparison_OperatorsType"/>

type="ogc:Arithmetic_OperatorsType"/>

hàm. Đoạn lược đồ dưới đây mô tả khả năng về các Filter vô hướng:

Thành phần dùng để chỉ ra rằng dịch vụ này có chứa các

Filter của các phép toán And, Or, Not.

Thành phần dùng để chỉ ra các loại phép toán so

sánh được dịch vụ này cung cấp. Thành phần cho biết là

các phép toán >, <, >=, <=, = được hỗ trợ. Các thành phần ,

cho biết là dịch vụ này có hỗ trợ các phép toán là LIKE, BETWEEN

88

và NULL.

Chương 4. Bộ lọc (Filter)

Thành phần cho biết là dịch vụ này hỗ trợ các phép

toán số học nào. Thành phần cho biết dịch vụ này có hỗ trợ

các phép toán là cộng, trừ, nhân, chia.

Thành phần dùng để chỉ ra tên các hàm được hỗ trợ và số lượng

tham số của từng hàm.

Ví dụ:

Ví dụ dưới đây là 1 đoạn mô tả các khả năng Filter của 1 dịch vụ. Tài liệu này

cho biết dịch vụ này hỗ trợ tất cả các loại Filter đã được mô tả trong các phần trước

89

cộng thêm các hàm được liệt kê:

Chương 4. Bộ lọc (Filter)

nArgs="1">MIN

nArgs="1">MAX

nArgs="1">SIN

nArgs="1">COS

90

Chương 5. CarbonTools

Chương 5. CarbonTools

5.1. Giới thiệu

CarbonTools là bộ toolkit dành cho .NET, được viết bằng môi trường .NET. Nó

cung cấp các lớp, các hàm hỗ trợ cho việc giao tiếp với các server hỗ trợ WFS và

WMS. Nó giúp thực hiện dễ dàng các request như : GetCapabilities, GetMap… ,

nhận tài liệu Xml trả về, đọc hiểu tài liệu Xml này và chuyển nó thành các dạng dữ

liệu dễ xử lí.

Bộ CarbonTools hiện đang có phiên bản 2.0.2, có thể download miễn phí tại địa

chỉ http://www.thecarbonproject.com/products/carbon.html

Sau khi install file setup CarbonTools2SDK.msi, ta sẽ được :

(cid:153) Hai file .dll dùng làm thư viện là CarbonTools.Controls.dll và

CarbonTools.Core.dll. Để sử dụng các lớp, các hàm do toolkit này cung

cấp, chỉ cần đưa các thư viện này vào project của mình.

(cid:153) Một tài liệu hướng dẫn sử dụng giới thiệu chi tiết các lớp, các hàm được

cung cấp.

(cid:153) Ba chương trình ví dụ mẫu sử dụng thư viện.

Tuy nhiên, bộ toolkit phiên bản 2.0.2 này vẫn còn thiếu nhiều chức năng. Chẳng

hạn như:

(cid:153) Không hỗ trợ đọc hiểu kết quả trả về từ DescribeFeatureType request

(cid:153) Không hỗ trợ Filter cho các loại Feature khi thực hiện GetFeature request

(cid:153) Đối với 2 request LockFeature Transaction, chỉ hỗ trợ việc gởi các tài liệu

Xml chứa nội dung cần gởi lên server và nhận kết quả trả về là 1 tài liệu

91

Xml. Ta phải tự tạo và tự đọc hiểu các tài liệu Xml này.

Chương 5. CarbonTools

5.2. Một số ví dụ về việc sử dụng bộ thư viện CarbonTools

5.2.1. Dùng CarbonTools thực hiện GetCapabilities request

Để 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 Xác định loại service cần lấy

se.OGCServiceTypes 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 Chứa thông tin về việc xác

Credential thực người dùng trên server.

Bảng 5.1. Các thuộc tính của SourceOGCCapabilities

92

Chương 5. CarbonTools

5.2.1.2. Lớp DataOGCCapabilities

(cid:153) Lớp này chứa kết quả trả về sau khi thực hiện GetCapabilities request.

(cid:153) 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 Xác định loại service cần lấy thông

re.Base.OGCSer tin là WFS hay WMS

viceTypes 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 Chứa các thông tin về các request

llection đượ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 CarbonTools.C Danh sách các loại Feature có trên LayerItems

ore.OGCCapabi server

lities.LayerItem

Bảng 5.2. Các thuộc tính quan trọng của DataOGCCapabilities

93

Chương 5. CarbonTools

5.2.1.3. Lớp HandlerOGCCapabilities

(cid:153) 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ề.

(cid:153) Các thuộc tính

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa

Chứa các thông tin của 1 Source CarbonTools.Core.OGC

request cần gởi lên Capabilities.SourceOGC

server Capabilities

2 Data CarbonTools.Core.OGC Chứa kết quả trả về

Capabilities.DataOGCCa sau khi gởi request

pabilities

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 EventHandler Đây là 1 delegate, có

tác dụng thông báo về d

tình trạng của tiến

trình nhận dữ liệu

không đồng bộ.

Bảng 5.3. Các thuộc tính của HandlerOGCCapabilities

94

Chương 5. CarbonTools

(cid:153) 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.

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

(cid:153) Ví dụ thực hiện request:

private void handler_ProgressChanged(object sender,

EventArgs e)

{

95

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;

}

}

5.2.2. Dùng CarbonTools thực hiện GetFeature request

(cid:153) CarbonTools hỗ trợ request này không đầy đủ, nó không hỗ trợ Filter cho các

Feature.

(cid:153) Để thực hiện loại request này, ta sử dụng các lớp chính như sau:

SourceWFS, HandlerWFS và DataFeatures

5.2.2.1. Lớp CarbonTools.Core.WFS.SourceWFS

96

(cid:153) Lớp này chứa các thông tin về request mà client cần gởi lên server

Chương 5. CarbonTools

(cid:153) Các thuộc tính quan trọng

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa

1 Address System.Uri Địa chỉ cần phải gởi request

2 Layers ArrayList Danh sách các loại Feature

cần lấy về

3 MaxFeatures int Là tham số MaxFeature

trong request

4 Version string Phiên bản WFS mà server

cài đặt

Bảng 5.4. Các thuộc tính của CarbonTools.Core.WFS.SourceWFS

5.2.2.2. Lớp CarbonTools.Core.Features.DataFeatures

(cid:153) Lớp này chứa các thông tin về các Feature lấy được từ server sau khi thực

hiện request

(cid:153) Các thuộc tính chính

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa

1 BBox CarbonTools.Core.BoundingBox Hình chữ nhật

bao của các

Feature lấy

được

2 Features CarbonTools.Core.Features.Item Danh sách các

Collection Feature lấy

được cùng với

thông tin chi

tiết của các

Feature đó.

Bảng 5.5. Các thuộc tính của CarbonTools.Core.Features.DataFeatures

97