geopandas.GeoSeries.snap#
- GeoSeries.snap(other, tolerance, align=None)[来源]#
将输入的几何图形对齐到参考几何图形的顶点。
第一个几何体的顶点被固定到第二个几何体的顶点,返回一个新的几何体;输入的几何体不会被修改。结果几何体是将顶点固定后的输入几何体。如果没有发生固定,则返回未变化的输入几何体。公差用于控制固定操作的执行位置。
在可能的情况下,此操作尝试避免创建无效几何形状;但是,它不保证输出的几何形状是有效的。检查和处理无效几何形状的责任在于调用者。
因为过多的捕捉可能导致创建无效的几何图形,因此使用启发式方法来确定可能安全的捕捉顶点的数量和位置。这些启发式方法可能会省略一些在公差内的潜在捕捉。
该操作以一对一的行方式进行:
- 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 几何体:
>>> 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对齐元素:>>> 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