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'