mapbox module¶
Map (AnyWidget)
¶
Create a Mapbox map widget.
Source code in mapwidget/mapbox.py
class Map(anywidget.AnyWidget):
"""Create a Mapbox map widget."""
_cwd = os.path.dirname(os.path.abspath(__file__))
_esm = pathlib.Path(os.path.join(_cwd, 'javascript', 'mapbox.js'))
_css = pathlib.Path(os.path.join(_cwd, 'styles', 'mapbox.css'))
default_token = os.environ.get('MAPBOX_TOKEN')
token = traitlets.Unicode(default_token).tag(sync=True)
center = traitlets.List([0, 20]).tag(sync=True, o=True)
zoom = traitlets.Float(2).tag(sync=True, o=True)
bounds = traitlets.List([0, 0, 0, 0]).tag(sync=True, o=True)
width = traitlets.Unicode('100%').tag(sync=True, o=True)
height = traitlets.Unicode('600px').tag(sync=True, o=True)
clicked_latlng = traitlets.List([None, None]).tag(sync=True, o=True)
def set_esm(self, esm, container='map'):
"""Set esm attribute. Can be a string, a file path, or a url.
See examples at https://docs.mapbox.com/mapbox-gl-js/example/
Open an example and click on the 'Edit in CodePen' button.
Then copy the code from the 'JS' tab, and assign it to the esm parameter.
Args:
esm (str): The esm string, file path, or url.
container (str, optional): The container name. Defaults to 'map'.
Raises:
TypeError: If esm is not a string.
"""
if isinstance(esm, str):
if os.path.isfile(esm):
with open(esm, 'r') as f:
content = f.read()
elif esm.startswith('http'):
import urllib.request
with urllib.request.urlopen(esm) as response:
content = response.read().decode('utf-8')
else:
content = esm
self._esm = self._create_esm(content, container=container)
else:
raise TypeError('esm must be a string')
def set_css(self, css, container='map'):
"""Set css attribute. Can be a string, a file path, or a url.
See examples at https://docs.mapbox.com/mapbox-gl-js/example/
Open an example and click on the 'Edit in CodePen' button.
Then copy the code from the 'CSS' tab, and assign it to the css parameter.
Args:
css (str): The css string, file path, or url.
Raises:
TypeError: If css is not a string.
"""
if isinstance(css, str):
if os.path.isfile(css):
with open(css, 'r') as f:
content = f.read()
elif css.startswith('http'):
import urllib.request
with urllib.request.urlopen(css) as response:
content = response.read().decode('utf-8')
else:
content = css
self._css = content.replace(f'#{container}', f'#div').replace(
f'.{container}', f'.div'
)
else:
raise TypeError('css must be a string')
def _create_esm(self, esm, container='map'):
"""Create esm string by replacing the container name.
Args:
esm (str): The esm string.
container (str, optional): The container name. Defaults to 'map'.
Returns:
str: The esm string with the container name replaced.
"""
_cwd = os.path.dirname(os.path.abspath(__file__))
_esm = pathlib.Path(os.path.join(_cwd, 'javascript', 'mapbox.js'))
with open(_esm, 'r') as f:
lines = f.readlines()
header = []
footer = []
for index, line in enumerate(lines):
if line.strip() == '// Map content':
header = lines[: index + 1]
break
for index, line in enumerate(lines):
if line.strip() == '// Footer':
footer = lines[index:]
break
content = esm.replace(f"'{container}'", "div").replace(f'"{container}"', 'div')
esm = ''.join(header) + content + ''.join(footer)
return esm
def _save_esm(self, output):
"""Save esm to file
Args:
output (str): The output file path.
"""
with open(output, 'w') as f:
f.write(self._esm)
set_css(self, css, container='map')
¶
Set css attribute. Can be a string, a file path, or a url. See examples at https://docs.mapbox.com/mapbox-gl-js/example/ Open an example and click on the 'Edit in CodePen' button. Then copy the code from the 'CSS' tab, and assign it to the css parameter.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
css |
str |
The css string, file path, or url. |
required |
Exceptions:
Type | Description |
---|---|
TypeError |
If css is not a string. |
Source code in mapwidget/mapbox.py
def set_css(self, css, container='map'):
"""Set css attribute. Can be a string, a file path, or a url.
See examples at https://docs.mapbox.com/mapbox-gl-js/example/
Open an example and click on the 'Edit in CodePen' button.
Then copy the code from the 'CSS' tab, and assign it to the css parameter.
Args:
css (str): The css string, file path, or url.
Raises:
TypeError: If css is not a string.
"""
if isinstance(css, str):
if os.path.isfile(css):
with open(css, 'r') as f:
content = f.read()
elif css.startswith('http'):
import urllib.request
with urllib.request.urlopen(css) as response:
content = response.read().decode('utf-8')
else:
content = css
self._css = content.replace(f'#{container}', f'#div').replace(
f'.{container}', f'.div'
)
else:
raise TypeError('css must be a string')
set_esm(self, esm, container='map')
¶
Set esm attribute. Can be a string, a file path, or a url. See examples at https://docs.mapbox.com/mapbox-gl-js/example/ Open an example and click on the 'Edit in CodePen' button. Then copy the code from the 'JS' tab, and assign it to the esm parameter.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
esm |
str |
The esm string, file path, or url. |
required |
container |
str |
The container name. Defaults to 'map'. |
'map' |
Exceptions:
Type | Description |
---|---|
TypeError |
If esm is not a string. |
Source code in mapwidget/mapbox.py
def set_esm(self, esm, container='map'):
"""Set esm attribute. Can be a string, a file path, or a url.
See examples at https://docs.mapbox.com/mapbox-gl-js/example/
Open an example and click on the 'Edit in CodePen' button.
Then copy the code from the 'JS' tab, and assign it to the esm parameter.
Args:
esm (str): The esm string, file path, or url.
container (str, optional): The container name. Defaults to 'map'.
Raises:
TypeError: If esm is not a string.
"""
if isinstance(esm, str):
if os.path.isfile(esm):
with open(esm, 'r') as f:
content = f.read()
elif esm.startswith('http'):
import urllib.request
with urllib.request.urlopen(esm) as response:
content = response.read().decode('utf-8')
else:
content = esm
self._esm = self._create_esm(content, container=container)
else:
raise TypeError('esm must be a string')