如果您只想使用符号系统,那么我将提出一个解决方案,该解决方案的灵感来自我对类似问题的回答:在QGIS中创建扇形灯?。
按照类似的方法,并假设您正在使用“计划的CRS”(相反,如果使用的是“地理坐标系”,请参见答案末尾的注释),我想强调一下,我将重点放在说明上再现所需结果的最小工作量:这意味着您应该容易地调整一些其他次要参数(例如大小,宽度等),以更好地满足您的需求。
此外,我假设这"AZIMUTH"
是存储方位角值"BEAMWIDTH"
的字段,并且是存储天线波束宽度的字段。
解
我们将Single symbol
通过重复一个Simple Marker
和两个Geometry generator
符号层来使用和渲染点:
在进一步的说明中,我将遵循上图中符号的相同顺序。
1)简单标记
我选择了一个红色圆圈的默认符号(这是本教程中比较容易的部分),其大小为3毫米,宽度为0.4毫米。
2)1号几何生成器
添加一个新的符号层,然后选择Geometry generator
和LineString / MultiLineString
类型:
将此表达式插入Expression
字段:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
我们刚刚定义了指向方位角集的箭头(要创建箭头,请记住在主符号菜单Arrow
的Line
选项下选择符号图层类型)。请注意,300
该距离代表以米为单位的距离,它是一个任意值,请随时根据需要进行更改。
3)2号几何生成器
添加一个新的符号层并选择Geometry generator
类型和Polygon / MultiPolygon
类型:
将此表达式插入Expression
字段:
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
我们刚刚定义了部门。请注意,200
并且2000
以米为单位表示距离,它们是任意值,因为我正试图创建一个与半径为200 m的圆相交的多边形,因此可以根据需要随意更改它们。
最后结果
如果您正确执行了先前的任务,则应该能够获得类似以下的结果(标签是在此解决方案之外添加的,它们只能更好地说明上下文):
注意
如果您使用的是地理坐标系,即您正在处理度数而不是距离,那么当我在先前公式中使用距离时,使用适当的值就足够了。我使用的距离是:
- 300 m(参见1号几何发生器);
- 200 m(见2号几何发生器);
- 2000 m(见2号几何发生器);
所以你可以在度表示其他任意值替换它(例如0.0002
,0.002
等)。
奖金
我在此处附加了样式:您可以使用任何文本编辑器打开此代码,并将其另存为QGIS图层样式文件(即带有.qml
扩展名)。
上面的样式是使用QGIS 2.18.4创建的(必须具有与您使用的shapefile相同的名称)。