Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

" could not find or load spatialindex_c.dll" in windows?

Tags:

python

dll

system:windows

versions:python 3.6

I successfully install osmnx and Rtree. But still have error.

My code:

> import osmnx as ox
> from Ipython.display import Image

> ox.config(log_file=True,log_console=True,use_cache=True)
> 
> img_folder='image'; extension='png'; size=700
> 
> place='shanghai' point=(121.48,31.22) > 
> fig,ax=ox.plot_figure_ground(point=point,filename=place,network_type='all',dpi=150)
> Image('{}/{}.{}'.fromat(img_folder,place,extension),height=size,width=size)

raise OSError("could not find or load spatialindex_c.dll")

OSError: could not find or load spatialindex_c.dll

What does this mean, what causes it, and how should you fix it?

like image 303
zara Avatar asked Aug 27 '17 04:08

zara


4 Answers

I had the same problem “could not find or load spatialindex_c.dll”.

What solved for me was pip uninstall rtree. That's it. I am using conda environment in a Windows 7 server without admin.

Both osmnx and geopandas are present in my env, which includes conda-forge channel

like image 99
B Furtado Avatar answered Nov 19 '22 12:11

B Furtado


If you're using conda, the easiest way to install OSMnx and avoid this issue is with conda-forge, as stated in the docs:

conda config --prepend channels conda-forge
conda create -n ox --strict-channel-priority osmnx

Or you can run OSMnx (and Jupyter) directly from its official docker container.

like image 22
gboeing Avatar answered Nov 19 '22 12:11

gboeing


It means that you only thought you had successfully installed osmnx or one of it's dependencies.

Of course a lot depends on how you installed osmnx - when I tried with pip in a virtual environment it failed for me with:

Collecting OSMnx
  Downloading osmnx-0.5.3-py2.py3-none-any.whl (54kB)
    100% |████████████████████████████████| 61kB 183kB/s
Collecting shapely>=1.5 (from OSMnx)
  Downloading Shapely-1.6.0.tar.gz (214kB)
    100% |████████████████████████████████| 215kB 2.0MB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\setup.py", line 80, in <module>
        from shapely._buildcfg import geos_version_string, geos_version, \
      File "C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\shapely\_buildcfg.py", line 200, in <module>
        lgeos = CDLL("geos_c.dll")
      File "C:\Python36_64\lib\ctypes\__init__.py", line 344, in __init__
        self._handle = _dlopen(self._name, mode)
    OSError: [WinError 126] The specified module could not be found

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\

Going to http://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely gave me a download for the python I was using 3.6 (64 bit) which I installed by downloading then using pip on the downloaded file.

Re-running pip install OSMnx my next problem was with the compilation of fiona so Chris Gohlke to the rescue again at http://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona which has a note "requires gdal" so I hopped to http://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal while I was there and installed that first.

On running your first import I got:

>>> import osmnx as ox
Traceback (most recent call last):
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\core\__init__.py", line 16, in <module>
    from . import multiarray
ImportError: DLL load failed: The specified procedure could not be found.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\__init__.py", line 8, in <module>
    from .buildings import *
  File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\buildings.py", line 9, in <module>
    import geopandas as gpd
  File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\__init__.py", line 1, in <module>
    from geopandas.geoseries import GeoSeries
  File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\geoseries.py", line 5, in <module>
    import numpy as np
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\__init__.py", line 142, in <module>
    from . import add_newdocs
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
    from numpy.lib import add_newdoc
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\lib\__init__.py", line 8, in <module>
    from .type_check import *
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
    import numpy.core.numeric as _nx
  File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\core\__init__.py", line 26, in <module>
    raise ImportError(msg)
ImportError:
Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control).  Otherwise reinstall numpy.

Original error was: DLL load failed: The specified procedure could not be found.

I had noticed that it seemed that numpy had installed correctly but I know that there can be issues with it so off to http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy where we find a note: "Numpy+MKL is linked to the Intel® Math Kernel Library and includes required DLLs in the numpy.core directory." so again I download and install.

Now I am at your stage of:

> import osmnx as ox
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\__init__.py", line 8, in <module>
    from .buildings import *
  File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\buildings.py", line 9, in <module>
    import geopandas as gpd
  File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\__init__.py", line 1, in <module>
    from geopandas.geoseries import GeoSeries
  File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\geoseries.py", line 16, in <module>
    from geopandas.base import GeoPandasBase
  File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\base.py", line 15, in <module>
    from rtree.core import RTreeError
  File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\__init__.py", line 1, in <module>
    from .index import Rtree
  File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\index.py", line 5, in <module>
    from . import core
  File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\core.py", line 116, in <module>
    raise OSError("could not find or load spatialindex_c.dll")
OSError: could not find or load spatialindex_c.dll

Looks like the problem is in RTree so off to http://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree (note that this time we have to pip uninstall rtree first)

Trying your code, with a couple of line breaks added, again I get an error that the lat long limits are exceeded so swap the two values to set point=(31.22, 121.48) and I get an image such as: enter image description here

from:

>>> fig,ax=ox.plot_figure_ground(point=point,filename=place,network_type='all',dpi=150)
Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
Projected the GeoDataFrame "geometry to project" to EPSG 4326 in 0.00 seconds
Created bounding box 966.0 meters in each direction from (31.22, 121.48): 31.228713053594067,31.211286934028642,121.49013858668467,121.46986147388169
Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
Projected the GeoDataFrame "geometry to project" to EPSG 4326 in 0.00 seconds
Requesting network data within bounding box from API in 1 request(s)
Pausing 0.00 seconds before making API POST request
Posting to http://www.overpass-api.de/api/interpreter with timeout=180, "{'data': '[out:json][timeout:180];(way["highway"]["area"!~"yes"]["highway"!~"proposed|construction|abandoned|platform|raceway"]["service"!~"private"]["access"!~"private"](31.21128693,121.46986147,31.22871305,121.49013859);>;);out;'}"
Downloaded 480.6KB from www.overpass-api.de in 2.13 seconds
Saved response to cache file "cache/8c99e35743a557d7234621c6d3fd7139.json"
Got all network data within bounding box from API in 1 request(s) and 2.99 seconds
Creating networkx graph from downloaded OSM data...
Graph was not connected, retained only the largest weakly connected component (3,366 of 3,540 total nodes) in 0.15 seconds
Created graph with 3,366 nodes and 6,926 edges in 0.19 seconds
Added edge lengths to graph in 0.05 seconds
Truncated graph by bounding box in 0.14 seconds
Removed 0 isolated nodes
Graph was not connected, retained only the largest weakly connected component (2,764 of 2,779 total nodes) in 0.13 seconds
graph_from_bbox() returning graph with 2,764 nodes and 5,892 edges
graph_from_point() returning graph with 2,764 nodes and 5,892 edges
Begin topologically simplifying the graph...
Identified 1,568 edge endpoints in 0.04 seconds
Constructed all paths to simplify in 0.01 seconds
Simplified graph (from 2,764 to 1,568 nodes and from 5,892 to 3,730 edges) in 0.15 seconds
Created a GeoDataFrame from graph in 0.10 seconds
Projected the GeoDataFrame "unnamed_nodes" to UTM-51 in 0.07 seconds
Projected the GeoDataFrame "unnamed_edges" to UTM-51 in 0.29 seconds
Extracted projected node geometries from GeoDataFrame in 0.04 seconds
Rebuilt projected graph in 1.53 seconds
Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
Created bounding box 805 meters in each direction from (31.22, 121.48) and projected it: 3455784.445871858,3454174.445871858,356022.8750159489,354412.8750159489
Begin plotting the graph...
Drew the graph edges in 0.05 seconds
Saved the figure to disk in 0.11 seconds
like image 7
Steve Barnes Avatar answered Nov 19 '22 11:11

Steve Barnes


I had the same error in Windows after installing rtree with pip and the wheel Rtree-0.9.7-cp39-cp39-win_amd64.whl from Christoph Gohlke.

I could see the error both executing import geopandas or just opening spyder. In this case the error was a warning about missing dependencies rtree>= 0.9.7: None (NOK).

After inspecting the file finder.py in the site-packages rtree folder C:\Users\mysuer\AppData\Roaming\Python\Python39\site-packages\rtree I saw this lines of code:

# generate a bunch of candidate locations where the
# libspatialindex shared library *might* be hanging out
_candidates = [
    os.environ.get('SPATIALINDEX_C_LIBRARY', None),
    os.path.join(_cwd, 'lib'),
    _cwd,
    '']

So I found the rtree folder where the libraries are located C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib and I created an environment variable targeting the folder.

Variable name Variable value
SPATIALINDEX_C_LIBRARY C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib

Everything was fine after adding the environment variable.

like image 4
Pontnou Avatar answered Nov 19 '22 10:11

Pontnou