【问题标题】:Add world street map to basemap将世界街道地图添加到底图
【发布时间】:2021-02-01 19:36:48
【问题描述】:

我在使用底图 - arcgisimage 函数时遇到问题。下面的示例代码

...

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from PIL import Image

m = Basemap(
    llcrnrlat=40.361369, llcrnrlon=-80.0955278,
    urcrnrlat=40.501368, urcrnrlon=-79.865723,
    epsg = 2272
)
#m.arcgisimage(service='ESRI_StreetMap_World_2D'
, xpixels=7000, verbose=True)
m.arcgisimage(service='World_Physical_Map', xpixels=7000, ypixels=None, dpi=96,verbose=True)

#m.arcgisimage(service='ESRI_Imagery_World_2D', xpixels=7000, verbose=True)

plt.show()

...

当我运行此命令时,arcgisimage() 函数在 PIL 中崩溃并显示错误消息

Traceback (most recent call last):
  File "C:\Machine Learning\Geospatial\pittsburgh_map.py", line 11, in <module>
    m.arcgisimage(service='World_Physical_Map', xpixels=7000, ypixels=None, dpi=96,verbose=True)
  File "C:\Users\peter\AppData\Local\Programs\Python\Python38\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 4263, in arcgisimage
    return self.imshow(imread(urlopen(basemap_url)),ax=ax,
  File "C:\Users\peter\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\image.py", line 1490, in imread
    with img_open(fname) as image:
  File "C:\Users\peter\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\ImageFile.py", line 121, in __init__
    self._open()
  File "C:\Users\peter\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\PngImagePlugin.py", line 692, in _open
    cid, pos, length = self.png.read()
  File "C:\Users\peter\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\PngImagePlugin.py", line 162, in read
    pos = self.fp.tell()
io.UnsupportedOperation: seek

【问题讨论】:

  • 您是如何安装 mpl_toolkits 的?确保您遵循 Basemap 安装说明:matplotlib.org/basemap/users/installing.html
  • 感谢我在 Windows 10 上运行,安装时出现问题。我认为 pip 或 conda 终于奏效了。链接好像是指linux?
  • 您会推荐哪种方法?我安装了 py 3.8.6。最初我有 3.9,但必须转到早期版本才能获得兼容的库。除了这个 arcgisimage() 函数之外,其他所有东西似乎都在底图中工作
  • 该链接还提供了有关 Windows 二进制文件的信息——这就是我用来安装的内容。编辑:不推荐使用底图以支持 cartopy github.com/matplotlib/basemap
  • 我使用了带有 .whl 文件的 conda 或 pip - 不太确定,因为它很难安装。我以为这些说明是针对 linux 的?除 arcgisimage() 函数外,底图似乎都可以工作。这需要另一个库来工作吗

标签: python python-3.x matplotlib matplotlib-basemap


【解决方案1】:

我也遇到了同样的问题,很可能你是用 conda 安装的。我卸载了底图模块并用 pip 重新安装了它。然后一切正常

【讨论】:

  • 谢谢 - 我试过了,然后用 .whl 文件重新安装了用过的 pip,但仍然有同样的问题。除此以外,底图的所有其他功能都可以使用。它显示底图 1.2.2 已安装。
【解决方案2】:

如果您按照底图安装说明进行操作,那么您在运行底图时遇到的任何问题都可能无法解决,因为它已被 cartopy https://github.com/matplotlib/basemap 弃用。

【讨论】:

  • 此解决方法有效import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap from PIL import Image import urllib m = Basemap(projection='cyl',llcrnrlon=-90,llcrnrlat=30 ,urcrnrlon=-60,urcrnrlat=60, epsg="4326") bm_url = f"server.arcgisonline.com/ArcGIS/rest/services/…{m.llcrnrlon},{m.llcrnrlat},{m.urcrnrlon},{m.urcrnrlat}&bboxSR=4326&imageSR= 4326&size=400,400&dpi=96&format=png32&transparent=true&f=image" im = Image.open(urllib.request.urlopen(bm_url)) m.imshow(im, origin="upper") plt.show()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2016-10-14
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多