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 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 dung của nó có rỗng hay không. Giá trị 0 là giá trị khác rỗng. Thành phần trong 1 khoảng được chỉ ra bởi 2 thành phần là 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 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.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 Thành phần Filter hoặc tong các tài liệu XML khác. 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.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 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 biểu thức nào. Thành phần 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.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 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 thức nào. 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 Filter của các phép toán And, Or, Not. Thành phần sánh được dịch vụ này cung cấp. Thành phần các phép toán >, <, >=, <=, = được hỗ trợ. Các thành phần 88 và NULL. Chương 4. Bộ lọc (Filter) Thành phần toán số học nào. Thành phần các phép toán là cộng, trừ, nhân, chia. Thành phần 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 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.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. 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 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ộ. 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: { 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 { //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 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 đó. 974.6. Các phép toán Logic
4.7. Định danh của Feature (Feature Identifier):
4.8. Biểu thức (Expressions):
4.9. Các phép toán số học:
4.10. Các hàm (Functions)
4.11. Các khả năng về Filter:
Chương 5. CarbonTools
5.1. Giới thiệu
5.2. Một số ví dụ về việc sử dụng bộ thư viện CarbonTools
Bảng 5.1. Các thuộc tính của SourceOGCCapabilities
Bảng 5.2. Các thuộc tính quan trọng của DataOGCCapabilities
Bảng 5.3. Các thuộc tính của HandlerOGCCapabilities
private void handler_ProgressChanged(object sender,
EventArgs e)
private void handler_OperationDone(object sender, EventArgs
e)
Bảng 5.4. Các thuộc tính của CarbonTools.Core.WFS.SourceWFS
Bảng 5.5. Các thuộc tính của CarbonTools.Core.Features.DataFeatures