PHP/Mapscript ngôn ngữ script của Mapserver

Một phần của tài liệu Phân tích dữ liệu không gian GIS-3D và xây dựng ứng dụng (Trang 52)

2.4.1. Ngôn ngữ PHP script

PHP ra đời vào khoảng năm 1994, người phát minh có tên là Rasmus Lerdorf. Nó được tiếp tục phát triển dần dần bởi nhiều người khác cho đến nay.

PHP là một ngôn ngữ script trên phía trình chủ. Có các phiên bản PHP trên hệ điều hành Windows và trên hệ điều hành Linux. PHP là Open Source ( mã nguồn mở ), điều này có nghĩa là bạn có thể làm việc làm việc trên mã nguồn, thêm, sửa, sử dụng và phân phối chúng.

PHP được thiết kế cho phép bạn xây dựng ứng dụng Web trên cơ sở dữ liệu. Mã PHP có thể được trộn lẫn với mã siêu văn bản HTML và có thể thực thi trên trình chủ Web để tạo ra trang HTML và xuất ra trình duyệt Web theo yêu cầu người dùng.

Cú pháp của PHP tương tự như cú pháp của C, Java và Perl. Bên cạch đó có một số đặc trưng riêng biệt , ví dụ như các câu lệnh tích hợp với các cơ sở dữ liệu. Khi sử dụng PHP, bộ diễn giải trên webserver sẽ biên dịch các câu lệnh PHP được chèn vào trong mã HTML trước khi file HTML được chuyển tới client's browser.

Trên phía server, mỗi khi phần tài liệu được truy cập nó sẽ được tạo lại và gửi đi trong khi client chỉ nhận mã HTML thuần tuý. Theo cách này, trên phía server chỉ với một file đơn lẻ có thể thu được một sự thay đổi lớn , trong khi phía client thậm chí không nhận biết được điều này.

Mô đun PHP MapScript được xây dựng bởi nhóm DM Solutions, cung cấp tất cả các hàm của mapserver trong ngôn ngữ PHP script. Theo cách này các hàm của mapserver có thể được điều hướng bởi các câu lệnh PHP được nhúng trong mã HTML.

Nhờ sử dụng ngôn ngữ PHP script ta có thể tạo được các phần động cho ứng dụng Internet và cung cấp cho người sử dụng các hàm kết quả động.

2.4.2. Một số nét khái quát về MapScript

Máy trạm gửi một yêu cầu URL cho máy tính chủ thông qua HTTP. Sau khi tiếp nhận yêu cầu Dịch vụ Web thực hiện yêu cầu và gửi các kết quả trả lại cho máy trạm đã yêu cầu.

Trong trường hợp là Mapscript, máy chủ thi hành một script chứa các hàm ngôn ngữ chuẩn đồng thời truy cập tới MapServer C API. ở mức đầy đủ MapServer C API hỗ trợ một số ngôn ngữ mà ta có thể chọn lựa.

Ngôn ngữ kịch bản trong Mapscript cho phép bạn làm nhiều việc với GIS như các thao tác trên các dữ liệu không gian bao gồm việc đọc và ghi các shapefile, tham chiếu lại dữ liệu và một số chức năng khác.

Phiên bản CGI của Mapserver không yêu cầu phải chạy trên các ứng dụng Mapscript, do đó bạn không cần phải có một mô đun Mapscript riêng biệt để chạy CGI.

Phiên bản CGI có nhiều đặc tính được hỗ trợ từ bên ngoài, MapScript phải là một API, do vậy với MapScript bạn phải bắt đầu từ số không hoặc phải từ một số ví dụ sẵn có. CGI được xem như một ứng dụng MapScript viết trên ngôn ngữ C và truy cập trực tiếp tới MapServer C API. Trong một số trường hợp, chức năng hỗ trợ từ bên ngoài lại có một số giới hạn vượt trội hơn bởi mapscript nhưng lại không được nhúng trong CGI.

Cùng với Mapserver, Mapscript có thể được cấu hình để sử dụng các file map. Nhưng không giống như CGI, Mapscript có khả năng tạo các bản đồ động hoặc thay đổi các bản đồ sẵn có và kết hợp các thông tin này với các nguồn thông tin khác do người sử dụng nhập vào như : dữ liệu không gian, dữ liệu phi không gian, tệp văn bản ...và bạn có thể sử dụng các modul riêng lẻ. Đây chính là điểm nổi bật thể hiện tính linh động của Mapscript.

Cách tiếp cận này mang lại những khả năng ứng dụng rất phong phú. Các hạn chế của nó chỉ phụ thuộc vào khả năng sáng tạo của chính bạn. Bên cạnh tính linh động của một ngôn ngữ kịch bản thì chương trình viết bằng Mapscript thường có tốc độ thực hiện chậm hơn viết bằng ngôn ngữ C . Tuy nhiên hiện nay vấn đề này không thực sự đáng lo lắng.

Định dạng dữ liệu vào/ra của Mapscript có thể được quản lý một cách chính xác cùng với cấu hình khi bạn xây dựng MapServer/MapScript . Một trong những điều quan trọng cơ bản cần chú ý là bạn phải cung cấp các dữ liệu địa lý và các dữ liệu liên quan cho Mapscript và kết quả nhận được có thể là một hoặc nhiều file . Các định dạng ảnh tiêu biểu là PNG và JPEG.

Hình 2.1: Kiến trúc Mapscript

2.4.3. PHP/Mapscript

PHP MapScript trước đây có hỗ trợ PHP-3.0.14 nhưng sau khi MapServer 3.5 thôi không hỗ trợ PHP3 nữa thì hiện nay cần PHP 4.3.11 hoặc cao hơn.

Kết hợp tốt nhất là:

- Mapscript 4.6 với PHP 4.3.11 và cao hơn - Mapscript 4.4 với PHP 4.3.11 và cao hơn

Các module này đã được kiểm thử trên các hệ điều hành như Linux, Solaris, *BSD, và WinNT.

2.5. Các thành phần của một ứng dụng Mapserver 2.5.1. Các tài nguyên cần thiết 2.5.1. Các tài nguyên cần thiết

Ứng dụng CGI Mapserver sử dụng các tài nguyên sau:

- Máy chủ Web: Apache hoặc Internet Information Server. - Phần mềm Mapserver.

- Một file khởi tạo để tạo nhanh khung nhìn đầu tiên của ứng dụng Mapserver.

- Một file bản đồ điều khiển việc Mapserver xử lí dữ liệu.

- Một hoặc nhiều tệp template là khuôn mẫu điều khiển giao diện người dùng của ứng dụng trong cửa sổ bộ duyệt Web.

- Dữ liệu GIS

Thông thường Mapserver được cài đặt trong thư mục cgi-bin còn các file và dữ liệu mapserver được lưu trong thư mục document của server. Dưới đây là sơ đồ logic hoạt động của MapServer.

2.5.2. Các tệp thành phần chính

Một ứng dụng Mapserver bao gồm các thành phần chính sau: - File khởi tạo (Initialization file)

- Mapfile

- File khuôn mẫu (Template file) - Dữ liệu GIS (GIS dataset)

File khởi tạo

Tệp này có thể là một phần của một tệp html khác, nhưng để đơn giản thì nó có thể là một tệp riêng biệt. Tệp khởi tạo sử dụng 1 form để gửi yêu cầu tới server và nhận câu trả lời từ Mapserver. Mapserver ở trong trạng thái chờ, khi nhận được một yêu cầu thì nó sẽ bắt đầu thi hành. Vai trò của tệp khởi tạo là chuyển một số tham biến (ẩn) tới ứng dụng Mapserver. Tệp khởi tạo là tệp html do đó nó có phần mở rộng là .htm hoặc .html

Mapfile

Định nghĩa các dữ liệu được sử dụng trong một ứng dụng, các tham số hiển thị và truy vấn. Mapfile được xem như một tệp cấu hình của ứng dụng. Nó cũng bao gồm các thông tin về cách vẽ bản đồ, chú giải của bản đồ và bản đồ kết quả của một truy vấn. Thông thường các Mapfile có phần mở rộng là .map.

Tệp Template

Quy định vị trí mà bản đồ, thước tỷ lệ và chú giải bản đồ sẽ xuất hiện trên trang html. Tệp này cũng đồng thời quy định cách thức cho phép người sử dụng tương tác với ứng dụng mapserver (ví dụ: browser, query, zoom ..). Tệp Template hoạt động giống như tệp html thông thường, chỉ có một điều khác là nó có chứa các thẻ ( biến CGI) của Mapserver CGI. . Mapserver sử dụng tệp template và thay thế các biến CGI trong tệp đó bởi thông tin trạng thái hiện tại của nó hoặc GIS dadaset để tạo ra trang html gửi đến browse. Vì tệp Template được dùng để sinh ra một trang html do nó có phần mở rộng là .html

Tập dữ liệu GIS

Theo mặc định, Mapserver sử dụng các định dạng tệp ESRI shape cho dữ liệu vector.

Dữ liệu raster có thể được dùng trong một số định dạng khác nhau tuỳ thuộc vào cách Mappserver được biên dịch. Mapserver mặc định hỗ trợ các định dạng raster: geoTiff, Tiff với worldfiles. Một số định dạng dữ liệu khác cũng có thể được sử dụng, tuy nhiên sẽ phức tạp hơn.

Các tệp dữ liệu sẽ được lưu trong một thư mục và thư mục đó được tham chiếu trong mapfile.

2.5.3. Dữ liệu lƣới điểm – raster

Mapserver hỗ trợ một số định dạng khác nhau cho bản đồ raster. Trong phần này ta sẽ mô tả một số định dạng được hỗ trợ và các tính năng kèm theo.

Lớp dữ liệu Raster trong Mapfile

Một khai báo lớp raster đơn giản được thêm vào như sau:

LAYER NAME "JacksonvilleNC_CIB" DATA "Jacksonville.tif" TYPE RASTER STATUS ON END

Trường DATA chứa tên tệp dữ liệu raster, dường dẫn tương đối căn cứ vào SHAPEPATH, giống như các shapefiles.

- Lớp dữ liệu raster có thể có các tham biến : PROJECTION, TADATA, PROCESSING, MINSCALE, và MAXSCALE .

- Lớp dữ liệu raster không thể chứa labels, queries, CONNECTION, CONNECTIONTYPE, hoặc FEATURE

Hỗ trợ các định dạng raster

Các tuỳ chọn cấu hình khi biên dịch quyết định Mapserver hỗ trợ những định dạng raster nào. Những định dạng khác được quản lý bởi thư viện GDAL. Một số tính năng nâng cao của Mapserver xử lí dữ liệu raster như xếp chồng nhiều bản đồ, sinh color cube RGB, chiếu tự động, .. chỉ có thể làm việc được thông qua GDAL. Thông thường GDAL được cài đặt trước. Sau đó, khi biên dịch và liên kết (built) Mapserver sẽ dùng lựa chọn cấu hình – with-gdal để có hỗ trợ GDAL. - Để kiểm tra những gì đã có sẵn trong bản Mapserver đang dùng, hãy cho thực hiện lệnh: ./ mapserver -v

- Để biết nhứng khuôn dạng gdal nào đã được hỗ trợ sẵn, cho thực hiện lệnh: gdal-config --formats

Dưới đây là một số khuôn dạng có thể được hỗ trợ sẵn

+ TIFF/GeoTIFF: Nếu biên dịch MapServer vói lựa chọn INPUT=TIFF thì MapServer sẽ đọc được các tệp dạng TIFF hoặc GeoTIFF . Hỗ trợ TIFF có một số hạn chế về cấu trúc của tệp có thể đọc ( không xếp kề, 16bit, RGB, hoặc chế độ màu lẻ thì Mapserver mới có thể đọc được). + Với GDAL, Mapserver hỗ trợ tất cả các tính năng. Chỉ có GDAL mới hỗ trợ bản đồ TIFF nhiều mảnh xếp kề và có overview. Đây là một tính năng mạnh nhất trong dịch vụ các bản đồ raster lớn.

+ GIF: Nếu GD được cấu hình với hỗ trợ GIF (OUTPUT=GIF) thì MapServer có thể đọc được các tệp raster dạng GIF .

+ PNG: Nếu GD được cấu hình với hỗ trợ PNG (OUTPUT=PNG) thì MapServer sẽ đọc được các lớp raster dạng PNG .

+ JPEG: Nếu MapServer được biên dịch để hỗ trợ JPEG (lựa chọn INPUT=JPEG) thì ảnh đa cấp xám JPEG có thể chuyển thành các lớp raster. Các ảnh màu RGB sẽ không được hiển thị. Nếu MapServer không

được hỗ trợ định dạng JPEG nhưng GDAL vẫn được hỗ trợ định dạng này thì các ảnh RGB cũng sẽ được hỗ trợ ( thông qua kĩ thuật luỹ thừa ba màu RGB).

Erdas .LAN/.GIS: Nếu cấu hình với INPUT=EPPL7 (mặc định) MapServer sẽ hỗ trợ tệp Erdas LAN/GIS 1 băng 8 bit. Các tệp *.trl được đọc làm bản đồ màu (colormap), nếu không tìm thấy thì lớp bản đồ được coi là đa mức xám.

2.5.4. Dữ liệu Vector

Sự kết hợp OGR với Mapserver để truy cập tới các dữ liệu định dạng vector. Bắt đầu từ phiên bản Mapserver 3.5 đã có khả năng truy cập tới các dữ liệu định dạng vector bằng cách sử dụng thư viện OGR. Trong phần này ta sẽ mô tả các hỗ trợ của OGR trong các ứng dụng của Mapserver.

Thư viện OGR là gì ?

ORG là một thư viện mã nguồn mở viết bằng ngôn ngữ C++ cho phép đọc (một số trường hợp có thể ghi) các tệp dữ liệu vector với các định dạng sau:

- shapefiles của ESRI;

- mid/mif và TAB của MapInfor.

Các định dạng dữ liệu được hỗ trợ

- ArcInfo Coverages, - ESRI Shapefiles,

- FMEObjects Gateway, - IHO S-57 datasets,

- tệp MapInfo TAB và MIF/MID,

- Oracle Spatial, PostgreSQL,

- SDTS TVP (Topological Vector Profile and Point Profile datasets), TIGER/Line file sets, UK.NTF (National )

Chú ý:

Một số định dạng ở trên ( ví dụ OGDI) có một số phụ thuộc bên ngoài, chúng không có trong khi biên dịch MapServer với hỗ trợ OGR.

2.6. Mapserver với PostGIS

2.6.1. Cấu trúc tệp map với tầng PostGIS

Minesota Mapserver phù hợp với đặc tả Web mapserver của OGC.

Map server truy cập PostGIS/PostgreSQL dùng libpq tương tự như bất cứ chương trình khách csdl nào khác.

Các bước:

- Trong tệp map, cần thêm tầng (layer) postGIS như ví dụ sau đây - Làm chỉ số (GiST) cho mọi layers bạn muốn vẽ.

- Nếu bạn muốn truy vấn các tầng dùng Mapserver, còn phải làm chỉ số theo oid - "oid index".

Ví dụ tệp map có tầng PostGIS

LAYER

CONNECTIONTYPE postgis

NAME “widehighway”

LAYER

# Connect to a remote spatial database

CONNECTION "user=dbuser dbname=gisdatabase host=bigserver"

# Get the lines from the ’geom’ column of the ’roads’ table

DATA "geom from roads" STATUS ON

TYPE LINE

# Of the lines in the extents, only render the wide highways

CLASS

# Make the superhighways brighter and 2 pixels wide EXPRESSION ([numlanes] >= 6) COLOR 255 22 22 SYMBOL "solid" SIZE 2 END CLASS

# All the rest are darker and only 1 pixel wide EXPRESSION ([numlanes] < 6)

COLOR 205 92 82 END

END

Trong ví dụ trên, các chỉ thị đặc thù của PostGIS là: CONNECTIONTYPE

Đối với layer PostGIS, luôn là "postgis". CONNECTION

Xâu tham số kết nối đến csdl, gồm nhiều cặp keys - values như sau, trong đó nằm trong cặp <> là giá trị mặc định:

user= <username> password = <password> dbname=<username> hostname=<server> port= <5432>

Xâu có thể rỗng. bất kì cặp key/value nào có thể vắng mặt. DATA

Có khuôn dạng "<column> from <tablename>”

Trong đó column là tên cột hình học cần render ra bản đồ. FILTER

Là xâu SQL, tương ứng với điều khoản "WHERE". Ví dụ, để render lên bản đồ chỉ các con đường bộ có >= 6 làn xe, bộ lọc là "num_lanes >= 6".

2.6.2. Applet Rosa

Rosa là một trình ứng dụng nhỏ (applet) viết bằng Java, được cung cấp bởi DM Solution Group của Canada. Applet Rosa cho phép người sử dụng điều khiển cách xem bản đồ với các thao tác như kích chuột, kéo rê một hình chữ nhật, elip hoặc là công cụ để định nghĩa một vùng. Nó cũng có thể có một thanh công cụ tùy biến được với các chức năng khác nhau.

Rosa là phần mềm mã nguồn mở, điều này có nghĩa rằng bạn có thể sử dụng nó rộng rãi trong các ứng dụng của bạn. Có thể tải applet này về tại địa chỉ:

http://www2.dmsolutions.ca/webtools/rosa/index.html

Gói Rosa chứa mọi thứ mà bạn cần bao gồm một phiên bản được biên dịch của Applet trong class/rosa.jar (ngoài ra nó còn chứa các tệp hỗ trợ PNG thông qua thư viện sigxlegs là rosa_png.jar), mã nguồn được đặt trong thư mục con src, và tư liệu được đặt trong userdoc.

Chính là nhờ tăng cường bằng các chức năng của applet Rosa mà người ta có thể xây dựng các ứng dụng Web GIS trên cơ sở MapServer

CHƢƠNG 3.

XÂY DỰNG ỨNG DỤNG WEBGIS HỖ TRỢ TÍNH TOÁN VÀ LỰA CHỌN VỊ TRÍ XÂY LẮP THÀNH PHẦN HỆ THỐNG LƢỚI ĐIỆN 3.1. Giới thiệu bài toán

Trong thực tế, để đưa ra phương án xây dựng mới một hệ thống lưới điện, hoặc xây dựng bổ sung vào một hệ thống đã tồn tại, các nhà thiết kế phải thực hiện tìm hiểu, đo đạc và lựa chọn ra các vị trí. Dựa trên bản báo cáo đo đạc, các nhà thiết kế mới xây dựng phương án và đánh giá tính khả thi. Quy trình này tốn khá nhiều chi phí về kinh tế và thời gian, đặc biệt là ở các địa hình nguy hiểm sẽ gây khó khăn và nguy hiểm cho người thực thi. Hơn nữa, bài toán cân bằng giữa việc phát triển, cải thiện tính ổn định, an toàn hệ thống và giảm chi phí là một bài toán rất khó cho các nhà quản lý. Vì vậy GIS là một giải pháp tối ưu khi cung cấp các công cụ hỗ trợ trong việc lập kế hoạch, điều khiển nguồn năng lượng điện, và đánh giá các tác động từ môi trường, ngoại cảnh. GIS giúp các nhà quản lý đưa ra các quyết sớm và chính xác. Tuy nhiên, các phần mềm GIS hiện nay có chi phí đắt và thường chỉ được sử dụng bởi các chuyên gia. Vì vậy chúng tôi đề xuất xây

Một phần của tài liệu Phân tích dữ liệu không gian GIS-3D và xây dựng ứng dụng (Trang 52)