geopandas.GeoSeries.snap#

GeoSeries.snap(other, tolerance, align=None)[来源]#

将输入的几何图形对齐到参考几何图形的顶点。

第一个几何体的顶点被固定到第二个几何体的顶点,返回一个新的几何体;输入的几何体不会被修改。结果几何体是将顶点固定后的输入几何体。如果没有发生固定,则返回未变化的输入几何体。公差用于控制固定操作的执行位置。

在可能的情况下,此操作尝试避免创建无效几何形状;但是,它不保证输出的几何形状是有效的。检查和处理无效几何形状的责任在于调用者。

因为过多的捕捉可能导致创建无效的几何图形,因此使用启发式方法来确定可能安全的捕捉顶点的数量和位置。这些启发式方法可能会省略一些在公差内的潜在捕捉。

该操作以一对一的行方式进行:

../../../_images/binary_op-01.svg
Parameters:
otherGeoSeries or geometric object

要对齐的Geoseries(逐元素)或几何对象。

tolerancefloat or array like

要进行捕捉的顶点之间的最大距离

alignbool | None (default None)

如果为真,则根据其索引自动对齐GeoSeries。 如果为假,则保留元素的顺序。 None默认为真。

Returns:
GeoSeries

示例

>>> from shapely import Polygon, LineString, Point
>>> s = geopandas.GeoSeries(
...     [
...         Point(0.5, 2.5),
...         LineString([(0.1, 0.1), (0.49, 0.51), (1.01, 0.89)]),
...         Polygon([(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)]),
...     ],
... )
>>> s
0                               POINT (0.5 2.5)
1    LINESTRING (0.1 0.1, 0.49 0.51, 1.01 0.89)
2       POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))
dtype: geometry
>>> s2 = geopandas.GeoSeries(
...     [
...         Point(0, 2),
...         LineString([(0, 0), (0.5, 0.5), (1.0, 1.0)]),
...         Point(8, 10),
...     ],
...     index=range(1, 4),
... )
>>> s2
1                       POINT (0 2)
2    LINESTRING (0 0, 0.5 0.5, 1 1)
3                      POINT (8 10)
dtype: geometry

我们可以将每个几何体对齐到一个单一的 shapely 几何体:

../../../_images/binary_op-03.svg
>>> s.snap(Point(0, 2), tolerance=1)
0                                     POINT (0 2)
1      LINESTRING (0.1 0.1, 0.49 0.51, 1.01 0.89)
2    POLYGON ((0 0, 0 2, 0 10, 10 10, 10 0, 0 0))
dtype: geometry

我们还可以将两个GeoSeries逐行对齐。 上面的GeoSeries具有不同的索引。 我们可以基于索引值对齐两个GeoSeries,并使用 align=True 将具有相同索引的元素对齐,或者忽略索引并基于它们的匹配顺序使用 align=False 对齐元素:

../../../_images/binary_op-02.svg
>>> s.snap(s2, tolerance=1, align=True)
0                                                 None
1           LINESTRING (0.1 0.1, 0.49 0.51, 1.01 0.89)
2    POLYGON ((0.5 0.5, 1 1, 0 10, 10 10, 10 0, 0.5...
3                                                 None
dtype: geometry
>>> s.snap(s2, tolerance=1, align=False)
0                                      POINT (0 2)
1                   LINESTRING (0 0, 0.5 0.5, 1 1)
2    POLYGON ((0 0, 0 10, 8 10, 10 10, 10 0, 0 0))
dtype: geometry