Reference Guide¶
Plotting basemaps¶
- contextily.add_basemap(ax, zoom='auto', source=None, interpolation='bilinear', attribution=None, attribution_size=8, reset_extent=True, crs=None, resampling=Resampling.bilinear, **extra_imshow_args)¶
Add a (web/local) basemap to ax.
- Parameters
- axAxesSubplot
Matplotlib axes object on which to add the basemap. The extent of the axes is assumed to be in Spherical Mercator (EPSG:3857), unless the crs keyword is specified.
- zoomint or ‘auto’
[Optional. Default=’auto’] Level of detail for the basemap. If ‘auto’, it is calculated automatically. Ignored if source is a local file.
- sourcexyzservices.TileProvider object or str
[Optional. Default: Stamen Terrain web tiles] The tile source: web tile provider or path to local file. The web tile provider can be in the form of a
xyzservices.TileProvider
object or a URL. The placeholders for the XYZ in the URL need to be {x}, {y}, {z}, respectively. For local file paths, the file is read with rasterio and all bands are loaded into the basemap. IMPORTANT: tiles are assumed to be in the Spherical Mercator projection (EPSG:3857), unless the crs keyword is specified.- interpolationstr
[Optional. Default=’bilinear’] Interpolation algorithm to be passed to imshow. See matplotlib.pyplot.imshow for further details.
- attributionstr
[Optional. Defaults to attribution specified by the source] Text to be added at the bottom of the axis. This defaults to the attribution of the provider specified in source if available. Specify False to not automatically add an attribution, or a string to pass a custom attribution.
- attribution_sizeint
[Optional. Defaults to ATTRIBUTION_SIZE]. Font size to render attribution text with.
- reset_extentbool
[Optional. Default=True] If True, the extent of the basemap added is reset to the original extent (xlim, ylim) of ax
- crsNone or str or CRS
[Optional. Default=None] coordinate reference system (CRS), expressed in any format permitted by rasterio, to use for the resulting basemap. If None (default), no warping is performed and the original Spherical Mercator (EPSG:3857) is used.
- resampling<enum ‘Resampling’>
[Optional. Default=Resampling.bilinear] Resampling method for executing warping, expressed as a rasterio.enums.Resampling method
- **extra_imshow_args :
Other parameters to be passed to imshow.
Examples
>>> import geopandas >>> import contextily as ctx >>> db = geopandas.read_file(ps.examples.get_path('virginia.shp'))
Ensure the data is in Spherical Mercator:
>>> db = db.to_crs(epsg=3857)
Add a web basemap:
>>> ax = db.plot(alpha=0.5, color='k', figsize=(6, 6)) >>> ctx.add_basemap(ax, source=url) >>> plt.show()
Or download a basemap to a local file and then plot it:
>>> source = 'virginia.tiff' >>> _ = ctx.bounds2raster(*db.total_bounds, zoom=6, source=source) >>> ax = db.plot(alpha=0.5, color='k', figsize=(6, 6)) >>> ctx.add_basemap(ax, source=source) >>> plt.show()
- contextily.add_attribution(ax, text, font_size=8, **kwargs)¶
Utility to add attribution text.
- Parameters
- axAxesSubplot
Matplotlib axes object on which to add the attribution text.
- textstr
Text to be added at the bottom of the axis.
- font_sizeint
[Optional. Defaults to 8] Font size in which to render the attribution text.
- **kwargsAdditional keywords to pass to the matplotlib text method.
- Returns
- matplotlib.text.Text
Matplotlib Text object added to the plot.
Working with tiles¶
- contextily.bounds2raster(w, s, e, n, path, zoom='auto', source=None, ll=False, wait=0, max_retries=2)¶
Take bounding box and zoom, and write tiles into a raster file in the Spherical Mercator CRS (EPSG:3857)
- Parameters
- wfloat
West edge
- sfloat
South edge
- efloat
East edge
- nfloat
North edge
- zoomint
Level of detail
- pathstr
Path to raster file to be written
- sourcexyzservices.TileProvider object or str
[Optional. Default: Stamen Terrain web tiles] The tile source: web tile provider or path to local file. The web tile provider can be in the form of a
xyzservices.TileProvider
object or a URL. The placeholders for the XYZ in the URL need to be {x}, {y}, {z}, respectively. For local file paths, the file is read with rasterio and all bands are loaded into the basemap. IMPORTANT: tiles are assumed to be in the Spherical Mercator projection (EPSG:3857), unless the crs keyword is specified.- llBoolean
[Optional. Default: False] If True, w, s, e, n are assumed to be lon/lat as opposed to Spherical Mercator.
- waitint
[Optional. Default: 0] if the tile API is rate-limited, the number of seconds to wait between a failed request and the next try
- max_retries: int
[Optional. Default: 2] total number of rejected requests allowed before contextily will stop trying to fetch more tiles from a rate-limited API.
- Returns
- imgndarray
Image as a 3D array of RGB values
- extenttuple
Bounding box [minX, maxX, minY, maxY] of the returned image
- contextily.bounds2img(w, s, e, n, zoom='auto', source=None, ll=False, wait=0, max_retries=2)¶
Take bounding box and zoom and return an image with all the tiles that compose the map and its Spherical Mercator extent.
- Parameters
- wfloat
West edge
- sfloat
South edge
- efloat
East edge
- nfloat
North edge
- zoomint
Level of detail
- sourcexyzservices.TileProvider object or str
[Optional. Default: Stamen Terrain web tiles] The tile source: web tile provider or path to local file. The web tile provider can be in the form of a
xyzservices.TileProvider
object or a URL. The placeholders for the XYZ in the URL need to be {x}, {y}, {z}, respectively. For local file paths, the file is read with rasterio and all bands are loaded into the basemap. IMPORTANT: tiles are assumed to be in the Spherical Mercator projection (EPSG:3857), unless the crs keyword is specified.- llBoolean
[Optional. Default: False] If True, w, s, e, n are assumed to be lon/lat as opposed to Spherical Mercator.
- waitint
[Optional. Default: 0] if the tile API is rate-limited, the number of seconds to wait between a failed request and the next try
- max_retries: int
[Optional. Default: 2] total number of rejected requests allowed before contextily will stop trying to fetch more tiles from a rate-limited API.
- Returns
- imgndarray
Image as a 3D array of RGB values
- extenttuple
Bounding box [minX, maxX, minY, maxY] of the returned image
- contextily.warp_tiles(img, extent, t_crs='EPSG:4326', resampling=Resampling.bilinear)¶
Reproject (warp) a Web Mercator basemap into any CRS on-the-fly
- NOTE: this method works well with contextily’s bounds2img approach to
raster dimensions (h, w, b)
- Parameters
- imgndarray
Image as a 3D array (h, w, b) of RGB values (e.g. as returned from contextily.bounds2img)
- extenttuple
Bounding box [minX, maxX, minY, maxY] of the returned image, expressed in Web Mercator (EPSG:3857)
- t_crsstr/CRS
[Optional. Default=’EPSG:4326’] Target CRS, expressed in any format permitted by rasterio. Defaults to WGS84 (lon/lat)
- resampling<enum ‘Resampling’>
[Optional. Default=Resampling.bilinear] Resampling method for executing warping, expressed as a rasterio.enums.Resampling method
- Returns
- imgndarray
Image as a 3D array (h, w, b) of RGB values (e.g. as returned from contextily.bounds2img)
- exttuple
Bounding box [minX, maxX, minY, maxY] of the returned (warped) image
- contextily.warp_img_transform(img, transform, s_crs, t_crs, resampling=Resampling.bilinear)¶
Reproject (warp) an img with a given transform and s_crs into a different t_crs
NOTE: this method works well with rasterio’s .read() approach to raster’s dimensions (b, h, w)
- Parameters
- imgndarray
Image as a 3D array (b, h, w) of RGB values (e.g. as returned from rasterio’s .read() method)
- transformaffine.Affine
Transform of the input image as expressed by rasterio and the affine package
- s_crsstr/CRS
Source CRS in which img is passed, expressed in any format permitted by rasterio.
- t_crsstr/CRS
Target CRS, expressed in any format permitted by rasterio.
- resampling<enum ‘Resampling’>
[Optional. Default=Resampling.bilinear] Resampling method for executing warping, expressed as a rasterio.enums.Resampling method
- Returns
- w_imgndarray
Warped image as a 3D array (b, h, w) of RGB values (e.g. as returned from rasterio’s .read() method)
- w_transformaffine.Affine
Transform of the input image as expressed by rasterio and the affine package
- contextily.howmany(w, s, e, n, zoom, verbose=True, ll=False)¶
Number of tiles required for a given bounding box and a zoom level
- Parameters
- wfloat
West edge
- sfloat
South edge
- efloat
East edge
- nfloat
North edge
- zoomint
Level of detail
- verboseBoolean
[Optional. Default=True] If True, print short message with number of tiles and zoom.
- llBoolean
[Optional. Default: False] If True, w, s, e, n are assumed to be lon/lat as opposed to Spherical Mercator.
Geocoding and plotting places¶
- class contextily.Place(search, zoom=None, path=None, zoom_adjust=None, source=None, geocoder=<geopy.geocoders.nominatim.Nominatim object>)¶
Geocode a place by name and get its map.
This allows you to search for a name (e.g., city, street, country) and grab map and location data from the internet.
- Parameters
- searchstring
The location to be searched.
- zoomint or None
[Optional. Default: None] The level of detail to include in the map. Higher levels mean more tiles and thus longer download time. If None, the zoom level will be automatically determined.
- pathstr or None
[Optional. Default: None] Path to a raster file that will be created after getting the place map. If None, no raster file will be downloaded.
- zoom_adjustint or None
[Optional. Default: None] The amount to adjust a chosen zoom level if it is chosen automatically.
- sourcexyzservices.providers object or str
[Optional. Default: Stamen Terrain web tiles] The tile source: web tile provider or path to local file. The web tile provider can be in the form of a
xyzservices.TileProvider
object or a URL. The placeholders for the XYZ in the URL need to be {x}, {y}, {z}, respectively. For local file paths, the file is read with rasterio and all bands are loaded into the basemap. IMPORTANT: tiles are assumed to be in the Spherical Mercator projection (EPSG:3857), unless the crs keyword is specified.- geocodergeopy.geocoders
[Optional. Default: geopy.geocoders.Nominatim()] Geocoder method to process search
- Attributes
- geocodegeopy object
The result of calling
geopy.geocoders.Nominatim
withsearch
as input.- sfloat
The southern bbox edge.
- nfloat
The northern bbox edge.
- efloat
The eastern bbox edge.
- wfloat
The western bbox edge.
- imndarray
The image corresponding to the map of
search
.- bboxlist
The bounding box of the returned image, expressed in lon/lat, with the following order: [minX, minY, maxX, maxY]
- bbox_maptuple
The bounding box of the returned image, expressed in Web Mercator, with the following order: [minX, minY, maxX, maxY]
Methods
plot
([ax, zoom, interpolation, attribution])Plot a Place object
- Place.plot(ax=None, zoom='auto', interpolation='bilinear', attribution=None)¶
Plot a Place object …
- Parameters
- axAxesSubplot
Matplotlib axis with x_lim and y_lim set in Web Mercator (EPSG=3857). If not provided, a new 12x12 figure will be set and the name of the place will be added as title
- zoomint/’auto’
[Optional. Default=’auto’] Level of detail for the basemap. If ‘auto’, if calculates it automatically. Ignored if source is a local file.
- interpolationstr
[Optional. Default=’bilinear’] Interpolation algorithm to be passed to imshow. See matplotlib.pyplot.imshow for further details.
- attributionstr
[Optional. Defaults to attribution specified by the source of the map tiles] Text to be added at the bottom of the axis. This defaults to the attribution of the provider specified in source if available. Specify False to not automatically add an attribution, or a string to pass a custom attribution.
- Returns
- axAxesSubplot
Matplotlib axis with x_lim and y_lim set in Web Mercator (EPSG=3857) containing the basemap
Examples
>>> lvl = ctx.Place('Liverpool') >>> lvl.plot()
- contextily.plot_map(place, bbox=None, title=None, ax=None, axis_off=True, latlon=True, attribution=None)¶
Plot a map of the given place.
- Parameters
- placeinstance of Place or ndarray
The map to plot. If an ndarray, this must be an image corresponding to a map. If an instance of
Place
, the extent of the image and name will be inferred from the bounding box.- axinstance of matplotlib Axes object or None
The axis on which to plot. If None, one will be created.
- axis_offbool
Whether to turn off the axis border and ticks before plotting.
- attributionstr
[Optional. Default to standard ATTRIBUTION] Text to be added at the bottom of the axis.
- Returns
- axinstance of matplotlib Axes object or None
The axis on the map is plotted.