File size: 1,485 Bytes
84e78bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import pandas as pd
import shapely

def get_neighbors(geometries):
    """
    Find neighbors for all geometries.

    Args:
        geometries (str): list of Polygon coordinates
    Returns:
        pandas.core.series.Series: Pandas DataFrame Series (column) containing indexes of bordering polygons.
    """

    if not all(isinstance(geom, (shapely.MultiPolygon, shapely.Polygon, str)) for geom in geometries) or not isinstance(geometries, (list, pd.Series)):
        raise ValueError("geometries must be a list with shapely.MultiPolygons/shapely.Polygon or strings of MultiPolygons/Polygons")

    out_col = []

    if type(geometries[0]) in [shapely.MultiPolygon, shapely.Polygon]:
        for r in range(geometries.shape[0]):
            out_col.append([])

            for i in range(geometries.shape[0]):
                if not r == i:
                    if geometries[r].intersects(geometries[i]):
                        out_col[r].append(i)
        
        return(out_col)

    if type(geometries[0]) == str:
        geometries = shapely.wkt.loads(geometries)
        for r in range(geometries.shape[0]):
            out_col.append([])

            for i in range(geometries.shape[0]):
                if not r == i:
                    if geometries[r].intersects(geometries[i]):
                        out_col[r].append(i)

        return(out_col)
    
    raise ValueError("geometries must be a list with shapely.MultiPolygons or strings of MultiPolygons or Polygons")