#-----------------------------------------------------------------------------
# Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors.
# All rights reserved.
#
# The full license is in the file LICENSE.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Boilerplate
#-----------------------------------------------------------------------------
import logging # isort:skip
log = logging.getLogger(__name__)
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
# Bokeh imports
from ..core.enums import HorizontalLocation, VerticalLocation
from ..core.properties import Auto, Either, Enum, Instance, Int, Seq, String
from ..models import (
GMapPlot,
LinearAxis,
MercatorTicker,
MercatorTickFormatter,
Range1d,
Title,
Tool,
)
from ..models.tools import Drag, InspectTool, Scroll, Tap
from ..util.options import Options
from ._tools import process_active_tools, process_tools_arg
from .figure import Figure
#-----------------------------------------------------------------------------
# Globals and constants
#-----------------------------------------------------------------------------
DEFAULT_TOOLS = "pan,wheel_zoom,reset,help"
__all__ = (
'GMap',
'GMapFigureOptions',
'gmap'
)
#-----------------------------------------------------------------------------
# General API
#-----------------------------------------------------------------------------
[docs]class GMap(GMapPlot):
''' A subclass of :class:`~bokeh.models.plots.Plot` that simplifies plot
creation with default axes, grids, tools, etc.
Args:
google_api_key (str):
Google requires an API key be supplied for maps to function. See:
https://developers.google.com/maps/documentation/javascript/get-api-key
map_options: (:class:`~bokeh.models.map_plots.GMapOptions`)
Configuration specific to a Google Map
In addition to all the Bokeh model property attributes documented below,
the ``Figure`` initializer also accepts the following options, which can
help simplify configuration:
.. bokeh-options:: GMapFigureOptions
:module: bokeh.plotting.gmap
'''
__subtype__ = "GMap"
__view_model__ = "GMapPlot"
def __init__(self, **kw):
if 'plot_width' in kw and 'width' in kw:
raise ValueError("Figure called with both 'plot_width' and 'width' supplied, supply only one")
if 'plot_height' in kw and 'height' in kw:
raise ValueError("Figure called with both 'plot_height' and 'height' supplied, supply only one")
if 'height' in kw:
kw['plot_height'] = kw.pop('height')
if 'width' in kw:
kw['plot_width'] = kw.pop('width')
opts = GMapFigureOptions(kw)
title = kw.get("title", None)
if isinstance(title, str):
kw['title'] = Title(text=title)
super().__init__(x_range=Range1d(), y_range=Range1d(), **kw)
xf = MercatorTickFormatter(dimension="lon")
xt = MercatorTicker(dimension="lon")
self.add_layout(LinearAxis(formatter=xf, ticker=xt), 'below')
yf = MercatorTickFormatter(dimension="lat")
yt = MercatorTicker(dimension="lat")
self.add_layout(LinearAxis(formatter=yf, ticker=yt), 'left')
tool_objs, tool_map = process_tools_arg(self, opts.tools)
self.add_tools(*tool_objs)
process_active_tools(self.toolbar, tool_map, opts.active_drag, opts.active_inspect, opts.active_scroll, opts.active_tap)
annular_wedge = Figure.annular_wedge
annulus = Figure.annulus
arc = Figure.arc
asterisk = Figure.asterisk
bezier = Figure.bezier
circle = Figure.circle
circle_cross = Figure.circle_cross
circle_x = Figure.circle_x
cross = Figure.cross
dash = Figure.dash
diamond = Figure.diamond
diamond_cross = Figure.diamond_cross
graph = Figure.graph
harea = Figure.harea
harea_stack = Figure.harea_stack
hbar = Figure.hbar
hbar_stack = Figure.hbar_stack
hline_stack = Figure.hline_stack
ellipse = Figure.ellipse
hex = Figure.hex
hexbin = Figure.hexbin
hex_tile = Figure.hex_tile
image = Figure.image
image_rgba = Figure.image_rgba
image_url = Figure.image_url
inverted_triangle = Figure.inverted_triangle
line = Figure.line
multi_line = Figure.multi_line
multi_polygons = Figure.multi_polygons
oval = Figure.oval
patch = Figure.patch
patches = Figure.patches
quad = Figure.quad
quadratic = Figure.quadratic
ray = Figure.ray
rect = Figure.rect
star = Figure.star
star_dot = Figure.star_dot
step = Figure.step
scatter = Figure.scatter
segment = Figure.segment
square = Figure.square
square_cross = Figure.square_cross
square_x = Figure.square_x
text = Figure.text
triangle = Figure.triangle
varea = Figure.varea
varea_stack = Figure.varea_stack
vbar = Figure.vbar
vbar_stack = Figure.vbar_stack
vline_stack = Figure.vline_stack
wedge = Figure.wedge
x = Figure.x
[docs]def gmap(google_api_key, map_options, **kwargs):
''' Create a new :class:`~bokeh.plotting.gmap.GMap` for plotting.
Args:
google_api_key (str):
Google requires an API key be supplied for maps to function. See:
https://developers.google.com/maps/documentation/javascript/get-api-key
The Google API key will be stored in the Bokeh Document JSON.
map_options: (:class:`~bokeh.models.map_plots.GMapOptions`)
Configuration specific to a Google Map
In addition to the standard :class:`~bokeh.plotting.gmap.GMap` keyword
arguments (e.g. ``plot_width`` or ``sizing_mode``), the following
additional options can be passed as well:
.. bokeh-options:: GMapFigureOptions
:module: bokeh.plotting.gmap
Returns:
GMap
'''
return GMap(api_key=google_api_key, map_options=map_options, **kwargs)
#-----------------------------------------------------------------------------
# Dev API
#-----------------------------------------------------------------------------
class GMapFigureOptions(Options):
tools = Either(String, Seq(Either(String, Instance(Tool))), default=DEFAULT_TOOLS, help="""
Tools the plot should start with.
""")
x_minor_ticks = Either(Auto, Int, default="auto", help="""
Number of minor ticks between adjacent x-axis major ticks.
""")
y_minor_ticks = Either(Auto, Int, default="auto", help="""
Number of minor ticks between adjacent y-axis major ticks.
""")
x_axis_location = Enum(VerticalLocation, default="below", help="""
Where the x-axis should be located.
""")
y_axis_location = Enum(HorizontalLocation, default="left", help="""
Where the y-axis should be located.
""")
x_axis_label = String(default="", help="""
A label for the x-axis.
""")
y_axis_label = String(default="", help="""
A label for the y-axis.
""")
active_drag = Either(Auto, String, Instance(Drag), default="auto", help="""
Which drag tool should initially be active.
""")
active_inspect = Either(Auto, String, Instance(InspectTool), Seq(Instance(InspectTool)), default="auto", help="""
Which drag tool should initially be active.
""")
active_scroll = Either(Auto, String, Instance(Scroll), default="auto", help="""
Which scroll tool should initially be active.
""")
active_tap = Either(Auto, String, Instance(Tap), default="auto", help="""
Which tap tool should initially be active.
""")
#-----------------------------------------------------------------------------
# Private API
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------