CHƯƠNG 4. THIẾT KẾ VÀ VẬN HÀNH HỆ THỐNG
4.3 Thiết kế các chức năng của hệ thống
4.3.2 Chức năng hiển thị bản đồ
4.3.2.2 Sử dụng SLD định nghĩa kiểu thể hiện cho bản đồ
Trong phần mềm Geoserver, tập tin SLD (Styled Layer Descriptor - *.sld) được thể hiện dưới dạng tài liệu XML quy định màu sắc, kích thước, tỷ lệ… cho các đối tượng trên lớp bản đồ theo chuẩn định dạng WMS. Các quy định này tuân theo chuẩn được Geoserver hỗ trợ và theo chuẩn của OGC. Geoserver cung cấp công cụ Style Editor hỗ trợ thiết kế các tập tin *.sld hỗ trợ biên tập kiểu thể hiện lớp bản đồ theo chuẩn WMS (hình 4.3).
Phần tử gốc của một SLD là <StyledLayerDescriptor> . Nó chứa các phần tử quy định kiểu thể hiện (style) cho một lớp bản đồ. Trong đó:
- Phần tử <NamedLayer> xác định lớp (layer) đã được áp kiểu thể hiện và kiểu thể hiện được áp dụng cho nó. Kiểu thể hiện có thể là sự kết hợp của nhiều kiểu thể hiện có sẵn trong Geoserver hoặc kiểu thể hiện nào đó đã được định nghĩa. Nếu không chỉ định thì kiểu thể hiện mặc định được áp cho lớp bản đồ.
Phần tử <NamedLayer> bao gồm các phần tử con:
+ Phần tử <Name>: tên của lớp bản đồ đang đang được định nghĩa kiểu thể hiện.
+ Phần tử <Description>: Mô tả cho lớp bản đồ đang được định nghĩa kiểu dữ liệu.
+ Phần tử <NamedStyle>: Định nghĩa tên của kiểu thể hiện được áp cho lớp bản đồ.
+ Phần tử <UserStyle>: chứa các luật (rule) quy định kiểu thể hiện cho lớp bản đồ.
- Phần tử <UserStyle> bao gồm các phần tử con:
+ Phần tử <Name>: định nghĩa tên của kiểu thể hiện.
+ Phần tử <Title>: tiêu đề cho kiểu thể hiện.
+ Phần tử <Abstract> : mô tả cho kiểu thể hiện.
Hình 4.3 Công cụ Style Editor trong phần mềm Geoserver
+ Phần tử <IsDefault>: giá trị 0 hoặc 1 (default), Xác định kiểu thể hiện mặc định cho một lớp bản đồ nếu trong SLD có nhiều hơn một bộ luật xác định kiểu thể hiện cho lớp.
+ Phần tử <FeatureTypeStyle>: định nghĩa các dạng kí hiệu cho mỗi đối tượng trên lớp bản đồ. Nó chứa một danh sách các luật định nghĩa kiểu ký hiệu được áp cho các đối tượng trong lớp bản đồ.
- Phần tử <FeatureTypeStyle> chứa các phần tử con <Rule> xác định các luật định nghĩa kiểu thể hiện cho đối tượng thông qua thuộc tính của đối tượng.
Một phần tử <FeatureTypeStyle> có thể có nhiều phần tử con <Rule> tùy thuộc vào thuộc tính của đối tượng được định nghĩa kiểu thể hiện. Các luật trong phần tử <Rule> có thể có hơn một ràng buộc khi thể hiện:
+ Ràng buộc về tỉ lệ bản đồ thể hiện (Scale Selection): cho phép thể hiện nhiều kiểu thể hiện khác nhau ở mỗi tỉ lệ khác nhau. Ví dụ: ở tỉ lệ nhỏ không thể
hiện tên đường, đường có lực nét mảnh, tỉ lệ lớn hơn thì thể hiện rõ tên đường, đường có lực nét dày hơn (xem hình 4.4).
+ Ràng buộc về thông tin thuộc tính của đối tượng thể hiện (Evaluation Order): xem xét thuộc tính của một đối tượng nào đó, nếu như các đối tượng có cùng giá trị thì sẽ có cùng kiểu thể hiện, hoặc các đối tượng nằm cùng trong một
Hình 4.4 Ràng buộc thể hiện đối tượng theo tỉ lệ
Tỉ lệ 1: 9000 Tỉ lệ 1: 5000
nhóm giá trị thì sẽ có cùng kiểu thể hiện. Ví dụ lớp bản đồ thửa đất có 11 loại đất với các mục đích sử dụng khác nhau, như vậy thì trên bản đồ sẽ có 11 màu kháu nhau biểu trưng cho 11 loại sử dụng đất, các thửa đất có cùng mục đích sử dụng thì cùng một màu. Hoặc, lớp bản đồ thửa đất có giá từ 100 triệu đến trên 100 tỉ chia làm 9 nhóm giá, sẽ có 9 màu khác nhau (màu có thể thay đổi liên tục để thể hiện giá trị từ thấp đến cao), những thửa đất nằm trong cùng nhóm giá sẽ có cùng một màu (hình 4.5).
Ví dụ sau là một phần nội dung của một tập tin SLD mô tả cách phân nhóm giá đất bằng các nhóm màu sắc từ đậm đến nhạt:
Hình 4.5 Ràng buộc thể hiện đối tượng theo thuộc tính
Trong tập tin SLD, các đối tượng có thể phân loại các dạng ký hiệu dành cho đối tượng theo các mẫu: point symbolizer, line sympolizer, polygon symbolizer, text sympolizer, raster.
Point Sympolizer:
Loại ký hiệu này dùng để biểu diễn cho các đối tượng dạng điểm. Trong tập tin SLD, kiểu <PointSymbolizer> dùng để quy định cách biểu diễn cho đối tượng dạng điểm. Trong đó phần tử <Graphic> mô tả kiểu hình dạng, màu sắc, đường viền, độ trong suốt, kích thước, góc xoay… cho đối tượng điểm. Phần tử <Graphic>
có các phần tử con sau:
- Phần tử con <WellKnownName> quy định kiểu hình dạng được áp dụng cho đối tượng, chuẩn hình dạng SLD hỗ trợ các kiểu hình tròn (circle), hình vuông (square), hình tam giác (triangle), hình ngôi sao (star), hình chữ thập (cross), và kiểu x. Nếu không muốn sử dụng các kiểu ký hiệu trên thì có thể đưa vào bất kỳ một hình ảnh ký hiệu nào đó vào bằng cách sử dụng phần tử con
<ExternalGraphic>.
- Phần tử con <Fill> quy định màu nền cho ký hiệu.
- Phần tử con <Stroke> quy định màu, độ dày đường viền của ký hiệu.
- Phần tử con <Size> quy định kích thước của ký hiệu.
- Phần tử con <Rotation> quy định góc quay của ký hiệu.
Ví dụ:
Line sympolizer:
Loại ký hiệu này dùng để biểu diễn cho các đối tượng dạng điểm. Trong tập tin SLD, kiểu <LineSymbolizer> dùng để quy định cách biểu diễn cho đối tượng dạng điểm. Trong đó phần tử <Stroke> mô tả kiểu màu sắc, độ dày, độ trong suốt cho đối tượng đường. Phần tử <Graphic> chứa phần tử cơ bản <CssParameter> mô tả các kiểu đường cơ bản được hỗ trợ, có thể thay đổi kiểu đường, màu sắc, độ dày của đối tượng đường bằng các tham số:
- Tham số name="stroke": quy định màu sắc cho đường.
- Tham số name="stroke-width": quy định độ dày cho đường.
- Tham số name="stroke-opacity": quy định độ trong suốt cho đường.
- Tham số name = "stroke-linejoin", name = "stroke-linecap",
name = "stroke-dasharray", name = "stroke-dashoffset": quy định kiểu định dạng cho đường.
Ví dụ:
Polygon sympolizer:
Loại ký hiệu này dùng để biểu diễn cho các đối tượng dạng điểm. Trong tập
tin SLD, kiểu <PolygonSymbolizer> dùng để quy định cách biểu diễn cho đối tượng dạng vùng. Trong đó phần tử <Fill> cho phép định nghĩa màu nền cho đối tượng vùng, phần tử <Stroke> cho phép định nghĩa màu sắc, kiểu định dạng, độ dày đường viền cho đối tượng vùng.
Ví dụ:
Text sympolizer:
Loại ký hiệu này dùng để biểu diễn nhãn cho các đối tượng. Trong tập tin SLD, kiểu <TextSymbolizer> dùng để quy định cách biểu diễn nhãn cho đối tượng. Các phần tử của kiểu <TextSymbolizer> gồm:
- Phần tử <Label>: chứa phần tử <PropertyName> có giá trị là trường thuộc tính chứa nhãn của đối tượng.
- Phần tử <Font>: quy định font chữ, kích thước chữ, kiểu chữ (đậm, nghiêng…) cho nhãn.
- Phần tử <LabelPlacement>: quy định vị trí tương đối của nhãn với đối tượng được gắn nhãn.
- Phần tử <Fill>: quy định màu chữ.
- Phần tử <VendorOption>: hỗ trợ hiển thị nhãn theo nhóm hoặc theo tỉ lệ bản đồ quy định.
Ví dụ: