7 votos

Advertencia/error extraño al trabajar con polígonos

Leyendo un shapefile de polígonos con geopandas me sale un error extraño. Descubrí que es una advertencia normalmente oculta sobre otro error, que sólo vi porque convertí las advertencias en errores. También aparece al crear un GeoDataFrame:

import geopandas as gpd
from shapely.geometry import Polygon
import random

import warnings
warnings.filterwarnings('error')

geoms = [Polygon(
    (random.random(), random.random())
        for p in range(10)) for id in range(10)]
gdf = gpd.GeoDataFrame(geometry=geoms)

La salida:

Traceback (most recent call last):
  File "C:\Daten2\Anaconda\lib\site-packages\shapely\geometry\polygon.py", line 300, in __array_interface__
    raise NotImplementedError(
NotImplementedError: A polygon does not itself provide the array interface. Its rings do.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "error.py", line 11, in <module>
    gdf = gpd.GeoDataFrame(geometry=geoms)
  File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 167, in __init__
    self.set_geometry(geometry, inplace=True)
  File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 295, in set_geometry
    level = _ensure_geometry(level, crs=crs)
  File "C:\Daten2\Anaconda\lib\site-packages\geopandas\geodataframe.py", line 43, in _ensure_geometry
    out = from_shapely(data, crs=crs)
  File "C:\Daten2\Anaconda\lib\site-packages\geopandas\array.py", line 168, in from_shapely
    return GeometryArray(vectorized.from_shapely(data), crs=crs)
  File "C:\Daten2\Anaconda\lib\site-packages\geopandas\_vectorized.py", line 142, in from_shapely
    aout[:] = out
DeprecationWarning: An exception was ignored while fetching the attribute `__array_interface__` from an object of type 'Polygon'.  With the exception of `AttributeError` NumPy will always raise this exception in the future.  Raise this deprecation warning to see the original exception. (Warning added NumPy 1.21)

El aviso se produce en la línea

aout[:] = out

de un módulo geopandas. out es una lista de shapely.geometry.polygon.Polygon, mientras que aout es un array numpy de la misma longitud con dtype object, que contiene Nones.

Así que tengo curiosidad por saber qué está pasando aquí.

6voto

King Puntos 118

No se trata de un error del usuario. Es el resultado de un cambio reciente en Numpy 1.21 junto con la forma en que shapely implementa (más bien no implementa) __array_interface__ . No hay nada que el usuario deba hacer, se arreglará en la próxima versión de shapely (ver https://github.com/Toblerity/Shapely/pull/1174 ). Puedes silenciar estos avisos si lo deseas y mantenerte atento al asunto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X