geopandas.GeoSeries.relate_pattern#
- GeoSeries.relate_pattern(other, pattern, align=None)[source]#
Returns True if the DE-9IM string code for the relationship between the geometries satisfies the pattern, else False.
This function compares the DE-9IM code string for two geometries against a specified pattern. If the string matches the pattern then
True
is returned, otherwiseFalse
. The pattern specified can be an exact match (0
,1
or2
), a boolean match (uppercaseT
orF
), or a wildcard (*
). For example, the pattern for thewithin
predicate is'T*F**F***'
The operation works on a 1-to-1 row-wise manner:
- Parameters:
- otherBaseGeometry or GeoSeries
The other geometry to be tested agains the pattern.
- patternstr
The DE-9IM pattern to test against.
- alignbool | None (default None)
If True, automatically aligns GeoSeries based on their indices. If False, the order of elements is preserved. None defaults to True.
- Returns:
- Series
Examples
>>> from shapely.geometry import Polygon, LineString, Point >>> s = geopandas.GeoSeries( ... [ ... Polygon([(0, 0), (2, 2), (0, 2)]), ... Polygon([(0, 0), (2, 2), (0, 2)]), ... LineString([(0, 0), (2, 2)]), ... LineString([(2, 0), (0, 2)]), ... Point(0, 1), ... ], ... ) >>> s2 = geopandas.GeoSeries( ... [ ... Polygon([(0, 0), (1, 1), (0, 1)]), ... LineString([(1, 0), (1, 3)]), ... LineString([(2, 0), (0, 2)]), ... Point(1, 1), ... Point(0, 1), ... ], ... index=range(1, 6), ... )
>>> s 0 POLYGON ((0 0, 2 2, 0 2, 0 0)) 1 POLYGON ((0 0, 2 2, 0 2, 0 0)) 2 LINESTRING (0 0, 2 2) 3 LINESTRING (2 0, 0 2) 4 POINT (0 1) dtype: geometry
>>> s2 1 POLYGON ((0 0, 1 1, 0 1, 0 0)) 2 LINESTRING (1 0, 1 3) 3 LINESTRING (2 0, 0 2) 4 POINT (1 1) 5 POINT (0 1) dtype: geometry
We can check the relate pattern of each geometry and a single shapely geometry:
>>> s.relate_pattern(Polygon([(0, 0), (1, 1), (0, 1)]), "2*T***F**") 0 True 1 True 2 False 3 False 4 False dtype: bool
We can also check two GeoSeries against each other, row by row. The GeoSeries above have different indices. We can either align both GeoSeries based on index values and compare elements with the same index using
align=True
or ignore index and compare elements based on their matching order usingalign=False
:>>> s.relate_pattern(s2, "TF******T", align=True) 0 False 1 False 2 True 3 True 4 False 5 False dtype: bool
>>> s.relate_pattern(s2, "TF******T", align=False) 0 False 1 True 2 True 3 True 4 True dtype: bool