Esta es una adición a la respuesta de @Kadir (que funciona muy bien).
Por un lado, en lugar de utilizar not disjoint
puede utilizar touches
directamente, que hace lo mismo pero es más fácil de leer.
Si, como pregunta el OP, quieres buscar internamente para encontrar todas las geometrías vecinas en un único GeoDataFrame:
for index, row in df.iterrows():
neighbors = df[df.geometry.touches(row['geometry'])].name.tolist()
neighbors = neighbors.remove(row.name)
df.at[index, "my_neighbors"] = ", ".join(neighbors)
Para una función relacionada, es posible que desee determinar si cada fila de un DataFrame bordea alguna otra forma en particular, potencialmente de un DataFrame diferente o de algún valor de entrada (convertido en un GeoDataFrame).
someSpecialGeometry = GEOdataframeRow['geometry'].values[0]
df['isNeighbor'] = df.apply(lambda row: row['geometry'].touches(someSpecialGeometry), axis=1)
Esto crea una columna con valores booleanos para saber si cada fila bordea la forma de interés.
0 votos
Por favor, no se olvide de "¿Qué debo hacer cuando alguien responde a mi pregunta?"