我正在创建虚拟地图,因此我需要创建许多点,线和确定的多边形。稍后,我将数据导出为geojson。但是在此之前,我必须离开并给每个元素一个唯一的ID。
我不需要特殊的排序,例如最大的多边形得到的ID最小。我只是需要所有多边形 与一个ID结尾,没有 做它手动像我现在要做的。
如果有人知道该怎么做会很棒。
我正在创建虚拟地图,因此我需要创建许多点,线和确定的多边形。稍后,我将数据导出为geojson。但是在此之前,我必须离开并给每个元素一个唯一的ID。
我不需要特殊的排序,例如最大的多边形得到的ID最小。我只是需要所有多边形 与一个ID结尾,没有 做它手动像我现在要做的。
如果有人知道该怎么做会很棒。
Answers:
使用字段计算器是一种方法:
哈利路亚!或尤里卡。管他呢。可以做到的。带有shapefile。
maximum("FID") + 1
。取消选中Editable,您将无法输入其他值或删除其中的内容。请注意,如果有些值没有ID,则不会更新这些值。在某些时候,我将尝试检查“ 在更新时应用默认值”并修改公式以检查零或NULL值,以便仅在编辑记录时更新那些记录,而不是任何值大于1的记录。(在此早期版本)帖子中讨论了如何使用唯一值更新FID字段,如果在shapefile中已经包含特征之后添加该字段,则需要执行此操作。)
请注意,这是与当前地图文件(而不是shapefile)一起保存的,因此要多次添加该shapefile,将需要将图层样式的该部分复制到新添加的图层中。为此,请右键单击图层,选择“样式”>“复制样式”>“字段”,然后右键单击另一层,选择“样式”>“粘贴样式”>“所有样式类别”(或继续至“ 字段”)。您还可以根据shapefile将样式的该部分复制到其他任何层,但是ID字段必须与要复制的层具有相同的名称。
我想添加到vinayan的帖子中,并简要提到rownum函数,因为它非常相似,在某些情况下可能更方便一些。
id返回功能部件ID,这意味着它始终从零开始。
rownum返回行号,这意味着它从 1开始。
因此,基本上,如果您希望自动递增从0开始,则使用$ id;如果希望自动递增从1开始,则选择$ rownum。
这里出现了这个主题:在QGIS中使用自动增量主键创建Shapefile
我的建议是:
1)SQLITE / SpatialLite数据库支持在设置为INTEGER PRIMARY KEY的字段上自动递增:
在INSERT上,如果未明确为ROWID或INTEGER PRIMARY KEY列提供值,则将自动用未使用的整数填充该整数,通常比当前使用的最大ROWID多一个整数。无论是否使用AUTOINCREMENT关键字,都是如此。
每次编辑/创建多边形时,您都可以填写其属性,而SQLITE会在您设置为INTEGER PRIMARY KEY类型的字段中为其提供递增的唯一值。
准备导出到GEOJSON时,都已设置好UNIQUE ID。
2)如果使用Shapefile,则每次编辑/创建多边形并需要将其导出时,都创建INTEGER类型的OBJECTID字段,并使用字段计算器表达式填充该字段。您将失去一个多边形曾经拥有的原始ID,但这是使用.SHP来实现此目标的唯一方法。(我将不得不找到字段计算器表达式)。
PostGIS是您可能想探索的另一个数据源,尽管它比SQLITE更为繁重,但随着前进,您可能会在这样的系统中发现价值...
我想补充一点,当您使用postgreSQL数据库层时,这似乎不起作用。$ ID和$ rownum都返回0。PostgreSQL 9.6 QGIS 2.18.12