Giới thiệu Mapserver

Một phần của tài liệu Xây dựng hệ thống quản lý bản đồ số dựa trên công nghệ Mapserver (Trang 46 - 54)

Mapserver là môi trường phát triển cho việc xây dựng ứng dụng GIS thông qua internet. Trong mô hình kiến trúc WebGis, Mapserver là ứng dụng GIS được đặt trên webserver. Mapserver là sản phẩm của trường đại học Minnesota (University of Minnesota - UMN) trong dự án kết hợp giữa NASA và bộ tài nguyên Minnesota. Mapserver có thể chạy trên nhiều môi trường, nó được viết bằng C++ có thể chạy trên các version của UNIX/LINUX, WINDOWS và cả trên MacOS. Để giao tiếp với các thành phần trên môi trường web, Mapserver sử dụng chuẩn giao tiếp CGI (Common Gateway Interface). Phiên bản Mapserver hiện tại là MapServer 5.4.

MapServer có các đặc điểm sau:

- Hỗ trợ các dịch vụ WebGIS theo chuẩn OGC, bao gồm: WMS Server, WMS Client, WFS Server, WFS Client và WCS Server.

- Xuất bản đồ với nhiều ưu điểm:

o Vẽđối tượng theo tỷ lệ.

o Hiển thị nhãn theo đối tượng

o Tùy biến giao diện, mẫu trước khi xuất.

o Sử dụng font: TrueFont

o Tạo bản đồ chuyên đề dựa trên biểu thức truy vấn trên các lớp cơ sở. - Hệ thống Mapserver bao gồm cả Mapscript, hỗ trợ các ngôn ngữ kịch bản

phổ biến và môi trường phát triển như C#, PHP, Perl, Python, Java, và Ruby. Mapscript cung cấp môi trường thuận lợi cho việc phát triển các ứng dụng tích hợp các dữ liệu phân tán.Ta có thể lấy dữ liệu không gian qua các ngôn ngữ kịch bản và dựa vào Mapscript ta có thể tạo ra được ảnh bản đồ. - Hỗ trợ các hệđiều hành: Linux, Windows, MAC OS X, Solaris, …

- Hỗ trợđịnh dạng dữ liệu raster và vector:

o TIFF/GeoTIFF, GIF, PNG, ERDAS, JPEG và EPPL7.

o ESRI shapefile, PostGIS, ESRI ArcSDE, Oracle Spatial, MySQL, … - Hỗ trợ lưới chiếu: hỗ trợ hơn 1000 lưới chiếu trong thư viện Proj.4

Mapserver đóng vai trò như là một map engine được cung cấp nội dung để tạo ảnh bản

đồ khi cần đến.

3.2. Các thành phần của Mapserver

Ứng dụng Mapserver sử dụng chuẩn giao tiếp CGI để giao tiếp với các thành phần và với HTTP Server. Do có mã nguồn mở nên cũng có những ứng dụng được biên dịch để có thể dùng Mapscript truy xuất trực tiếp các hàm API của Mapserver.

Ứng dụng Mapserver CGI sử dụng các tài nguyên sau: - Một webserver server (Apache hoặc IIS) - Phần mềm Mapserver (WebGIS application)

- File khởi tạo dùng để cấu hình và tùy biến các thông số của ứng dụng Mapserver (không bắt buộc)

- Map file là file cấu hình cho ứng dụng Mapserver. - Template file là giao diện giữa người dùng và Mapserver - Dữ liệu GIS

3.2.1. File khởi tạo

Mỗi khi http server nhận được yêu cầu từ client thông qua chuỗi URL thì http server sẽ gọi Mapserver chạy và thực thi. Bằng cách sử dụng file khởi tạo (file html) ta

định nghĩa tham số cơ bản càn thiết để Mapserver có thể thực thi được. Ví dụ:

[map],[map_web_imagepath],[img]…

3.2.2. Map file

Là một file text cấu hình cho ứng dụng Mapserver. Nó định nghĩa vùng bản đồ, thông báo cho Mapserver biết dữ liệu ở đâu và output là dạng gì và ở đâu. Nó định nghĩa các layer, bao gồm nguồn dữ liệu, khung chiếu và các biểu tượng. Nó có đuôi mở rộng là .map.

3.2.3. Template file

Nó điều khiển các hình bản đồ và các ghi chú trả về bởi Mapserver sẽ xuất hiện trên trang html. Đầu tiên Mapserver đọc template file này và nếu gặp các từ khóa hoặc các mẫu thì nó sẽ thay thế các giá trị tương ứng lấy từ chuỗi kết quả trả về, file này sẽ được gửi trở vè trình duyệt và hiển thị trên trình duyệt.

3.2.4. Dữ liệu GIS

Dữ liệu vector, Mapserver sử dụng ESRI shapefile làm dữ liệu mặc định.Ngoài ra các định dạng dữ liệu vector GIS phổ biến khác hiện nay, Mapserver đều có thể hiểu và tương tác được, như PostGIS, ESRI, ArcSDE, MapInfo… và nhiều định dạng khác thông qua thư viện OGR. Dữ liệu raster, MapServer hỗ trợ TIFF/GeoTIFF, EPPL7 và các định dạng khác thông qua thư viện GDAL.

3.3. Sơđồ hoạt động của Mapserver (adsbygoogle = window.adsbygoogle || []).push({});

Hình 21: Sơđồ hoạt động của Mapserver

MapServer có thể hoạt động ở hai chế độ CGI (Common Gateway Interface) và API (Application Program Interface). Ở chế độ CGI, các chức năng của MapServer trong môi trường WebServer là CGI MapScript. Ở chế độ API, có thể truy cập MapServer bằng PHP, Perl hoặc Python. MapServer hoạt động dựa vào các mẫu. Trước khi thực thi yêu cầu của web, MapServer đọc tệp tin cấu hình (mapfile) mô tả

các lớp và các thành phần khác của bản đồ.Mapserver sẽ vẽ ra ảnh bản đồ. Tiếp theo, nó sẽđọc một hoặc nhiều tệp tin mẫu HTML mà nó nhận diện trong tệp tin cấu hình. Mỗi tệp tin mẫu sẽ chứa đựng các tags HTML và các chuỗi MapServer đặc biệt. Các

chuỗi này sẽđược sử dụng, ví dụ chuỗi chỉ đường dẫn để lưu ảnh bản đồ do Mapserver tạo ra, hoặc chuỗi dùng để nhận diện các lớp nào sẽ được sắp xếp, …MapServer thay thế các giá trị hiện tại vào các các chuỗi này và gửi luồng dữ liệu về cho WebServer để

WebServer tiếp tục chuyển về cho trình duyệt. Khi có một yêu cầu mới phát sinh, MapServer sẽ nhận yêu cầu từ WebServer với các giá trị mới và chu trình cứ thế tiếp diễn.

3.4. Cài đặt Mapserver

UMN MapServer là mã nguồn mở và nó là một phương tiện render bản đồ tự do cho web. Do nó là mã nguồn mở nên nó có thể được biên dịch trên nhiều môi trường và nhiều hệ điều hành khác nhau. Chúng ta sẽ tìm hiểu việc biên dịch và cài đặt MapServer trên môi trường ubuntu Linux.

Các thư viện yêu cầu :

- GD: là thư viện đồ họa. MapServer sử dụng GD để render ảnh, là thư viện bắt buộc phải cài đặt. Các thư viện GD sử dụng là zlib, libpng, Freetype, libJPEG.

- Zlib: Thư viện nén dữ liệu sử dụng bởi GD. - Libpng: thư viện render ảnh PNG.

- Libjpeg : thư viện render ảnh JPEG

- Freetype: Được sử dụng bởi GD vho việc render ảnh.

- Proj.4 thư viện lưới chiếu bản đồ. Nó có thể hiện thị trên web bởi MapServer.

- Webserver apache - Mysql server - PHP5

- File cài đặt mapserver cgi-mapserver.deb.

Các thư viện và file cài đặt MapServer ở dạng binary packages có thể tải về từ trang

http://packages.ubuntu.com/.

Để kiểm tra cài đặt Mapserver khởi động lại Webserver bằng lệnh : $ /etc/init.d/apache2 restart

Kiểm tra Mapserver đã cài đặt đúng chưa gõ lệnh: $ /usr/lib/cgi-bin/mapserv

Nếu hiện ra :

This script can only be used to decode form results and should be initiated as a CGI process via a httpd server.

Thì đã cài đặt MapServer thành công.

3.5. Tìm hiểu Mapfile

Mapfile là trái tim của Mapserver. Nó định nghĩa các quan hệ giữa các đối tượng,

điểm, chỉ ra dữ liệu ở đâu và định nghĩa mọi thứđược vẽ như thế nào. Trong mapfile có nhiều đối tượng như Map, PROJECTION, LAYER, CLASS.. mỗi đối tượng định nghĩa cách thức tạo nên ảnh bản đồ hoặc đối tượng để Mapserver truy xuất dữ liệu cho câu truy vấn. Mapfile có cấu trúc phân cấp, MAP Object là root, các object nằm dưới nó. Chú thích trong mapfile là dấu #.

3.5.1. Map Object

Trong mapfile thì MAP là đối tượng gốc, chứa trong nó các đối tượng khác.

- EXTENT [minx][miny][maxx][maxy] : Không gian phạm vi của ảnh bản đồ được tạo ra, nó được được định nghĩa bởi kết hợp góc dưới bên trái [minx],[miny] và góc trên bên phải [maxx][maxy]. Lỗi trong định nghĩa extent có thể tạo ra kết quả là trang trắng, bản đồ bị méo hoặc lỗi. EXTENT phải được đinh nghĩa, và nó phải ở trong cùng một hệ thống kết hợp như là các đối tượng PROJECTION.

- FONTSET [filename] : Liệt kê danh sách các font được dùng. Mỗi dòng chứa 2 thành phần: một bí danh và một đường dẫn đến font được phân cách bằng khoảng trắng. Alias là tên dùng để chỉ font này trong mapfile. Mapserver sử dụng true font.

- IMAGECOLOR [r][g][b]: Màu được dùng làm background cho ảnh bản đồ. Nếu thuộc tính transparency được chọn , thì màu sắc này sẽđánh dấu như là màu trong suốt trong bảng màu. Khi đó thành phần nào của ảnh bản đồ sử (adsbygoogle = window.adsbygoogle || []).push({});

dụng màu này để vẽ cũng trong suốt. Nên khi tạo ảnh bản đồ nếu chọn ảnh bản đồ trong suốt thì nên chọn màu imagecolor là màu không được dùng để

- IMAGETYPE [gif|png|jpeg|swf|gtiff] : Định dạng ảnh bản đồđược tạo ra - LAYER : Bắt đầu đối tượng LAYER

- LEGEND : Bắt đầu cho đối tượng LEGEND

- NAME [name] : Xác định tiền tố cho tên ảnh bản đồ, ảnh các thước tỷ lệ, ghi chú được tạo ra từ mapfile

o Ví dụ :

ƒ NAME HN_ Các ảnh bản đồ tạo ra sẽ có tiền tố là HN_ - PROJECTION : Bắt đầu cho đối tượng PROJECTION

- QUERYMAP : Bắt đầu cho đối tượng QUERY MAP - REFERENCE : Bắt đầu cho đối tượng QUERYMAP

- RESOLUTION : Định đồ phân giải cho ảnh kết quả, độ phân giải sẽ ảnh hưởng đến việc tính toán tỷ lệ, mặc định là 72.

- SCALE : Tỉ lệ của bản đồ

- SHAPEPATH [filename] : đường dẫn tới dữ liệu dạng vector - SIZE [x][y] : kích thước theo đơn vị pixel của ảnh bản đồ

- STATUS [on|off] : trạng thái có được kích hoạt không của ảnh bản đồ. Nếu không được kích hoạt thì Mapserver sẽ không tạo ra ảnh bản đồ khi sử dụng mapfile này

- SYMBOLSET [filename] : file chứa tập hợp các biểu tượng được dùng trên bản đồ. Trên bản đồ, các symbol được dùng để đánh dấu các đối tượng nhằm làm nổi bật và tăng thêm ngữ nghĩa.

- SYMBOL : Bắt đầu đối tượng symbol

- TEMPLATEPATTERN [regular expression] và DATAPATTERN [regular expression] : Trong request được gửi lên từ trình duyệt gồm có 2 dạng tham số là DATA và TEMPLATE. Các tham số đề là các từ khóa được Mapserver quy định trước và thường khó nhớ. Bằng cách sử dụng TEMPLATEPATTERN và DATAPATTERN ta có thể định nghĩa một tên khác cho các từ khóa này.

- TRANSPARENT [on|off] : Thiết lập trong suốt cho ảnh bản đồ, mặc định là off.

- UNITS [feet|inches|kilometers|meters|miles|dd] : Đơn vị của hệ tọa độ ảnh bản đồ.

- WEB : Bắt đầu đối tượng web

3.5.2. Layer Object

Là đối tượng được sử dụng nhiều nhất trong mapfile, mỗi đối tượng layer mô tả

một layer được dùng để tạo ra ảnh bản đồ. Các layer được vẽ theo thứ tự xuất hiện của chúng trong mapfile, layer đầu tiên ở dưới cùng, layer cuối cùng ở trên. Phiên bản MapServer nhỏ hơn 5, số layer tối đa là 200 trong một mapfile, còn trong phiên bản 5 trở lên thì không giới hạn số lượng layer. Có thể thay đổi số lượng layer bằng cách sửa file map.h thay đổi giá trị MS_MAXLAERS. Đường dẫn tới mapfile phải là đường dẫn tuyệt đối. Các layer được vẽ ra còn được tính thêm thứ tự ưu tiên. Raster độ ưu tiên thấp nhất sẽ được vẽ trước và đặt ở phía dưới, tiếp đến là vùng, đường, điểm và nhãn (label). Thứ tự này đảm bảo các layer khi xếp chồng thì không che khuất nhau.

- CLASS : Bắt đầu đối tượng CLASS. Trong các định dạng vector, mỗi layer

được vẽ, lấy dữ liệu từ một bảng dữ liệu. Mỗi bảng dữ liệu có nhiều trương thuộc tính. Mỗi thuộc tính xem như một CLASS.

- CLASSITEM [attribute] : ứng với tên của trường thuộc tính trong bảng dữ

liệu, được định nghĩa trong mapfile.

- CONNECTIONTYPE [local|postgis|wms] : Kiểu kết nối OGR được dùng cho các loại dữ liệu khác ngoài dữ liệu mặc định là shapefile của ESRI. OGR là một thư viện được viết bằng C++ nó hỗ trợ các kết nối của nhiều loại dữ liệu như MapInfo, ArcInfo…

- CONNECTION [string] : Câu kết nối cơ sở dữ liệu để nhận về dữ liệu nằm trên các server hoặc các DBMS

- DATA [filename] : Tên file đầy đủ của dữ liệu để xử lý. Đối với dữ liệu là shapefile không cần chỉ rõ phần mở rộng. Đường dẫn có thể là tuyệt đối hoặc tương đối so với giá trị được chỉ ra bởi tham số SHAPEPATH của đối tượng MAP.

- DUMP [true|false] : cho phép Mapserver trả dữ liệu dưới dạng GML. Đặc biệt có ích khi sử dụng với phương thức WMS GetFeatureInfo, mặc định là false.

- FILTER [string] : Tham số này cho phép định nghĩa điều kiện lọc dữ liệu.

Đối với dữ liệu shapefiles hoặc các dữ liệu được kết nối thông qua OGR, (adsbygoogle = window.adsbygoogle || []).push({});

điều kiện lọc dữ liệu đơn giản là một chuỗi điều kiện. Còn đối với các loại dữ liệu được trích xuất từ cơ sở dữ liệu thông qua chuỗi kết nối thì điều kiện lọc là mệnh đề SQL WHERE.

- FILTERITEM [attribute] : Trường dữ liệu dùng cho câu chuỗi lọc FILTER, chỉ dùng cho OGR và shapefiles.

- MAXSCALE [double] : Tỉ lệ lớn nhất mà layer được vẽ

- METADATA : được dùng với OGC WMS để định nghĩa như tiêu đề của layer, tạo ra các template. Những dữ liệu được đặt trong Metadata sẽ được truy xuất thông qua các tag của tập tin template.

o Ví dụ: METADATA Title “Lớp địa hình” Author “cục bản đồ việt nam” Create date “8/5/2009” END

- MINSCALE [double] : Tỉ lệ nhỏ nhất mà layer được vẽ

- NAME [string] : Tên layer, giới hạn trong khoảng 20 ký tự. Tên layer được dùng để liên kết giữa giao diện web và mapfile. Ảnh bản đồ là kết quả của nhiều layer chồng lấp lên nhau. Từ giao diện web có thể cho phép người dùng chọn lựa layer hiển thị. Khi tên layer được chọn và tên layer được định nghĩa trong mapfile phải giống nhau để có thể hiển thị. Tên layer là duy nhất, tên layer khác cùng tên thì phải khác tỷ lệ. Sử dụng GROUP để nhóm các layer lại với nhau.

- PROJECTION : Bắt đầu đối tượng PROJECTION

- STATUS [on|off|default] : Trạng thái của layer. Giá trị là default thì layer luôn được vẽ ra. Trạng thái là on thì layer sẽ được vẽ ra nhưng có thể

chuyển về trạng thái off, trạng thái off thì layer không được vẽ ra nhưng có thể chuyển sang trạng thái on.

- TOLERANCEUNIT [double] & TOLERANCE [double] : Trong trường hợp cần lấy thông tin đối tượng trên bản đồ, ta cần chỉ ra đối tượng được chọn bằng click chuột vào vùng cần chọn. TOLERANCE được dùng để quy

định phạm vi đối tượng với tâm là vị trí click chuột. TOLERANCEUNIT chỉ ra đơn vị của TOLERANCE, mặc định nó là 3 pixel

Ví dụ:

TOLERANCE 3 TOLERANCE 6

Khi người dùng click chuột lên bản đồ. Mapserver xác định được vị trí click chuột là X,Y, sau đó tìm kiếm trong cơ sở dữ liệu xác định có đối tượng nào có vị trí trong hình tròn tâm X,Y bán kính 6*3.

- TRANSPARENCY [interger|alpha] : Mức độ trong suốt của layer. Giá trị là số nguyên từ 0-100 hoặc là giá trị bằng alpha. Giá trị nguyên là giá trị độ

mờ, giá trị là 0 là trong suốt hoàn toàn. Giá trị bằng alpha được dùng khi ảnh bản đồ xuất ra dưới dạng RGB.

- TRANSFORM [true|false] : Báo cho Mapserver chuyển từ hệ tọa độ địa lý sang hệ tọa độ đồ họa (ảnh đồ họa). Mặc định là true. Đối với hệ tọa độ đồ

họa, gốc tọa độ luôn là điểm góc trái trên của ảnh. Nó thường được dùng để đặt các logo và các mục cốđịnh ở trên bản đồ.

- TYPE [point|polygon|circle|raster|query] : Quy định các dữ liệu được vẽ ra. Không cần phải cùng loại dữ liệu. Ví dụ: các đối tượng polygon có thểđược vẽ như là một tập các điểm, ngược lại một điểm không thể vẽ như là tập các polygon. Dữ liệu shapefile không chỉ chứa đơn thuần một loại đối tượng, mà có thể có nhiều đối tượng. Nếu có đối tượng là Point và Polygon, chọn TYPE là polygon thì kiểu Point sẽ không vẽ được. Query chỉ ra layer được truy vấn thông tin, không cần phải vẽ lại. Nếu giá trị là circle thì 2 điểm sẽ

xác định hình chữ nhật chứa đường tròn.

Một phần của tài liệu Xây dựng hệ thống quản lý bản đồ số dựa trên công nghệ Mapserver (Trang 46 - 54)