在pyQGIS中缓冲?


17

我正在寻找一些示例来在QGIS中执行简单的python脚本。如何对数据集进行缓冲区分析?

在手册和QGIS python中,我似乎找不到与Esri文档完全匹配的内容。

Answers:


5

看一看PyQGIS Cookbook

按照有关如何遍历矢量层的示例进行操作。访问几何,可以应用buffer()方法。另请参见QGIS API:http://www.qgis.org/api/classQgsGeometry.html#a98208752e1beb1a5d3a7eedffbfdb2e4


12

您可以通过不同的方式通过PyQGIS控制台获得所需的内容:

  1. 阿拉贡的建议;
  2. 通过使用QgsGeometryAnalyzer类:
from qgis.utils import iface
from qgis.analysis import QgsGeometryAnalyzer 
mc = iface.mapCanvas() 
layer = mc.currentLayer()
QgsGeometryAnalyzer().buffer(layer, "path_to/output.shp", 500, False, False, -1)
  1. 通过使用Sextante类:
from sextante.core.Sextante import Sextante
Sextante.runalg("ftools:fixeddistancebuffer","input_path.shp", False, 500, 5, True, "output_path_buffer.shp")

要获取sextante参数,请Sextante.alghelp("ftools:fixeddistancebuffer")在PyQGIS控制台中输入。

希望这可以帮助 !


11

如果您需要基本代码,可以尝试:

#Don't forget to Toggle Editing

lyr = qgis.utils.iface.activeLayer()
provider = lyr.dataProvider()
feat= QgsFeature()
alls = provider.attributeIndexes()
provider.select(alls)

while provider.nextFeature(feat):
    buff = feat.geometry().buffer(5,2)
    lyr.dataProvider().changeGeometryValues({feat.id(): buff})

谢谢-QgsFeature是图层名称还是应该包含绝对路径?缓冲区(5,2)是那个距离吗?
GIS Danny

1
您也可以使用for循环执行此操作,也可以避免选择不需要的属性gist.github.com/4094707
Nathan W

1
@GISDanny QgsFeature是功能的容器类,例如QGIS中的属性和几何。该层是qgis.utils.iface.activeLayer()位,它将使用QGIS中的当前活动层。
内森·W

在Python中缓冲时是否可以指定单位?我一直在尝试缓冲一个点层,我相信我已经设置为一个以英尺为单位的CRS,但是我得到的缓冲区非常大-该点层最初是使用较长的绳子从csv导入的,但是当我创建一个矢量层时我指定了本地系统。显然是错误的。
kflaw 2015年

9

仅需添加一点即可添加到最后的回复中。

要搜索有关给定主题的SEXTANTE算法,请使用Sextante.alglist()。例如,在搜索包含“缓冲区”的内容时,您可以

>>> from sextante.core.Sextante import Sextante
>>> Sextante.alglist("buffer")

您会得到:

Grid Buffer------------------------------------------>saga:gridbuffer
Grid Proximity Buffer-------------------------------->saga:gridproximitybuffer
Shapes Buffer---------------------------------------->saga:shapesbuffer
Threshold Buffer------------------------------------->saga:thresholdbuffer
Fixed distance buffer-------------------------------->ftools:fixeddistancebuffer
Variable distance buffer----------------------------->ftools:variabledistancebuffer
r.buffer - Creates a raster map layer showing buffer zones surrounding cells that contain non-NULL category values.--->grass:r.buffer
v.buffer.angle--------------------------------------->grass:v.buffer.angl
v.buffer.column - Creates a buffer around features of given type.--->grass:v.buffer.column
v.buffer.distance - Creates a buffer around features of given type.--->grass:v.buffer.distance
v.buffer.minordistance------------------------------->grass:v.buffer.minordistance

这样,您可以找到要调用的算法的名称(ftools:fixeddistancebuffer,在以上回复中提出的示例中)

您可以在SEXTANTE中将脚本转换为新算法。SEXTANTE文档包含有关此内容的详细信息。


在您的sextante博客上值得一提的好提示。我昨天在找这个。
黑暗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.