Se você deseja usar apenas a simbologia, proponho uma solução inspirada na minha resposta de uma pergunta semelhante: Criando luzes do setor no QGIS? .
Seguindo uma abordagem semelhante, e supondo que você esteja trabalhando em um CRS projetado (em vez disso, se estiver usando um sistema de coordenadas geográficas, veja a nota no final da resposta), quero sublinhar que vou focar a atenção na explicação das coisas mínimas a serem executadas para reproduzir o resultado desejado: isso significa que alguns outros parâmetros menores (como tamanhos, larguras etc.) devem ser facilmente ajustados por você para melhor atender às suas necessidades.
Além disso, eu assumo que "AZIMUTH"
é o campo que armazena os valores de azimute e "BEAMWIDTH"
é o campo que armazena as larguras de feixe da antena.
Solução
Renderizaremos os pontos com Single symbol
ae recorrendo a uma Simple Marker
e duas Geometry generator
camadas de símbolos:
Na explicação adicional, seguirei a mesma ordem dos símbolos na imagem acima.
1) Marcador Simples
Eu escolhi um símbolo padrão de um círculo vermelho (essa é a parte mais fácil deste tutorial), com um tamanho de 3 mm e uma largura de 0,4 mm.
2) Gerador de geometria n ° 1
Adicione uma nova camada de símbolo e selecione Geometry generator
os LineString / MultiLineString
tipos e:
Insira esta expressão no Expression
campo:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Acabamos de definir a seta que aponta para o conjunto de azimute (para criar a seta, lembre-se de selecionar o Arrow
tipo de camada de símbolo sob a Line
opção no menu principal do símbolo). Observe que isso 300
representa uma distância em metros e é um valor arbitrário; portanto, fique à vontade para alterá-lo de acordo com suas necessidades.
3) Gerador de Geometria No. 2
Adicione uma nova camada de símbolo e selecione o Geometry generator
tipo e os Polygon / MultiPolygon
tipos:
Insira esta expressão no Expression
campo:
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
Acabamos de definir o setor. Observe que 200
e 2000
representa distâncias em metros e são valores arbitrários, porque estou tentando criar um polígono para cruzar com o círculo com um raio de 200 m, portanto, fique à vontade para alterá-los de acordo com suas necessidades.
Resultado final
Se você executar corretamente as tarefas anteriores, poderá obter resultados como estes (os rótulos são adicionados além desta solução e devem explicar melhor apenas o contexto):
Nota
Se você estiver usando um Sistema de coordenadas geográficas , ou seja, se estiver lidando com graus e não com distâncias, deve ser suficiente usar os valores adequados quando usei uma distância nas fórmulas anteriores. As distâncias que usei são:
- 300 m (consulte Geometry Generator No. 1);
- 200 m (consulte Geometry Generator No. 2);
- 2000 m (consulte Geometry Generator No. 2);
assim você pode substituí-lo com outros valores arbitrários expressas em graus (por exemplo, 0.0002
, 0.002
e assim por diante).
Bônus
Anexei o estilo aqui : você pode abrir esse código com qualquer editor de texto e salvá-lo como um arquivo de estilo de camada QGIS (ou seja, com uma .qml
extensão).
O estilo acima foi criado usando o QGIS 2.18.4 (ele deve ter o mesmo nome do shapefile que você está usando).