系统:windows
版本:python 3.6
我成功安装了osmnx和Rtree。但是仍然有错误。
我的代码:
> 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)
Run Code Online (Sandbox Code Playgroud)
引发OSError(“找不到或加载spatialindex_c.dll”)
OSError:找不到或加载spatialindex_c.dll
这是什么意思,是什么原因造成的,以及应该如何解决?
如果您使用的是 conda,安装 OSMnx 并避免此问题的最简单方法是使用 conda-forge,如文档中所述:
conda config --prepend channels conda-forge
conda create -n ox --strict-channel-priority osmnx
Run Code Online (Sandbox Code Playgroud)
或者您可以直接从其官方 docker容器运行 OSMnx(和 Jupyter)。
这意味着您仅以为自己已经成功安装了osmnx或其依赖项之一。
当然,很大程度上取决于您如何安装osmnx-当我在虚拟环境中尝试使用pip时,它对我失败了:
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\
Run Code Online (Sandbox Code Playgroud)
转到http://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely给了我一个我使用3.6(64位)的python的下载,该文件是通过下载然后在已下载文件上使用pip进行安装的。
重新运行pip install OSMnx我的下一个问题是与fiona的编译有关,因此Chris Gohlke在http://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona处再次进行了救援,其中有一个注释“ require gdal”,所以我跳了起来到http://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal的同时,我先进行了安装。
在运行您的第一次导入时,我得到:
>>> 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.
Run Code Online (Sandbox Code Playgroud)
我已经注意到numpy似乎已正确安装,但我知道它可能存在问题,因此请转至http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy,在其中找到注释: Numpy + MKL链接到英特尔®数学内核库,并在numpy.core目录中包含必需的DLL。” 所以我再次下载并安装。
现在我处于您的阶段:
> 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
Run Code Online (Sandbox Code Playgroud)
看起来问题出在RTree中,所以请转至http://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree (请注意,这一次我们必须pip uninstall rtree首先进行)
尝试使用添加了几个换行符的代码,我再次收到一个错误,即超出了经久限制,因此交换了两个要设置的值,point=(31.22, 121.48)然后得到了如下图像:

从:
>>> 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
Run Code Online (Sandbox Code Playgroud)
我有同样的问题“could not find or load spatialindex_c.dll”。
为我解决的是pip uninstall rtree. 就是这样。我conda在没有管理员的 Windows 7 服务器中使用环境。
两个osmnx和geopandas存在于我的env,其中包括conda-forge信道
小智 5
rtree在使用Christoph Gohlke的pipWheel安装后,我在 Windows 中遇到了同样的错误。Rtree-0.9.7-cp39-cp39-win_amd64.whl
import geopandas我可以在执行或打开时看到错误spyder。在本例中,错误是关于缺少依赖项的警告rtree>= 0.9.7: None (NOK)。
finder.py检查site-packagesrtree文件夹 中的文件后,C:\Users\mysuer\AppData\Roaming\Python\Python39\site-packages\rtree我看到了以下代码行:
# 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,
'']
Run Code Online (Sandbox Code Playgroud)
因此,我找到了rtree库所在的文件夹C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib,并创建了一个针对该文件夹的环境变量。
| 变量名 | 变量值 |
|---|---|
SPATIALINDEX_C_LIBRARY |
C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib |
添加环境变量后一切正常。
| 归档时间: |
|
| 查看次数: |
5088 次 |
| 最近记录: |