Chuẩn mở của OpenGIS là một Web Map Server, tên gọi của nó đã thể hiện nó là một ứng dụng server cung cấp bản đồ trên Web. Sau đây là hình minh họa:
Hình 3.1: Mô hình webGIS theo chuẩn OpenGIS
3.1.1. Cơ chế hoạt động
a. Web Map Server
Về cơ bản một Web Map Server có thể làm 3 việc:
- Tạo ra một bản đồ (dưới dạng ảnh, dưới dạng đồ hoạ, hay được đóng gói bằng một tập dữ liệu địa lý).
- Trả lời các truy vấn cơ bản về nội dung bản đồ.
38
b. Web Map Client
Một Web Map Client (ví dụ một trình duyệt Web hoặc một chương trình ứng dụng) có thể yêu cầu một Web Map Server bằng các chuyển các yêu cầu (request) trong định dạng URL. Nội dung của mỗi URL phụ thuộc vào một trong ba loại dịch vụ mà Web Map Server cung cấp. Cụ thể:
- Yêu cầu để tạo ra một bản đồ, các tham số URL phải chỉ ra phạm vi địa lý (không gian) cần tạo bản đồ, hệ toạđộđược sử dụng, các kiểu thông tin được thể hiện, định dạng lưu trữ bản đồ và kích thước kết quả.
- Yêu cầu để truy vấn nội dung bản đồ, các tham số URL phải chỉ ra lớp thông tin (layer) bản đồ cần truy vấn, vị trí cần truy vấn.
- Yêu cầu cung cấp các thông tin về khả năng phục vụ của Web Map Server.
c. Cơ chế hoạt động
Từ các thông tin về Web Map Client và Web Map Server ta có thể hiệu được cơ chế hoạt động chung của WebGIS gồm:
- Cơ chế truyền thông (communication) giữa các máy tính: ở tầng dưới cùng của mô hình truyền thông, thông tin được truyền nhận bởi các tín hiệu điện tương ứng với cơ chế mã hoá nhị phân (0/1). Ở tầng tiếp theo là TCP/IP, ở tầng ứng dụng là giao thức HTTP, ở tầng này thông tin được mã hoá bởi ngôn ngữ HTTP.
- Các yêu cầu (requests): một trình duyệt “hỏi” một trang web bằng việc sử dụng một GET request. Yêu cầu này được định dạng bằng một URL;
- Đáp ứng (response) : web server sẽ kiểm tra sự tồn tại của trang web được yêu cầu, nếu tồn tại và người dùng có quyền truy cập nó sẽ trả về trang web cho người dùng, nếu không nó sẽ trả bè một thông điệp lỗi. Các trang web được mã hoá bằng HTML, ngôn ngữ này bao gồm các thẻ mô tả các thành phần của một trang.
- Hiển thị (display): trình duyệt hiển thị trang. Một khi trình duyệt chuyển đổi được HTML thành các đối tượng đồ hoạ nó có thể vẽ trên màn hình và chờ đợi người dùng tương tác lên trang.
39
Cả Web Map Service (WMS) và Web Feature Client (WFS) đều nằm trên Web Map Server, chúng chính là hai chuẩn công nghệ chính hình thành nên Web Map Server.
3.2.1. Web Map Service (WMS)
Một Web Map Service cung cấp dữ liệu các đối tượng địa lý cho client theo dạng hình ảnh hoặc một đoạn mã GML (không bao gồm tọa độ không gian). Web Map Service cung cấp các chuẩn nhận request như sau:
- GetMap (bắt buộc): Yêu cầu GetMap trả về một bản đồ dưới dạng ảnh (ảnh bản đồ) trong một phạm vi địa lý và theo các tham sốđược định nghĩa cụ thể. GetMap được triệu gọi bởi một client để nhận về một tập hợp các pixels. Các pixels này chứa một ảnh của một bản đồ trong một vùng địa lý (không gian) hoặc một tập các đối tượng đồ hoạ nằm trong vùng địa lý cụ thể. Yêu cầu GetMap cho phép các Web Map Client chỉ ra một lớp thông tin cụ thể, hệ quy chiếu không gian (SRS), khu vực địa lý, và các tham số khác quy định định dạng dữ liệu trả về. Trên cơ sở các yêu cầu GetMap từ Web Map Client mà một Web Map Server sẽ trả về các kết quả hoặc ném một biệt lệ (exception) theo các chỉ dẫn biệt lệ trong yêu cầu GetMap
- GetCapabilities (bắt buộc): Yêu cầu GetCapabilities trả về các siêu dữ liệu mô tả Web Map Server. Các mô tả bao gồm nội dung thông tin mà WMS server có thể phục vụ, các tham số mà Web Map Server có thể nhận.
- GetFeatureInfo (tuỳ chọn): Yêu cầu GetFeatureInfo trả về thông tin về đối tượng địa lý cụ thểđược hiển thị trên bản đồ. Nếu một Web Map Server hỗ trợ dịch vụ này thì bản đồ mà nó trả về được gọi là bản đồ có khả năng truy vấn thông tin và một Web map Client có thể yêu cầu thông tin về đối tượng trên một bản đồ bằng cách thêm vào URL các tham số chỉ ra một vị trí (X,Y) và số đối tượng có thể trả về thông tin.
3.2.1.1. Phương thức GetMap
a. Yêu cầu
Một trình duyệt web tạo ra một yêu cầu GET để hỏi một server về một trang web. Phẩn lớn các yêu cầu này được trả lời bằng HTML cấu thành lên một trang web. Tuy nhiên, một kết quả có thể là một ảnh, ví dụ là một đoạn HTML sau
40
Đoạn HTML trên đơn là là yêu cầu một ảnh được lưu trữ trên web server. Một yêu cầu web map giống như URL này ở điểm cũng yêu cầu một ảnh của bản đồ, cho dù trông nó có vẻ phức tạp hơn. Ví dụ: http://webmapping.mgis.psu.edu/geoserver/wms? version=1.1.1&request=getmap&layers=topp:states&styles=population &SRS=EPSG:4326&bbox=-125,24,-67,50 &width=400&height=200&format=image/png Kết quả như sau trên trình duyệt:
Hình 3.2: Kết quả trả về của phương thức GetMap - WMS
b. Phản hồi
Nếu quá trình xử lý yêu cầu từ Client không gặp lỗi bản đồ kết quả sẽđược trả về theo định dạng mà Client yêu cầu. Nhưng nếu có một lỗi xảy ra, Server sẽ gửi trả về một thông điệp lỗi được mã hoá bởi XML về Client.
Ví dụ, trong yêu cầu dưới đây, yêu cầu đã bị sai trong tham số format (thiếu chữ g) một lỗi sau sẽđược trả về:
<ServiceExceptionReport version="1.1.1">
<ServiceException code="InvalidFormat">
There is no support for creating maps in image/pn format
</ServiceException>
</ServiceExceptionReport>
41
Yêu cầu này được gửi khi client muốn biết các thông tin về server như các lớp thông tin mà server phục vụ, các định dạng dữ liệu mà server hỗ trợ. Dưới đây là một ví dụ về một request GetCapabilities:
http://webmapping.mgis.psu.edu/geoserver/wms?%20version=1.1.1&request=getcapabilit ies
Kết quả của yêu cầu GetCapabilities server sẽ trả về một XML chứa các thông tin sau:
- Các dịch vụđược hỗ trợ - Các định dạng được hỗ trợ - Các hệ tham chiếu không gian - Danh sách các lớp thông tin bản đồ - SLD/Styles
- Mã nhà cung cấp dịch vụ
3.2.1.3. Phương thức GetFeatureInfo
Một client có thể sử dụng yêu cầu này để tìm một đối tượng bản đồ tại một điểm trên bản đồđang được hiển thị. Yêu cầu này giống như yêu cầu GetMap nhưng có thêm vị trí X, Y theo toạđộ pixel tính từ phía trên bên trái của ảnh bản đồ và một tên lớp thông tin cần truy vấn.
Dưới đây là một ví dụ về yêu cầu GetFeatureInfo
http://webmapping.mgis.psu.edu/geoserver/wms?version=1.1.1&request=
getfeatureinfo&layers=topp:states&styles=population&SRS=EPSG:4326&bbox=-125,24,- 67,50&width=400&height=200&format=text/html&X=100&y=100&query_layers=topp:state s
Yêu cầu trên giống một yêu cầu GetMap, điểm khác biệt ở phần format chỉ ra định dạng kết quả trả về hoặc là text/html.
Kết quả trả về của yêu cầu trên sẽ là:
Results for FeatureType 'states':
---
the_geom = [GEOMETRY (MultiPolygon) with 153 points] STATE_NAME = Arizona
42 SUB_REGION = Mtn STATE_ABBR = AZ LAND_KM = 294333.462 WATER_KM = 942.772 PERSONS = 3665228.0 FAMILIES = 940106.0 HOUSHOLD = 1368843.0 MALE = 1810691.0 FEMALE = 1854537.0 WORKERS = 1358263.0 DRVALONE = 1178320.0 CARPOOL = 239083.0 PUBTRANS = 32856.0 EMPLOYED = 1603896.0 UNEMPLOY = 123902.0 SERVICE = 455896.0 MANUAL = 185109.0 P_MALE = 0.494 P_FEMALE = 0.506 SAMP_POP = 468178.0 ---
3.2.2. Web Feature Service (WFS)
Một Web Feature Server (WFS) cung cấp các đối tượng địa lý cho client. Nó cũng có thể cho phép các client thay đổi và thêm các đối tượng vào cơ sở dữ liệu. Khi WMS cung cấp một hình ảnh của dữ liệu thì WFS cung cấp dữ liệu thực được mã trong GML.
Một WFS có thể:
- Lấy thông tin hoặc truy vấn đến một lớp thông tin dựa theo vị trí không gian của một đối tượng được chọn.
- Update 1 đối tượng – Cho phép người dùng thay đổi một số thuộc tính trên một đối tượng lựa chọn.
43
- Xóa 1 đối tượng - nếu thông tin giá trị đối tượng đó không quá dài hoặc không có yêu cầu sử dụng thì có thểđược xóa khỏi bộ dữ liệu.
- Tạo mới một đối tượng – Cho phép người dùng thêm mới một đối tượng lên bản đồ.
Một WFS cung cấp 3 request:
- GetCapabilities (bắt buộc) – Đây là request cơ bản cho phép client nhận ra các dịch vụ và kiểu dữ liệu do WFS hỗ trợ.
- DescribeFetuareType (bắt buộc) – Cho phép mô tả kiểu đối tượng. Khi bản đồ muốn thêm một đối tượng mới thì nó phải biết cấu trúc của đối tượng đó.
- GetFeartue (bắt buộc) – Đây là dữ liệu thật được trả về client sau request đã được nhận.
3.2.2.1. Phương thức GetCapbilities
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