Bonjour,
Lorsque j'utilise shapely.ops.cascaded_union
, je rencontre cette erreur :
Assertion failed: (0), function query, file AbstractSTRtree.cpp, line 285.
Abort trap: 6
Il semble que cela puisse être un problème de compatibilité avec GDAL (qui, je crois, utilise une version de GEOS). Voici un script qui échoue :
from osgeo import ogr
from shapely.geometry import Point
import shapely.ops
def synth_geom():
polygons = [
Point(1, 1).buffer(1),
Point(1, 2).buffer(1),
]
biggest_feature = shapely.ops.cascaded_union(polygons)
print biggest_feature
if __name__ == '__main__':
synth_geom()
J'ai remarqué que si je modifie l'ordre des instructions d'importation, cascaded_union fonctionne comme prévu.
from shapely.geometry import Point
import shapely.ops
from osgeo import ogr
Est-ce quelque chose qui peut ou devrait être abordé par Shapely ?
@phargogh as -tu pip install shapely
? Depuis décembre, sur OS X, vous obtiendrez une roue Shapely binaire si vous le faites et la roue comprend une bibliothèque partagée GEOS. Il est possible que ces roues Shapely ne soient pas compatibles avec la lib Homebrew GEOS et que des erreurs se produisent si la lib GEOS a déjà été chargée par osgeo.ogr.
J'ai une solution de contournement potentielle pour vous : faites un pip uninstall shapely && pip install --no-use-wheel shapely
. Cela récupérera la distribution source Shapely au lieu d'une roue binaire et cela ne devrait poser aucun problème avec GEOS de Homebrew.
Pouvez-vous me dire si cela vous sort de ce pétrin ?
Quelque chose à signaler sur une nouvelle installation à partir de la source @phargogh ?
Ouais! La nouvelle installation à partir de la source de la forme fonctionne comme prévu. Je suppose que cela devrait m'apprendre à être plus conscient des dépendances que j'ai installées et contre lesquelles je construis :)
J'avais le même problème et je l'ai résolu en important avant d'importer osgeo. Je n'ai pas eu besoin de faire le "pip install --no-use-wheel shapely". Juste pour référence future, quelqu'un pourrait-il expliquer ce qui se passe lorsque shapely est importé avant osgeo et pourquoi cela provoque l'erreur?
@dfelikson, veuillez consulter https://github.com/Toblerity/Shapely/issues/262. Je ne comprends pas encore exactement ce qui se passe. Des détails spécifiques (système d'exploitation, sources de logiciels -- Homebrew ? PyPI ? -- versions) seront nécessaires pour le traquer.
@sgillies, il y a certainement un problème avec Homebrew et la version à roues de Shapely. Je n'ai pas signalé le problème ici (bien que je n'aie pas importé Shapely avant osgeo) mais un problème complètement différent #273 qui a été résolu en utilisant pip uninstall shapely && pip install --no-use-wheel shapely
.
J'avais aussi ce problème, merci !
@sgillies que j'utilisais dans un truc pip install --no-use-wheel shapely
sans succès. J'ai ajouté cette ligne avant d'importer pyproj
juste pour vérifier que j'importais depuis le bon emplacement :
import shapely
shapely.__file__
Maintenant, cela fonctionne comme par magie... contrairement à @phargogh , je osgeo
alors peut-être que cela éclaire un peu plus le sujet ?
@sgillies J'ai fait quelques recherches et j'ai
Voici mon cahier :
Lors de l'exécution de la ligne :
combined = g2.intersection(g3)
le noyau va planter et Jupyter renvoie l'erreur :
Assertion failed: (0), function query, file AbstractSTRtree.cpp, line 285.
Abort trap: 6
Une solution possible était de réinstaller Shapely à partir de la source :
pip uninstall shapely && pip install --no-binary :all: shapely
mais la suggestion de @guziy sur https://github.com/geoplex/elasticsearch-spatial/issues/1 m'a amené à me demander, alors j'ai essayé de remplacer la ligne d'importation fiona.
%load_ext watermark
%watermark
2017-01-05T11:44:44
CPython 2.7.11
IPython 5.1.0
compiler : GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)
system : Darwin
release : 15.6.0
machine : x86_64
processor : i386
CPU cores : 8
interpreter: 64bit
%%sh
pip uninstall -y shapely # remove the shapely from the virtualenv and use the global package
import shapely
shapely.__file__ # returns '/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages/shapely/__init__.pyc'
import fiona # <--- doesn't crash when commented out
from shapely.geometry import shape
scene_metadata = {u'geometry': {u'coordinates': [[[5.4438, 30.7100517],
[6.2335518, 30.6927744],
[6.2013482, 29.7034878],
[5.1922031, 29.7240552],
[5.2265358, 29.8585064],
[5.2640662, 30.0064961],
[5.3019095, 30.1543621],
[5.4438, 30.7100517]]],
u'type': u'Polygon'}}
g1 = shape(scene_metadata['geometry'])
from shapely import affinity
g2 = affinity.rotate(g1, 30)
combined = g2.intersection(g1) # <----- ***CRASH***
J'avais aussi ce problème, merci !
Commentaire le plus utile
@phargogh as -tu
pip install shapely
? Depuis décembre, sur OS X, vous obtiendrez une roue Shapely binaire si vous le faites et la roue comprend une bibliothèque partagée GEOS. Il est possible que ces roues Shapely ne soient pas compatibles avec la lib Homebrew GEOS et que des erreurs se produisent si la lib GEOS a déjà été chargée par osgeo.ogr.J'ai une solution de contournement potentielle pour vous : faites un
pip uninstall shapely && pip install --no-use-wheel shapely
. Cela récupérera la distribution source Shapely au lieu d'une roue binaire et cela ne devrait poser aucun problème avec GEOS de Homebrew.Pouvez-vous me dire si cela vous sort de ce pétrin ?