a. Yêu cầu
- Format: đây là tham số không bắt buộc, là tham số hỗ trợ cho yêu cầu GetCapabilities trên WMS server. Mọi server hỗ trợ định dạng mặc định text/xml. Nếu request mô tả định dạng không hỗ trợ bởi server, server sẽ trả vềđịnh dạng mặc định text/xml.
- Version: là tham số không bắt buộc, chỉ ra phiên bản WMS cung cấp.
- Service: Tham số này bắt buộc, nó chỉ ra các kiểu dịch vụ cho phép khi yêu cấu đến server
- Request: Tham số phải có, dùng để triệu gọi thao tác GetCapabilities. Giá trị “GetCapabilities” sẽ sử dụng.
- UpdateSequence: Tham số không bắt buộc.
44
Khi triệu gọi Web map service, trả về yêu cầu của GetCapabilities là một tài liệu XML chứa dịch vụ metadata định dạng mã hoá theo lược đồ XML. Lược đồ này đặc tả những nội dung thiết yếu hay không cần thiết của dịch vụ metadata và mô tảđịnh dạng của nó. Tài liệu này có chứa một Root element với tên là WMS_Capabilities trong không gian.
3.2.2.2. Phương thức DescribeFeatureType
a. Yêu cầu
Hàm của DescribeFeatureType thao tác đến một lược đồ mô tả các kiểu dịch vụ feature được WFS cung cấp. Ví dụ một request:
<DescribeFeatureType version="1.0.0" service="WFS" xmlns="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
<TypeName>topp:bc_roads</TypeName>
</DescribeFeatureType>
Request được xây dựng theo quy cách và như là một tại liệu XML và được gửi đến server bằng HTTP POST request. Mới nhìn qua thì ta thấy rất phức tạp nhưng thực ra chỉ có đoạn in đậm mới là key line. Ởđây chỉ rõ kiểu đối tượng mà ta đưa vào là: topp:bc_roads.
b. Phản hồi
Kết quả trả về từ ví dụ trên là:
<xs:schema targetNamespace="http://www.openplans.org/topp"
elementFormDefault="qualified" attributeFormDefault=
"unqualified"
version="1.0">
<xs:import namespace="http://www.opengis.net/gml"
45
capabilities/
gml/2.1.2/feature.xsd"/>
<xs:complexType name="bc_roads_Type">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="the_geom" minOccurs="0"
nillable="true"
type="gml:MultiLineStringPropertyType"/>
<xs:element name="LENGTH" minOccurs="0"
nillable="true"
type="xZs:double"/>
<xs:element name="BTRN_BC_ID" minOccurs="0"
nillable="true" type="xs:int"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
<xs:element name="bc_roads" type="topp:bc_roads_Type"
substitutionGroup="gml:_Feature"/> </xs:schema>
3.2.2.3. Phương thức GetFeature
a. Yêu cầu
Cũng giống như WMS getMap, nhưng getFeature của WFS mô tả về dữ liệu thực. Đối với WMS thì dữ liệu sau khi được trả về là một định dạng ảnh hoặc text nhưng có thể convert một cách đơn giản trở thành ảnh còn đối với WFS thì dữ liệu được trả về là dữ liệu thực và được được mô tả như 1 tài liệu XML. Một số tham biến đáng chú ý:
- version (required) – tùy theo phiên bản là 1.0.0 hay là 1.1.0 - service (required and always WFS) -
46
- outputformat (optional) – là định dạng dữ liệu được trả về trong capabilities, mặc định là GML
- maxfeatures (optional) – số lượng lớn nhất các feature được trả về, mặc định là unlimited.
- typename (required) – kiểu feature muốn được trả về
- featureVersion (optional) – cung cấp để hỗ trợ cho việc lưu trữ feature, mặc định là newest
- propertyName (optional) – đặc tính của từng feature muốn lấy về tùy theo từng feature
- filter (optional) – lọc lụa chọn các feature trả về. Có thể lọc theo không gian hoặc cở sở nào đấy hoặc theo giá trị thuộc tính.
Sau đây là ví dụ:
<wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="GML2" –="" we="" would="" like="" gml2="" as="" the=""
return="" format="" xmlns:topp="http://www.openplans.org/topp" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd"> <wfs:Query typeName="topp:bc_roads">
<ogc:Filter>
<ogc:FeatureId fid="bc_roads.1"/> </ogc:Filter>
</wfs:Query> </wfs:GetFeature>
b. Phản hồi
Phản hồi trả về từ server là một GML mã hóa tập hợp feature <wfs:FeatureCollection
xsi:schemaLocation="http://www.openplans.org/topp
47 ?typeName=topp:bc_roads http://www.opengis.net/wfs http://localhost:8080/geoserver/data/capabilities/wfs/1 .0.0/WFS-basic.xsd"> <gml:boundedBy>
<gml:Box srsName="http://www.opengis.net/gml/srs/eps g.xml#27354"> <gml:coordinates decimal="." cs="," ts=" "> 494475.71056415,5433016.8189323 494982.7 0115662,5435041.95096618 </gml:coordinates> </gml:Box> </gml:boundedBy> <gml:featureMember>
<topp:bc_roads fid="bc_roads.1"> <topp:the_geom> <gml:MultiLineString –="" a="" multistring="" srsName="http://www.opengis.net/gml/srs/epsg.xml#27354"> <gml:lineStringMember> <gml:LineString> <gml:coordinates decimal="." cs="," ts=" "> 494475.71056415,5433016.8189323 494982.70115662,5435041.95096618 </gml:coordinates> </gml:LineString> </gml:lineStringMember> </gml:MultiLineString> </topp:the_geom> <topp:LENGTH>2163.48</topp:LENGTH> <topp:BTRN_BC_ID>13166</topp:BTRN_BC_ID> </topp:bc_roads> </gml:featureMember> </wfs:FeatureCollection>
48
3.3. Một số công nghệ mã nguồn mở
3.3.1. Mapbuider
Mapbuilder là ứng dụng mã nguồn mở sử dụng để triển khai Web Map Client. Mapbuilder sửng dụng chuẩn Open GIS để kết nối với server và sử dụng javascript và XLS để hiển thị dữ liệu bản đồ trên trình duyệt web
Mapbuilder bao gồm thành phần sau:
- MapBuilder – Lib: là một thư viện nguồn mở của các widgets bản đồ trên trình duyệt (browser based mapping widgets)
- OpenLayer: cung cấp một giao diện chung đến một số các lớp thông tin bản đồ khác nhau (như Google, Yahoo, MSN, WMS, vv). Nó được sử dụng bởi một số map rendering widgets.
- Sarissa: là một thư viện ECMAScript library đóng gói (wrapper ) các hàm XML APIs nguyên thuỷ. Thư viện này bao gồm các lớp đóng gói XML document, tải tài liệu XML từ URL hoặc một xâu, chuyển đổi bằng XSLT, truy vấn dự trên Xpath
- Overlib: Là một thư viện JavaScript cung cấp các popup nhỏ giống như tooltips.
- Walter Zorn’s JS Graphics: Thư viện JavaScript VectorGraphics cung cấp khả năng đồ họa cho JavaScript.
- Scalebar: Công cụ cung cấp thanh tỉ lệ (calebar tool)
- Single file compression: Các hàm để nén toàn bộ thư viện thành một file MapbuilderCompressed.js để tăng tốc độ tải mã JavaScipts về trình duyệt và tăng tốc độ biên dịch JavaScipts của trình duyệt.
a. Mục tiêu của Mapbuilder
- Client là trình duyệt web - Giảm tải cho server - Dễ dàng tích hợp - Giảm băng thông
- Sử dụng Javascript, XML và XLS - Thiết kế theo mô hình mobule - Mã nguồn mở
- Thu hút cộng đồng phát triển
49
Mapbuider được thiết kế theo mô hình Model-View-Control (MVC). Không giống như các hệ quản trị nội dung khác, Mapbuilder lưu trữ tất cả các model của nó ở trình duyệt web bởi vậy sự tương tác với server được giảm bớt
Hình 3.3: Mô hình MapBuilder
Model được hình dung như là thông tin của ứng dụng, điển hình là một tài liệu XML được nhận về từ server trong một file có form không thay đổi từ 1 URL. Các Model cung cấp phương pháp “get” hoặc “set” cho việc update thông tin và trạng thái của model.
View là phần hiển thị thông tin trong mỗi model. View có thể tự bản thân nó đăng ký với một model với dạng một thông báo. Đây chính là điển hình sử dụng “listener” làm phương pháp triệu gọi các kiểu sự kiện. View có thể cung cấp cho người sử dụng có thể gửi các yêu cầu đến người quản trị, còn trong MapBuilder thì view gọi đến các widgets.
Controller tiến hành biên dịch các yêu cầu của view trong các action bởi model. Controller có thể sửa đổi và trạng thái của một model. Trong MapBuilder Controller gọi đến các tool.
Cách thức ngăn cách của model và view cho phép các multile view được sử dụng cùng một model. Đây là cơ chế làm việc để cho việc mở rộng ứng dụng được dễ ràng hơn.
MapBuilder có thể gọi ra và lưu trữ một vài model khác nhau trong cùng một ứng dụng web. Trong thứ tự cung cấp của một vài cấu trúc có các model khác nhau sẽ
50
thực hiện các công việc khác nhau, một model có thể chứa một mảng của các model khác trong các nút con.
Trong MapBuilder thì thiết kế, các model, các widget và các tool đều thao tác với các đối tượng trong JavaScript. Danh sách của đối tượng có thể được tạo ra và liên hệ giữa chúng trên lý thuyết là sẽđược mô tả trong file cấu hình.
3.3.2. GeoServer
GeoServer là một máy chủ mã nguồn mở với mục đích kết nối những thông tin địa lý có sẵn tới các Geoweb (trang Web địa lý) sử dụng chuẩn mở. Được bắt đầu bởi một tổ chức phi lợi nhuận có tên The Open Planning Project (TOPP), nhằm mục đích hỗ trợ việc xử lý thông tin không gian địa lý với chất lượng cao, đơn giản trong sử dụng, là phần mềm mã nguồn mở nhằm cung cấp và chia sẻ dữ liệu. Được kỳ vọng sẽ trở thành một phương thức đơn giản để kết nối những nguồn thông tin có sẵn từ Google Earth, NASA World Wind nhằm tạo ra các dịch vụ Webmap như Google Maps, Windows Live Local và Yahoo Maps.
GeoServer được viết bằng ngôn ngữ Java, cho phép người sử dụng chia sẻ và chỉnh sử dữ liệu không gian địa lý (geospatial data).
Là một dự án mang tính cộng đồng, GeoServer được phát triển, kiểm thử và hỗ trợ bởi nhiều nhóm đối tượng và tổ chức khác nhau trên toàn thế giới. GeoServer là sự phối hợp các chuẩn hoạt động của Open Geospatial Consortium (OGC), Dịch vụ bản đồ (WMS-Web Map Service), Web Feature Service (WFS). GeoServer là thành phần nền tảng của Geospatial Web.
51
Hình 3.4: Giao diện GeoServer
3.3.2.1. Lịch sử phát triển
Dự án GeoServer được bắt đầu vào năm 2001 bởi The Open Planning Project (TOPP). Vào thời điểm đó, mọi Website bản đồ chỉ tập trung vào chức năng khởi tạo bản đồ, và không thẻ chia sẻ những dữ liệu đã được thực hiện trên bản đồ. TOPP nhận ra rằng những dữ liệu này tương đương với 'mã nguồn' của bản đồ, và nó vô cùng quan trọng trong việc tạo ra cấu trúc dữ liệu không gian mở, để người dùng có thể phân tích và mô hình hóa, việc không thểđối với dữ liệu ảnh.
Ngay sau khi những đặc tính kỹ thuật của Web Feature Server (WFS) được đưa ra trong bản phác thảo của Open Geospatial Consortium (OGC), kế thừa giao thức chuẩn được phát triển bởi TOPP trong việc tạo ra những kiến trúc không gian thông tin mở, GeoServer trở thành phần mềm mã nguồn mở sớm nhất cung cấp các đặc điểm kỹ thuật trong việc tạo và chỉnh sửa dữ liệu không gian.
Vào năm 2003, GeoServer được bổ xung WFS 1.0, và bổ xung WFS 1.1 vào năm 2006. Cộng đồng phát triển GeoServer đưa thêm WMS 1.1.1 và WCS 1.0. Đó là những thành phần đưa GeoServer trở thành chuẩn của máy chủ không gian địa lý nguồn mở.
Những đóng góp khác bao gồm Giao diện quản trị Web và hỗ trợ nhiều định dạng dữ liệu xuất ra.Như một GeoWeb mở rộng, GeoServer luôn không ngừng phát
52
triển, từng bước hỗ trợ: Google Earth, NASA World Wind, Google Maps, Windows Live Local và Yahoo Maps trong các dịch vụ desktop truyền thống và trong nền tảng GIS.
3.3.2.2. Đặc điểm
- GeoServer cho phép xuất dữ liệu linh hoạt dựa vào việc hỗ trợ các chuẩn KML, GML, Shapefile, GeoRSS, Portable Document Format, GeoJSON, JPEG, GIF, SVG, PNG ...
- GeoServer có thể đọc được nhiều định dạng dữ liệu, bao gồm PostGIS, Oracle Spatial, ArcSDE, DB2, MySQL, Shapefiles, GeoTIFF, GTOPO30 và nhiều loại khác. Bên cạnh đó, GeoServer còn có thể chỉnh sửa dữ liệu nhờ những thành phần xử lý của Chuẩn Web Feature Server.
- GeoServer được xây dựng trong bộ GeoTools, được viết bởi ngôn ngữ Java.
- MapServer cũng được coi là một sản phẩm mã nguồn mở, có nhiều chức năng tương tự. Sự khác biệt giữa hai sản phẩm là Mapserver được phát triển trong môi trường cũ, được viết bởi ngôn ngữ C và hoạt động nhờ CGI, còn GeoServer được viết bằng ngôn ngữ Java. GeoServer phân biệt với MapServer bởi nó có giao diện đồ họa, giúp đơn giản hơn trong việc cấu hình, và thực thi chức năng sửa đổi dựa vào Web Feature Server, cho phép chỉnh sửa thông tin không gian cả trên Web cũng như trên máy trạm Desktop. Ưu điểm lớn nhất của MapServer là tốc độ thực thi nhanh hơn GeoServer, nhưng từ phiên bản 1.6 trở đi của GeoServer thì tốc độ của hai sản phẩm đã tương đương.
- GeoServer hỗ trợ việc chia sẻ dữ liệu không gian địa lý lên Google Earth thông qua đặc tính 'network link' sử dụng KML.
53
Chương 4. Xây dựng ứng dụng WebGIS 4.1. Mô tả bài toán
Trong khóa luận này do không tìm được nguồn dữ liệu địa lý phù hợp với bài toán cụ thể vì vậy tôi sử dụng một tập dữ liệu nhỏ để xây dựng mô phỏng các tính năng của một hệ thống WebGIS
a. Dữ liệu địa lý sử dụng
Dữ liệu địa lý sử dụng là dữ liệu tỉ lệ 1/2000 có phạm vi địa lý năm trong 3 xã và một thị trấn của huyện Hương Sơn – Hà Tĩnh: xã Sơn Tây, Sơn Kim 1 và Sơn Kim 2; thị trấn Tây Sơn. Với tổng diện tích tự nhiên khoảng trên 50000 ha
Vị trí địa lý năm trong khoảng:
- Từ 18o15’00” đến 18o 33’45” vĩđộ Bắc.
- Từ 105o05’37.5” đến 105o24’22.5” kinh độĐông.
Dữ liệu địa lý được cung cấp bởi phòng đo đạc bản đồ thuộc Bộ Tài nguyên và Môi trường. Dữ liệu gồm 28 lớp các lớp thông tin sau:
1) Ao hồ 2) Bến đò phà 3) Bến lội 4) Bình độ cái 5) Bình độ cơ bản 6) Bờ cạp 7) Cầu 8) Cống giao thông 9) Đập 10)Địa danh 11)Địa giới huyện 12)Địa giới tỉnh 13)Địa giới xã 14)Địa vật dạng điểm 15)Địa vật dạng đường 16)Địa vật dạng vùng 17)Đường dây điện
54 18)Đường địa giới 19)Hướng dòng chảy 20)Mốc giới 21)Nhà dạng điểm 22)Nhà dạng vùng
23)Ranh giới quy hoạch khu kinh tế
24)Ranh giới sử dụng đất 25)Phủ bề mặt 26)Thuộc thủy hệ 27)Tim đường bộ 28) Tim dòng chảy b. Các công nghệ sử dụng - Mapbuilder - GeoServer - PostgreSQL - Apache Tomcat 4.2. Yêu cầu hệ thống
Xây dựng hệ thống thông tin địa lý trên web đáp ứng các yêu cầu sau:
a. Chức năng hiển thị
• Hiển thị toàn bộ tất cả các lớp bản đồ.
• Hiển thị các lớp bản đồ theo tùy chọn.
• Thay đổi tỉ lệ hiển thị bản đồ(phóng to, thu nhỏ).
• Di chuyển khu vực hiển thị.
• Hiển thị thông tin vềđối tượng cụ thể.
• Đo khoảng cách bản đồ
b. Chức năng phân tích
• Thực hiện việc tìm kiếm các dữ liệu phù hợp với yêu cầu.
• Chỉnh sửa đối tượng sẵn có thông tin về màu sắc thông qua 1 chuẩn bản đồ.
• Tạo bản đồ chuyên đề.
4.3. Thiết kế hệ thống 4.3.1. Kiến trúc hệ thống 4.3.1. Kiến trúc hệ thống
55
¾ Tầng trình bày : được xây dựng bằng Javascirpt, HTML và DHTML, thực hiện nhiệm vụ xử l ý các thao tác, lưu trữ thông tin ứng với từng người sử dụng, đảm nhận vai trò trung gian, truyền nhận dữ liệu, giữa người sử dụng với web server.
¾ Tầng ứng dụng : chia làm 2 thành phần : Mapbuilder và GeoServer. Cả 2 đều được phát triển dựa trên công nghệ Java
o Mapbuilder : đảm nhận trách nhiệm phát sinh giao diện và các đoạn script để tương tác với client, đóng vai trò trung gian giữa client và GeoServer, nó sẽ gửi yêu cầu của client tới GeoServer và nhận dữ liệu trả về để gửi ngược