Questions tagged «pyqgis»

QGIS的Python绑定。

3
在PyQGIS中并行进行GIS操作?
GIS中的一个常见要求是将处理工具应用于多个文件,或者将一个文件中多个特征的处理应用于另一个文件。 这些操作中的许多操作都是令人尴尬地并行的,因为计算结果绝不会影响循环中的任何其他操作。不仅如此,而且输入文件通常每个都是不同的。 一个典型的例子就是将形状文件与包含多边形的文件进行平铺。 这是一个(经过测试的)经典过程方法,可通过QGIS的python脚本实现。(将临时内存文件输出为真实文件的时间比处理我的测试文件的时间减少了一半以上) import processing import os input_file="/path/to/input_file.shp" clip_polygons_file="/path/to/polygon_file.shp" output_folder="/tmp/test/" input_layer = QgsVectorLayer(input_file, "input file", "ogr") QgsMapLayerRegistry.instance().addMapLayer(input_layer) tile_layer = QgsVectorLayer(clip_polygons_file, "clip_polys", "ogr") QgsMapLayerRegistry.instance().addMapLayer(tile_layer) tile_layer_dp=input_layer.dataProvider() EPSG_code=int(tile_layer_dp.crs().authid().split(":")[1]) tile_no=0 clipping_polygons = tile_layer.getFeatures() for clipping_polygon in clipping_polygons: print "Tile no: "+str(tile_no) tile_no+=1 geom = clipping_polygon.geometry() clip_layer=QgsVectorLayer("Polygon?crs=epsg:"+str(EPSG_code)+\ "&field=id:integer&index=yes","clip_polygon", "memory") clip_layer_dp = clip_layer.dataProvider() clip_layer.startEditing() clip_layer_feature …

1
如何将颜色样式复制到图层的属性表中的颜色列?
我在QGIS中有一个多边形图层,已为每个多边形应用了随机的颜色样式。在“图层属性->样式”下,我选择了“分类样式”,然后生成了一个随机的颜色渐变。我在图层表中添加了颜色列。有没有一种方法可以自动将样式中分配的颜色以“#ff0000”形式复制到每个多边形的颜色列中。 最终,我想将其导出为GeoJSON图层,并将其导入到传单地图中。颜色列将在传单中设置颜色。
15 qgis  leaflet  pyqgis  style 

2
为电信塔创建部门?
我从事移动网络行业,承担了为QGIS创建插件的任务,该插件c++/python执行以下操作: 步骤1:根据每个塔的纬度/经度创建与每个移动塔相对应的点(本部分已经完成) 步骤2:进一步:扇区化:这些塔中的每一个都将具有面向不同方位角的天线。所以我需要为每个天线方向创建一个符号(最终看起来像是花朵中的花瓣或向内的三角形) 步骤3:当我单击任何扇区时,应以某种方式突出显示面向该扇区的所有附近扇区(以便我可以找到邻居) 我必须从一个大的excel文件开始,该文件包含扇区名称,纬度,经度,天线方向等。 有人有意见吗?

1
在PyQGIS中按名称获取图层?
我有一个插件,可以找到城市列表的缓冲区,并提供距离。州和城市名称取自属性表,并进行相应过滤。我想要的是,我的插件应标识画布中该图层的层名称或顺序,而不管画布中是否存在其他图层,并从该图层访问相应的属性。 我也很好奇,尽管存在其他一些层,但是在代码中指向特定的层名称是否会导致迭代错误? 以下是我的代码,请告诉我应该在哪里进行更改,这将是什么更改? if dist and centerCity: #QMessageBox.information(self.dlg, "info", "both True") st = '"name" = \'' + centerCity + '\'' exp = QgsExpression(st) else: QMessageBox.warning(self.dlg, "Enter the distance","Enter the distance and try again.") return #terminate the function layer = self.iface.activeLayer() it = layer.getFeatures(QgsFeatureRequest(exp)) feature = it.next() mbuf = feature.geometry().buffer(dist, 2) …

1
向QGIS Desktop应用程序添加新菜单项?
我需要在QGIS Desktop(2.7.0)的顶层菜单中添加新菜单项;即,它应与“项目”,“编辑”,“视图”,“层”等处于同一级别。 据我所知,有一种非常好的方式如何使用QgisInterface(http://qgis.org/api/classQgisInterface.html)隐藏菜单项(“设置”->“自定义”)加上我可以向已经在QGIS中定义的菜单中添加新项(我的插件代码中的addLayerMenu,addPluginToDatabaseMenu等)。 但是我需要顶层的新菜单项(这是客户的要求)。
14 qgis  pyqgis  qt  gui  context-menu 


6
PyCharm 2019不再与QGIS一起使用
自从PyCharm 2019更新以来,我无法加载QGIS Python模块。我也不能使用自动完成功能。我已经删除了缓存(通过使PyCharm中的缓存无效并且还通过删除用户设置目录中的“ system”文件夹),似乎没有任何作用。 在PyCharm中启动Python控制台并键入“ import qgis.core”时,出现以下错误: Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import module = self._system_import(name, *args, **kwargs) File "C:\OSGEO4~1\apps\qgis-ltr\python\qgis\core\__init__.py", line 27, in <module> from qgis._core import * File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line …

1
是否从QGIS测量工具获得距离?
我已经建立了一个插件来为Spatialite数据库提供输入掩码。有两个字段代表对象的最小/最大尺寸。 当我iface.actionMeasure().trigger()用两个按钮“ Measure” 调用“测量工具”()时,单击尺寸,然后用键盘将值键入字段(QLineEdit)。 使用“测量工具”右键单击(完成测量)后,是否有可能将值自动提交到该字段(最小或最大,QLineEdit)? 通话计量工具(有效) 左键单击:开始测量 4.一次:右键单击并将“测量工具的总值”提交到最小值字段(QLineEdit)。 更新1: 问了这个问题的一天后,我想到了一个线串层,可以用作测量工具(ST_Length(geom))。优点是您可以完全控制操作并从中获取数据。缺点是项目中的附加层。 工作流程可以是: 单击测量:切换编辑,激活“添加功能” 创建代表对象最小尺寸的线串 确认更改,计算线串的长度(ST_Length(geom)),将长度提交给QLineEdit 关闭对话框并删除线串(DELETE FROM) 但是我的实际问题仍然存在。有没有办法直接从测量工具获取距离值? 更新2: 在Jakob的帮助下,我可以使用Measure Tool的Total值更新QLineEdit,直到关闭Measure Tool。然后将该值设置为“ 0,000 m”。我通过使用以下方法解决了这个问题: def text_changed(str_measure): if str_measure == '0,000 m': pass else: self.min.setText(str_measure) 它可以工作,但是我不知道这是否是正确的解决方案。

1
如何在“图层”面板中使图层或组不可见?
我在一个小组内的“ 层”面板中有许多层,但我不希望它们显示出来(有很多层,所以看起来很不整洁)。这些层也连接到其他几个层。 是否可以使这些图层对用户不可见(即,在“图层面板”中未显示,这与设置图层的可见性无关),但仍可以与其他图层连接?还是使该小组不可见? 我最近发现的是这篇文章,但希望有更直接的方法: 仅显示QGIS图例中的某些图层?

5
如何在QGIS中将道路网络捕捉到六边形网格?
我正在尝试使用QGIS 2.14将道路网络捕捉到六边形网格中,但出现了奇怪的伪像。 我用MMQGIS创建了一个十六进制网格,单元大约为20 x 23 m。我已经将公路网缓冲了1m并进行了密实处理,因此每隔几米就有一个节点。您可以在下面查看我要实现的目标。如您所见,在某些情况下,我可以使其工作:- 蓝色是致密路(缓冲线) 红色是“十六进制”版本-这是我要查找的 灰色是十六进制网格 然后,我使用了新的“ 捕捉几何”功能将节点捕捉到最近的六角形角。结果令人鼓舞,但似乎在某些极端情况下,线扩展以填充六边形(或其一部分): 使用缓冲区的原因是,“ 捕捉几何”不允许您捕捉到几何不同的图层。例如,您不能将LINE层上的节点捕捉到POINT层上的点)。将POLYGON抢购到POLYGON似乎是最快乐的。 我怀疑当缓冲的道路线的一侧跳到十六进制单元的一侧,而另一侧跳到十六进制单元的另一侧时,道路会扩展。在我的示例中,以锐角横穿东西的道路似乎是最糟糕的。 我尝试过的事情没有成功: 仅对道路网进行少量缓冲,因此它仍然是多边形,但非常薄。 使十六进制单元致密(因此沿边缘有节点,而不仅仅是在角落) 改变最大捕捉距离(这具有最大的作用,但是我似乎找不到理想的值) 使用线层,而不是多边形 我发现如果更改为仅使用LINE图层,它会工作一段时间,然后崩溃。它似乎可以保存它的工作-有些行已被部分处理。 有谁知道其他方法可以将一条线上的点捕捉到另一条线/多边形图层上的最近点,理想情况下无需使用postgres / postgis(尽管也欢迎使用postgis解决方案)? 编辑 对于任何想去的人,我都在Dropbox上放置了一个入门QGIS项目。这包括“十六进制网格”和“密实线”层。(道路网来自OSM,因此可以使用QuickOSM下载,例如,如果您需要获取原始文件以使道路致密化)。 请注意,它位于OSGB(epsg:27700)中,这是英国的本地化UTM,以米为单位。

1
如何访问已删除的功能属性(提交之前)
我为图层上的功能删除事件设置了信号: self.layer.featureDeleted.connect(self.feature_deleted) 当我尝试从插槽上已删除的功能中获取属性时,会引发StopIteration错误(即,它无法检索该功能)。 我以为在提交对图层的更改之前,我仍然应该能够从已删除的要素中检索属性?否则,我看不到fid参数的用途。 def feature_deleted(self, fid): feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next() idx = self.layer.fieldNameIndex('my_attribute') print feature.attributes()[idx] 我如何访问已删除要素的属性(在提交对图层的更改之前)?

2
从QGIS的Python控制台调用插值插件
我想从python控制台调用QGIS插值插件功能(TIN方法)(Raster-> Interpolate)。 我在QGIS API或处理算法列表中找不到相应的功能。我发现SAGA三角剖分算法可以正常工作,但速度要慢5-10倍,而速度对我而言很重要。 知道如何执行吗?

2
如何在pyqgis 2.0中获取字段名称
我正在尝试将插件从QGIS 1.8更改为2.0。在1.8版本中,我创建了一个字段名称表,如下所示: layer = vlayer provider = layer.dataProvider() feat = QGSFeatrue() allAttrs = provider.attributeIndexes() provider.select(allAttrs) fieldNames = [] while provider.nextFeature(feat) fields = layer.pendingFields() for (k, field) in fields.iteritems(): fieldNames.append(field.name()) 我尝试使用2.0版本 layer = vlayer fieldNames = [] for feature in layer.getFeatures(): fields = layer.pendingFields() for (k, field) in fields.iteritems(): fieldNames.append(field.name()) 但是,pendingFields()对我不起作用。现在是否有一种获取字段名称的新方法?
13 python  pyqgis  qgis-2 

2
如何在QGIS 1.9中以编程方式创建要素并将其添加到存储层?
我在QGIS 1.8中有一个工作正常的插件,该插件从MSAccess数据库读取数据并将其添加到一系列内存层中。过渡过程中涉及一些处理,因此我不认为仅使用QGIS直接从数据库读取是一种选择。 我想从QGIS 1.8升级到1.9(主要是因为打印作曲家的素质得到了提高)。该插件不适用于新的API。 我尝试了Google搜索中出现的各种方法。一种,修改以下代码-来自http://www.qgis.org/pyqgis-cookbook/vector.html#memory-provider,即向数据提供者添加几何形状和属性,然后更新层-以适应新的API有点,但是直到我手动进入编辑模式(类似于http://hub.qgis.org/issues/3713),属性才可见。在上述链接的回复#1中详细介绍了一种替代方法,该方法正确添加了图层和属性,但无法向图层添加要素。 鉴于这应该是一个非常简单的任务,所以我希望在座的人可以提供一个如何完成此工作的示例。(附言:我不是专业的程序员,我的大多数编码都还很粗糙-我欢迎任何指导,但请您原谅我的无知) # Receivers = a list of lists returned from a database query # create layer vl = QgsVectorLayer("Point", item, "memory") pr = vl.dataProvider() # add fields pr.addAttributes( [ QgsField("Rec_No", QVariant.Int), QgsField("Include", QVariant.String), QgsField("Label", QVariant.String), QgsField("X", QVariant.Double), QgsField("Y", QVariant.Double), QgsField("Z", QVariant.Double), QgsField("Height", QVariant.Double), QgsField("Project_Re", QVariant.String), …

1
如何使用背景框创建文本标签?
我正在尝试为QGIS点矢量层中的点要素创建一些自定义标签,并且我想编写一个python插件来做到这一点。我们需要在标签后面显示带有彩色矩形的标签(否则!)。标签是长字符串,并且使用标签引擎表达式和条件创建。 我认为最简单的方法是让用户以他们想要的方式为活动层设置标签,然后让我的插件从该层的要素中获取标签文本,然后使用文本字符串创建框。我的问题是我找不到在QGIS API中访问这些文本字符串的方法。标签引擎如何将标签字符串生成的标签字符串存储在QGIS中,如何获取它们?
13 qgis  pyqgis  labeling 

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.