Đối với ký hiệu cho các đối tượng dạng đường thì việc khai
báo ký hiệu có khác chút ít. Ba thông số cần khai báo khi định nghĩa ký hiệu
đường là LINECAP, LINEJOIN và LINEJOINMAXSIZE. Trong đó, LINECAP là việc xác
định đầu cuối của đường, ví dụ đầu cuối của đường có thể đầu giống như đầu cây
cơ trong bida (butt), các thông số có thể khai báo là : butt, round, square hay
triangle. Hình bên dưới thể hiện LINECAP square và round

LINEJOIN định nghĩa hình dạng chỗ thay đổi hướng của đường.
Một số thông số có thể được khai báo là round, miter, hay bevel. Hình bên dưới
giúp chúng ta hiểu rõ hơn :

Thông số LINEJOINMAXSIZE chỉ được khai báo khi loại miter
được sử dụng trong LINEJOIN. Hình bên dưới thể hiện giá trị m sẽ được khai báo
(mặc định là 3).

Trong phiên bản này loại cartoline của ký hiệu đường không
còn đường sử dụng nữa, nên nếu chúng ta lấy máy file khai báo symbol có khai
báo loại cartoline thì nó sẽ báo lỗi.
Ký hiệu đường trong Mapserver là sự kết hợp của các ký hiệu
đơn giản, ví dụ chúng ta muốn thiết kế 1 ký hiệu nét đứt cho đường, chúng ta
chỉ cần sử dụng ký hiệu 1 đường gạch ngang và khai báo các khoảng đứt. Cụ thể,
để khai báo đường gạch ngang, chúng ta khai báo như trong phần ký hiệu điểm như
sau :
SYMBOL
NAME
'duong_ngang'
TYPE
vector
POINTS
0
0.5
1
0.5
END
END
Để khai báo các khoảng đứt, chúng ta sử dụng từ khóa PATTERN
(trong các phiên bản trước là STYLE). Giả sử chúng ta muốn tạo ra nét đứt bao
gồm [nét dài – khoảng cách – nét ngắn – khoảng cách] – nét dài …Chỉ cần khai
báo phần trong ngoặc vuông, bởi các phần tiếp theo chỉ là phần lặp lại. Phần
này sẽ được khai báo trong phần STYLE trong CLASS của LAYER cần thể hiện ký
hiệu :
CLASS
STYLE
COLOR 51 51 51
LINECAP butt
PATTERN
4 2
1 2
END
WIDTH 5
END
#Style
END#Class
Tôi để WIDTH lớn để dễ quan sát, kết quả thể hiện trên
Pmapper như sau :

Một ví dụ khác, tôi muốn tạo ra ký hiệu bao gồm đường hai
nét bên ngoài và đường nhỏ 1 nét bên trong làm tim. Ngoài việc sử dụng ký hiệu
đường ngang đã định nghĩa trong file chứa ký hiệu, ở đây chúng ta có thể sử
dụng từ khóa OFFSET để tạo đường 2 nét. Trong từ khóa OFFSET 2 thông số cần
khai báo tương ứng với sự thay đổi theo trục x và y. Nếu giá trị x dương thì
đường tạo ra sẽ nằm bên phải và ngược lại sẽ nằm bên trái. Còn nếu giá trị y âm
thì sẽ nằm dưới đường gốc và ngược lại sẽ nằm trên. Nếu giá trị y bằng -99 thì
nó sẽ tạo ra các đường cách đường gốc 1 khoảng cách khai báo trong giá trị x.

Như trong hình trên, đường gốc là đường màu đen, hai đường
màu green và màu blue sử dụng giá trị -99 và đường màu đỏ không sử dụng giá trị
-99.
Trở lại ví dụ, chúng ta sẽ khai báo như sau trong mapfile :
CLASS
STYLE
SYMBOL 'duong_ngang'
COLOR
0 0 255
WIDTH
20
END
#Style
STYLE
SYMBOL 'duong_ngang'
WIDTH
50
COLOR
255 0 0
LINECAP round
LINEJOIN
miter
OFFSET -16 -99
END
#Style
STYLE
SYMBOL 'duong_ngang'
WIDTH
50
COLOR
0 255 0
LINECAP round
LINEJOIN miter
OFFSET 16 -99
END
#Style
END #Class
Kết quả thể hiện trên pmapper :

Tuy nhiên, nếu muốn sử dụng cách này để thể hiện ký hiệu
đường giao thông thì có lẽ không được tốt lắm. Có cách khác để chúng ta có thể
tạo ra đường 2 nét bên ngoài, 1 nét bên trong và những khoảng trống chính giữa
được tô màu. Cách này sử dụng các đường vẽ chồng lên nhau với các kích thước và
màu sắc khác nhau. Chẳng hạn, trong mapfile khai báo như sau :
CLASS
STYLE
COLOR 0 0 0
WIDTH 17.0
END
# STYLE
STYLE
COLOR 209 66 0
WIDTH 11.0
END
# STYLE
STYLE
COLOR 0 0 0
WIDTH 1.0
END
# STYLE
END #
CLASS
Khi thể hiện trên Pmapper sẽ giống như vầy :

Hai nét màu đen bên ngoài thực chất là đường màu đen có bề
rộng lớn bị đường màu cam có bề rộng nhỏ hơn một ít che khuất phần ở giữa, rồi
sau đó có 1 đường màu đen nhỏ nữa được vẽ chồng lên. Nhìn cũng đẹp nhỉ. ^_^.
Trong phần trên chúng ta không khai báo ký hiệu, pmapper sẽ lấy ký hiệu mặc
định vẽ đường của nó.
Ngoài ra, chúng ta có thể kết hợp với các ký hiệu khai báo
trong file ký hiệu, vẽ chồng lên đường để tạp ra các loại ký hiệu khác nhau
phục vụ nhu cầu của mình. Ví dụ,
CLASS
STYLE
COLOR 0 0 0
WIDTH 6
END
# STYLE
STYLE
COLOR 102 0 0
SYMBOL "ngoisao"
SIZE 20
GAP 20
OFFSET -10 -99
END
# STYLE
END#Class
Ở đây có thêm từ khóa GAP, dùng để khai báo khoảng hở giữa 2
ký hiệu. Vì chúng ta sử dụng ký hiệu ngôi sao để thể hiện đường nên cần khai
báo thông số GAP này. Kết quả thể hiện trên pmapper

Một điều dễ nhận thấy là các ngôi sao được rải không đều mặc
dù chúng ta đã khai báo một giá trị GAP cố định. Điều này là do dữ liệu đường
thường được tạo thành từ nhiều đường (mỗi đường được giới hạn bằng 2 cú click
chuột). Mỗi đường này sẽ dựa vào giá trị GAP để xác định xem có bao nhiêu ngôi
sao được rải lên. Có đường ngắn, đường dài, nên số lượng ngôi sao không đều là
điều dễ hiểu.
Ok, vậy là chúng ta có thể có khả năng thiết kế được một số
ký hiệu dạng đường trên Pmapper.
Còn một điều cần lưu ý về phiên bản của Mapserver. Khi chúng
ta tải Mapserver từ trang web chính thức, khi cài đặt xong, mở trình duyệt web
lê thấy để MS4W version 3.0.4 nghĩa là phiên bản cho Window là 3.0.4 còn phiên
bản của Mapserver thì khác, hiện nay là phiên bản 6 (2012). Nhiều khi nhằm lẫn
phiên bản sẽ gây khó khăn cho việc tìm kiếm thông tin về hướng dẫn sử dụng.
Trong bài viết có sử dụng các hình trong phần hướng dẫn trên
web của MAPSERVER.
NNS
Không có nhận xét nào:
Đăng nhận xét