0

我想在物业地址的标绘点后面绘制墨尔本的背景地图。

我使用了以下代码:

import pandas as pd
import geopandas as gpd
from shapely.geometry import shape
import matplotlib.pyplot as plt
import contextily

MELB_PROPERTY_DATA = "https://data.melbourne.vic.gov.au/resource/imwx-szwr.json"

properties = pd.read_json(MELB_PROPERTY_DATA)
properties['the_geom'] = properties['the_geom'].apply(shape)
properties_geo = gpd.GeoDataFrame(properties).set_geometry('the_geom')

ax = properties_geo.plot(markersize=1)
contextily.add_basemap(ax)
plt.show()

在 contextily.add_basemap(ax) 行,我得到以下用户警告。

contextily\tile.py:632:UserWarning:推断的缩放级别 30 对当前的 tile 提供程序无效(有效缩放:0 - 18)。

我阅读了Contextily 文档,但它们并没有解决我的问题。

将行更改为 contextily.add_basemap(ax, zoom=5) 会删除 UserWarning 但仍然没有出现背景地图。在 SO 上已经提出了类似的问题,但我无法将它们改造成我的问题。

我觉得我也在为这个简单的任务导入很多库,所以如果你有任何建议来微调它,我也将不胜感激。

输出图表显示墨尔本地址的标记,但没有背景底图

4

1 回答 1

1

我从 swatchai 的评论中意识到从未定义过坐标参考系统 (CRS),从而解决了这个问题。

最终代码见下文,错误的行被注释掉以显示差异。

import pandas as pd
import geopandas as gpd
from shapely.geometry import shape
import matplotlib.pyplot as plt
import contextily

MELB_PROPERTY_DATA = "https://data.melbourne.vic.gov.au/resource/imwx-szwr.json"

properties = pd.read_json(MELB_PROPERTY_DATA)
properties['the_geom'] = properties['the_geom'].apply(shape)

# properties_geo = gpd.GeoDataFrame(properties).set_geometry('the_geom')
properties_geo = gpd.GeoDataFrame(properties, geometry='the_geom', crs='EPSG:4326')

ax = properties_geo.plot(markersize=1)

# contextily.add_basemap(ax)
contextily.add_basemap(ax, crs=properties_geo.crs.to_string())

plt.show()
于 2020-11-30T21:09:41.953 回答