Nếu bạn chỉ muốn sử dụng hệ thống ký hiệu, tôi đề xuất một giải pháp lấy cảm hứng từ câu trả lời của tôi từ một câu hỏi tương tự: Tạo đèn chiếu sáng trong QGIS? .
Theo một cách tiếp cận tương tự và giả sử bạn đang làm việc với CRS được chiếu (thay vào đó, nếu bạn đang sử dụng Hệ thống tọa độ địa lý, hãy xem ghi chú ở cuối câu trả lời), tôi muốn nhấn mạnh rằng tôi sẽ tập trung chú ý vào phần giải thích về những điều tối thiểu cần làm để tái tạo kết quả mong muốn: điều này có nghĩa là một số thông số nhỏ khác (như kích thước, chiều rộng, v.v.) nên được bạn dễ dàng điều chỉnh để phù hợp hơn với nhu cầu của bạn.
Hơn nữa, tôi giả sử đó "AZIMUTH"
là trường lưu trữ các giá trị góc phương vị và "BEAMWIDTH"
là trường lưu trữ độ rộng của chùm ăng ten.
Giải pháp
Chúng tôi sẽ kết xuất các điểm bằng một Single symbol
và bằng cách lặp lại thành một Simple Marker
và hai Geometry generator
lớp biểu tượng:
Trong phần giải thích thêm, tôi sẽ làm theo thứ tự tương tự của các biểu tượng trong hình trên.
1) Điểm đánh dấu đơn giản
Tôi đã chọn một biểu tượng mặc định của một vòng tròn màu đỏ (đây là phần dễ dàng hơn trong hướng dẫn này), có kích thước 3 mm và chiều rộng 0,4 mm.
2) Máy phát điện hình học số 1
Thêm một lớp biểu tượng mới và chọn Geometry generator
và các LineString / MultiLineString
loại:
Chèn biểu thức này vào Expression
trường:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Chúng ta vừa xác định mũi tên chỉ vào bộ góc phương vị (để tạo mũi tên, hãy nhớ chọn Arrow
loại lớp biểu tượng trong Line
tùy chọn từ Menu biểu tượng chính). Xin lưu ý rằng 300
khoảng cách tính bằng mét và đó là một giá trị tùy ý, vì vậy hãy thoải mái thay đổi nó theo nhu cầu của bạn.
3) Máy phát điện hình học số 2
Thêm một lớp biểu tượng mới và chọn Geometry generator
loại và các Polygon / MultiPolygon
loại:
Chèn biểu thức này vào Expression
trường:
CASE
WHEN ("BEAMWIDTH") <= 180
THEN
intersection(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" )), $y + 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
WHEN ("BEAMWIDTH") > 180
THEN
difference(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x - 2000*cos(radians(90 - "AZIMUTH" )), $y - 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
END
Chúng tôi vừa xác định ngành. Xin lưu ý rằng 200
và 2000
biểu thị khoảng cách tính bằng mét và chúng là các giá trị tùy ý vì tôi đang cố gắng tạo một đa giác để giao với vòng tròn có bán kính 200 m, vì vậy hãy thoải mái thay đổi chúng theo nhu cầu của bạn.
Kết quả cuối cùng
Nếu bạn thực hiện chính xác các tác vụ trước đó, bạn sẽ có thể nhận được kết quả như những tác vụ này (các nhãn được thêm vào ngoài giải pháp này và chúng chỉ nên giải thích rõ hơn về ngữ cảnh):
Ghi chú
Nếu bạn đang sử dụng Hệ thống tọa độ địa lý , nghĩa là nếu bạn đang xử lý độ và không phải khoảng cách, thì nên sử dụng các giá trị phù hợp khi tôi sử dụng khoảng cách trong các công thức trước đó là đủ. Khoảng cách tôi đã sử dụng là:
- 300 m (xem Máy phát hình học số 1);
- 200 m (xem Máy phát hình học số 2);
- 2000 m (xem Máy phát hình học số 2);
vì vậy bạn có thể thay thế nó với các giá trị tùy ý khác được thể hiện độ (ví dụ 0.0002
, 0.002
và vân vân).
Tặng kem
Tôi đã đính kèm kiểu ở đây : bạn có thể mở mã này bằng bất kỳ trình soạn thảo văn bản nào và lưu nó dưới dạng tệp Kiểu lớp của QGIS (nghĩa là có .qml
phần mở rộng).
Kiểu trên được tạo bằng cách sử dụng QGIS 2.18.4 (nó phải có cùng tên của shapefile bạn đang sử dụng).