2 votos

GeoPandas devuelve resultados de unión espacial incorrectos. ¿Problema con GDAL? ¿Problema con GEOS?

Tengo un problema que puedo reproducir en una instalación de Ubuntu de GeoPandas (0.3.0), pero no en mi instalación local de OS X (misma versión de geopandas). Este es el ejemplo (tomado de la documentación de geopandas):

import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
countries = world[['geometry', 'name']]
countries = countries.rename(columns={'name':'country'})
cities_with_country = gpd.sjoin(cities, countries, how="inner",  op='intersects')
cities_with_country.head()

El resultado correcto, como se muestra aquí y como se obtiene en mi instalación de OS X, es:

             name                                     geometry  index_right  \
0    Vatican City  POINT (12.45338654497177 41.90328217996012)           79
1      San Marino    POINT (12.44177015780014 43.936095834768)           79
192          Rome    POINT (12.481312562874 41.89790148509894)           79
2           Vaduz  POINT (9.516669472907267 47.13372377429357)            9
184        Vienna  POINT (16.36469309674374 48.20196113681686)            9

     country
0      Italy
1      Italy
192    Italy
2    Austria
184  Austria

Sin embargo, en mi instalación de Ubuntu, me sale esto:

      name                                     geometry  index_right  \
183  Kabul  POINT (69.18131419070505 34.51863614490031)            0
183  Kabul  POINT (69.18131419070505 34.51863614490031)            0
183  Kabul  POINT (69.18131419070505 34.51863614490031)            0

         country
183  Afghanistan
183  Afghanistan
183  Afghanistan

y len(cities_with_country) es sólo 3 . El mismo problema ocurre también con otros datos.

He comprobado todos los dependencias de la lista en ambas instalaciones y verifiqué que son las mismas versiones. Sin embargo, las versiones de GDAL son diferentes. La instalación de OS X que funciona correctamente tiene:

$> pip2 freeze | grep GDAL
GDAL==1.11.5

Mientras que la instalación de Ubuntu que funciona incorrectamente tiene:

$> pip2 freeze | grep GDAL
GDAL==2.2.2

Soy reticente a empezar a jugar con el downgrade de mi instalación de GDAL, así que espero que alguien pueda confirmar o refutar mi teoría de que geopandas depende (indirectamente) de GDAL y que la versión 2.2.2 podría estar causando el problema. ...y me pregunto si la única solución es el downgrade.

Después de revisar esto y buscar en el código de geopandas y shapely, parece más probable que esto esté relacionado con GEOS y no con GDAL, ¿verdad? Hasta donde puedo decir, ambas instalaciones están usando GEOS desde la rueda instalada con shapely. Ambas dan la misma cadena de versión de geos:

>>> import shapely
>>> shapely.geos.geos_version_string
'3.6.2-CAPI-1.10.2 4d2925d6'

3voto

Arctictern Puntos 85

Resulta que no es GDAL ni GEOS. Era rtree. Hice la misma pregunta sobre aquí en github y me sugirieron que comprobara la versión de rtree. La versión en Ubuntu era 0.8.2, y la versión en el Mac era 0.8.3. Actualicé a 0.8.3 en Ubuntu, y la unión espacial funcionó correctamente.

En concreto, el comando que utilicé para solucionar el problema fue:

pip2 install --upgrade --user rtree

Su solución podría ser diferente dependiendo de cómo instaló originalmente rtree.

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