Trang

Thứ Tư, 6 tháng 6, 2012

Sử dụng ký hiệu trong Pmapper 2 - Ký hiệu dạng đường


Đố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