私はこのコードを持っています:
import pandas as pd
import numpy as np
from geopandas import GeoDataFrame
import geopandas
from shapely.geometry import LineString, Point
import matplotlib.pyplot as plt
import contextily
''' Do Something'''
df = start_stop_df.drop('track', axis=1)
crs = {'init': 'epsg:4326'}
gdf = GeoDataFrame(df, crs=crs, geometry=geometry)
ax = gdf.plot()
contextily.add_basemap(ax)
ax.set_axis_off()
plt.show()
基本的に、これはシンガポールにある背景マップを生成します。しかし、実行すると、次のエラーが表示されます:HTTPError: Tile URL resulted in a 404 error. Double-check your tile url:http://tile.stamen.com/terrain/29/268436843/268435436.png
ただし、この画像は引き続き生成されます。
タイルURLを変更するにはどうすればよいですか?まだシンガポールの地図をベースレイヤーにしたいと思います。
[〜#〜]編集[〜#〜]:
また、add_basemapにこの引数を含めてみました:url ='https://www.openstreetmap.org/#map=12/1.3332/103.7987'
このエラーが発生したのは次のどれですか。OSError: cannot identify image file <_io.BytesIO object at 0x000001CC3CC4BC50>
まず、GeoDataframeがWebメルカトル図法(epsg=3857
)であることを確認してください。 Geodataframeが正しく地理参照されると、Geopandasの再投影によってこれを実現できます。
df = df.to_crs(epsg=3857)
これが完了すると、サポートされているマップスタイルを簡単に選択できます。執筆時点では、完全なリストはcontextily.sources
モジュールにあります。
### Tile provider sources ###
ST_TONER = 'http://tile.stamen.com/toner/tileZ/tileX/tileY.png'
ST_TONER_HYBRID = 'http://tile.stamen.com/toner-hybrid/tileZ/tileX/tileY.png'
ST_TONER_LABELS = 'http://tile.stamen.com/toner-labels/tileZ/tileX/tileY.png'
ST_TONER_LINES = 'http://tile.stamen.com/toner-lines/tileZ/tileX/tileY.png'
ST_TONER_BACKGROUND = 'http://tile.stamen.com/toner-background/tileZ/tileX/tileY.png'
ST_TONER_LITE = 'http://tile.stamen.com/toner-lite/tileZ/tileX/tileY.png'
ST_TERRAIN = 'http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'
ST_TERRAIN_LABELS = 'http://tile.stamen.com/terrain-labels/tileZ/tileX/tileY.png'
ST_TERRAIN_LINES = 'http://tile.stamen.com/terrain-lines/tileZ/tileX/tileY.png'
ST_TERRAIN_BACKGROUND = 'http://tile.stamen.com/terrain-background/tileZ/tileX/tileY.png'
ST_WATERCOLOR = 'http://tile.stamen.com/watercolor/tileZ/tileX/tileY.png'
# OpenStreetMap as an alternative
OSM_A = 'http://a.tile.openstreetmap.org/tileZ/tileX/tileY.png'
OSM_B = 'http://b.tile.openstreetmap.org/tileZ/tileX/tileY.png'
OSM_C = 'http://c.tile.openstreetmap.org/tileZ/tileX/tileY.png'
タイルURLに実際のx、y、zタイル番号を追加しないでください(「編集」の例で行ったように)。 ctxがこれをすべて処理します。
GeoPandas docs で、作業コピーおよび貼り付け可能な例と詳細情報を見つけることができます。
import contextily as ctx
# Dataframe you want to plot
gdf = GeoDataFrame(df, crs= {"init": "epsg:4326"}) # Create a georeferenced dataframe
gdf = gdf.to_crs(epsg=3857) # reproject it in Web mercator
ax = gdf.plot()
# choose any of the supported maps from ctx.sources
ctx.add_basemap(ax, url=ctx.sources.ST_TERRAIN)
ax.set_axis_off()
plt.show()
私はコメントを追加するにはあまりにも新しいですが、私はコメントで404エラーが発生することを指摘している人を指摘したいと思いました。大文字小文字などを確認してください。おしべのURLはこれに固有です。たとえば、すべて大文字の呼び出しはありません。最初の文字だけを大文字にします。例えば:
ctx.add_basemap(ax=ax,url=ctx.providers.Stamen.Toner, zoom=10)