17.6. CRSS。重新投影

备注

在本课中,我们将讨论处理如何使用CRSS。我们还将看到一个非常有用的算法:重新投影。

CRS对于QGIS处理用户来说是一个很大的困惑来源,所以这里有一些关于地理算法在创建新图层时如何处理它们的一般规则。

  • 如果有输入层,它将使用第一层的CRS。假设这是所有输入层的CRS,因为它们应该具有相同的CRS。如果您使用具有不匹配CRS的层,QGIS会就此向您发出警告。请注意,输入层的CRS与其名称一起显示在参数对话框中。

../../../_images/crs_layer.png
  • 如果没有输入图层,它将使用项目CRS,除非算法包含特定的CRS字段(就像上一课中使用经纬网算法时发生的那样)

打开与本课对应的项目,您将看到名为23030和4326的两个层。它们都包含相同的点,但在不同的CRS中(EPSG:23030和EPSG:4326)。它们出现在同一位置是因为QGIS正在动态地重新投影到项目CRS(EPSG:4326),但它们实际上不是同一层。

打开 Export/Add geometry columns 算法。

../../../_images/add_geom.png

该算法将新列添加到矢量层的属性表中。柱的内容取决于层的几何图形类型。对于点,它使用每个点的X和Y坐标添加新列。

在您将在输入层字段中找到的可用层列表中,您将看到每个层及其对应的CRS。这意味着,尽管它们出现在画布中的同一位置,但它们将得到不同的处理。选择4326层。

该算法的另一个参数允许设置该算法如何使用坐标来计算它将添加到结果层的新值。大多数算法没有这样的选项,只是直接使用坐标。选择 Layer CRS 选项以仅按原样使用坐标。几乎所有的地理算法都是这样工作的。

你应该会得到一个与其他两个层完全相同的点的新层。如果您右击该层的名称并打开其属性,您将看到它与输入层共享相同的CRS,即EPSG:4326。将该层加载到QGIS中时,不会要求您输入该层的CRS,因为QGIS已经知道它。

如果打开新层的属性表,您将看到它包含两个新字段,每个点的X和Y坐标。

../../../_images/attribs2.png

这些坐标值是在层CRS中给出的,因为我们选择了该选项。但是,即使您选择其他选项,层的输出CRS也将是相同的,因为输入CRS用于设置输出层的CRS。选择另一个选项将导致值不同,但不会改变结果点,也不会使输出层的CRS与输入层的CRS不同。

现在使用另一层进行相同的计算。您应该会发现生成的层呈现在与其他层完全相同的位置,并且它将具有EPSG:23030 CRS,因为这是输入层之一。

如果您转到它的属性表,您将看到与我们创建的第一层中的值不同的值。

../../../_images/attribs.png

这是因为原始数据不同(它使用不同的CRS),而这些坐标取自它。

你应该从中学到什么?这些示例背后的主要思想是,地理算法使用其原始数据源中的层,并完全忽略QGIS在渲染之前可能进行的重新投影。换句话说,不要相信您在画布中看到的东西,但要始终记住将使用原始数据。在这种情况下,这并不那么重要,因为我们一次只使用一个层,但在需要几个层的算法中(如裁剪算法),看起来匹配或覆盖的层可能彼此相距很远,因为它们可能具有不同的CRS。

算法不执行重投影(除了我们接下来将看到的重投影算法),因此要由您来确保层具有匹配的CRS。

处理CRS的一个有趣的模块是重新投影模块。它代表一种特殊情况,因为它有一个输入层(要重新投影的那个层),但它不会将其CRS用于输出层。

打开 Reproject layer 算法。

../../../_images/reprojection.png

选择任意层作为输入,并选择epsg:23029作为目标CRS。运行该算法,您将得到一个新的层,与输入的层相同,但具有不同的CRS。它将出现在画布的相同区域上,就像其他区域一样,因为QGIS会动态地重新投影它,但它的原始坐标不同。您可以通过运行 Export/Add geometry columns 算法使用这个新的层作为输入,并且发现添加的坐标与我们之前计算的两个层的属性表中的坐标不同。