Basemap
In [4]:
Copied!
import geolog
import geolog
In [5]:
Copied!
m = geolog.Map()
m = geolog.Map()
In [6]:
Copied!
m.add_toolbar()
m
m.add_toolbar()
m
Out[6]:
Map(center=[35, -90], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_te…
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/xyzservices/lib.py:44, in Bunch.__getattr__(self, key) 43 try: ---> 44 return self.__getitem__(key) 45 except KeyError: KeyError: 'OpenStreetmap' During handling of the above exception, another exception occurred: AttributeError Traceback (most recent call last) File ~/Documents/geolog/geolog/geolog.py:146, in add_basemap(self, basemap, **kwargs) 127 self.add_layer(tile_layer) 129 # def add_basemap(self, basemap, **kwargs): 130 # """ 131 # More user-friendly way to specify basemap. 132 133 # Args: 134 # basemap (must be string)- basemap of user choice. 135 # """ 136 # import xyzservices.providers as xyz 137 138 # if basemap.lower()=="roadmap": 139 # url = 'https://mt1.google.com/vt/lyrs=h&x={x}&y={y}&z={z}' 140 # self.add_tile_layer(url,name=basemap,**kwargs) 141 # elif basemap.lower()=="satellite": 142 # url = 'https://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}' 143 # self.add_tile_layer(url,name=basemap,**kwargs) 144 # else: 145 # try: --> 146 # basemap=eval(f"xyz.{basemap}") 147 # url = basemap.build_url() 148 # attribution = basemap.attribution 149 # self.add_tile_layer(url,name=basemap.name,attribution=attribution, **kwargs) 150 # except: 151 # raise ValueError(f"Basemap '{basemap}' not found.") 153 def add_basemap(m, basemap_name='OpenStreetMap', **kwargs): File <string>:1 File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/xyzservices/lib.py:46, in Bunch.__getattr__(self, key) 45 except KeyError: ---> 46 raise AttributeError(key) AttributeError: OpenStreetmap During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:773, in Widget._handle_msg(self, msg) 771 if 'buffer_paths' in data: 772 _put_buffers(state, data['buffer_paths'], msg['buffers']) --> 773 self.set_state(state) 775 # Handle a state request. 776 elif method == 'request_state': File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:650, in Widget.set_state(self, sync_data) 645 self._send(msg, buffers=echo_buffers) 647 # The order of these context managers is important. Properties must 648 # be locked when the hold_trait_notification context manager is 649 # released and notifications are fired. --> 650 with self._lock_property(**sync_data), self.hold_trait_notifications(): 651 for name in sync_data: 652 if name in self.keys: File ~/.pyenv/versions/3.11.2/lib/python3.11/contextlib.py:144, in _GeneratorContextManager.__exit__(self, typ, value, traceback) 142 if typ is None: 143 try: --> 144 next(self.gen) 145 except StopIteration: 146 return False File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1502, in HasTraits.hold_trait_notifications(self) 1500 for changes in cache.values(): 1501 for change in changes: -> 1502 self.notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:701, in Widget.notify_change(self, change) 698 if name in self.keys and self._should_send_property(name, getattr(self, name)): 699 # Send new state to front-end 700 self.send_state(key=name) --> 701 super().notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event) 1561 elif isinstance(c, EventHandler) and c.name is not None: 1562 c = getattr(self, c.name) -> 1564 c(event) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget_selection.py:236, in _Selection._propagate_index(self, change) 234 self.label = label 235 if self.value is not value: --> 236 self.value = value File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:732, in TraitType.__set__(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:721, in TraitType.set(self, obj, value) 717 silent = False 718 if silent is not True: 719 # we explicitly compare silent to True just in case the equality 720 # comparison above returns something other than True/False --> 721 obj._notify_trait(self.name, old_value, new_value) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1505, in HasTraits._notify_trait(self, name, old_value, new_value) 1504 def _notify_trait(self, name, old_value, new_value): -> 1505 self.notify_change( 1506 Bunch( 1507 name=name, 1508 old=old_value, 1509 new=new_value, 1510 owner=self, 1511 type="change", 1512 ) 1513 ) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:701, in Widget.notify_change(self, change) 698 if name in self.keys and self._should_send_property(name, getattr(self, name)): 699 # Send new state to front-end 700 self.send_state(key=name) --> 701 super().notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event) 1561 elif isinstance(c, EventHandler) and c.name is not None: 1562 c = getattr(self, c.name) -> 1564 c(event) File ~/Documents/geolog/geolog/geolog.py:297, in change_basemap(change) 248 def add_toolbar(self, position="topright"): 249 """Adds toolbar capability to map""" 251 # # widget_width = "250px" 252 # # padding = "0px 0px 0px 5px" 253 254 # toolbar_button = widgets.ToggleButton( 255 # value=False, 256 # tooltip="Toolbar", 257 # icon="wrench", 258 # layout=widgets.Layout(width="28px", height="28px", padding=padding), 259 # ) 260 261 # close_button = widgets.ToggleButton( 262 # value=False, 263 # tooltip="Close the tool", 264 # icon="times", 265 # button_style="primary", 266 # layout=widgets.Layout(height="28px", width="28px", padding=padding), 267 # ) 268 269 # toolbar = widgets.HBox([toolbar_button]) 270 271 # def toolbar_click(change): 272 # if change["new"]: 273 # toolbar.children = [toolbar_button, close_button] 274 # else: 275 # toolbar.children = [toolbar_button] 276 277 # toolbar_button.observe(toolbar_click, "value") 278 279 # def close_click(change): 280 # if change["new"]: 281 # toolbar_button.close() 282 # close_button.close() 283 # toolbar.close() 284 # basemap.close() 285 286 # close_button.observe(close_click, "value") 287 288 # rows = 2 289 # cols = 2 290 # grid = widgets.GridspecLayout(rows, cols, grid_gap="0px", layout=widgets.Layout(width="65px")) 291 292 # icons = ["folder-open", "map", "bluetooth", "area-chart"] 293 294 # for i in range(rows): 295 # for j in range(cols): 296 # grid[i, j] = widgets.Button(description="", button_style="primary", icon=icons[i*rows+j], --> 297 # layout=widgets.Layout(width="28px", padding="0px")) 298 299 # toolbar = widgets.VBox([toolbar_button]) 301 basemap = widgets.Dropdown( 302 options=['OpenStreetmap','roadmap','satellite'], 303 value=None, (...) 306 layout=widgets.Layout(width='250px') 307 ) 309 basemap_control = ipyleaflet.WidgetControl(widget=basemap, position='topright') File ~/Documents/geolog/geolog/geolog.py:151, in add_basemap(self, basemap, **kwargs) 121 tile_layer = ipyleaflet.TileLayer( 122 url=url, 123 name=name, 124 attribution=attribution, 125 **kwargs 126 ) 127 self.add_layer(tile_layer) 129 # def add_basemap(self, basemap, **kwargs): 130 # """ 131 # More user-friendly way to specify basemap. 132 133 # Args: 134 # basemap (must be string)- basemap of user choice. 135 # """ 136 # import xyzservices.providers as xyz 137 138 # if basemap.lower()=="roadmap": 139 # url = 'https://mt1.google.com/vt/lyrs=h&x={x}&y={y}&z={z}' 140 # self.add_tile_layer(url,name=basemap,**kwargs) 141 # elif basemap.lower()=="satellite": 142 # url = 'https://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}' 143 # self.add_tile_layer(url,name=basemap,**kwargs) 144 # else: 145 # try: 146 # basemap=eval(f"xyz.{basemap}") 147 # url = basemap.build_url() 148 # attribution = basemap.attribution 149 # self.add_tile_layer(url,name=basemap.name,attribution=attribution, **kwargs) 150 # except: --> 151 # raise ValueError(f"Basemap '{basemap}' not found.") 153 def add_basemap(m, basemap_name='OpenStreetMap', **kwargs): 154 """Add a basemap to a map object.""" ValueError: Basemap 'OpenStreetmap' not found.
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/xyzservices/lib.py:44, in Bunch.__getattr__(self, key) 43 try: ---> 44 return self.__getitem__(key) 45 except KeyError: KeyError: 'OpenStreetmap' During handling of the above exception, another exception occurred: AttributeError Traceback (most recent call last) File ~/Documents/geolog/geolog/geolog.py:146, in add_basemap(self, basemap, **kwargs) 127 self.add_layer(tile_layer) 129 # def add_basemap(self, basemap, **kwargs): 130 # """ 131 # More user-friendly way to specify basemap. 132 133 # Args: 134 # basemap (must be string)- basemap of user choice. 135 # """ 136 # import xyzservices.providers as xyz 137 138 # if basemap.lower()=="roadmap": 139 # url = 'https://mt1.google.com/vt/lyrs=h&x={x}&y={y}&z={z}' 140 # self.add_tile_layer(url,name=basemap,**kwargs) 141 # elif basemap.lower()=="satellite": 142 # url = 'https://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}' 143 # self.add_tile_layer(url,name=basemap,**kwargs) 144 # else: 145 # try: --> 146 # basemap=eval(f"xyz.{basemap}") 147 # url = basemap.build_url() 148 # attribution = basemap.attribution 149 # self.add_tile_layer(url,name=basemap.name,attribution=attribution, **kwargs) 150 # except: 151 # raise ValueError(f"Basemap '{basemap}' not found.") 153 def add_basemap(m, basemap_name='OpenStreetMap', **kwargs): File <string>:1 File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/xyzservices/lib.py:46, in Bunch.__getattr__(self, key) 45 except KeyError: ---> 46 raise AttributeError(key) AttributeError: OpenStreetmap During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:773, in Widget._handle_msg(self, msg) 771 if 'buffer_paths' in data: 772 _put_buffers(state, data['buffer_paths'], msg['buffers']) --> 773 self.set_state(state) 775 # Handle a state request. 776 elif method == 'request_state': File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:650, in Widget.set_state(self, sync_data) 645 self._send(msg, buffers=echo_buffers) 647 # The order of these context managers is important. Properties must 648 # be locked when the hold_trait_notification context manager is 649 # released and notifications are fired. --> 650 with self._lock_property(**sync_data), self.hold_trait_notifications(): 651 for name in sync_data: 652 if name in self.keys: File ~/.pyenv/versions/3.11.2/lib/python3.11/contextlib.py:144, in _GeneratorContextManager.__exit__(self, typ, value, traceback) 142 if typ is None: 143 try: --> 144 next(self.gen) 145 except StopIteration: 146 return False File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1502, in HasTraits.hold_trait_notifications(self) 1500 for changes in cache.values(): 1501 for change in changes: -> 1502 self.notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:701, in Widget.notify_change(self, change) 698 if name in self.keys and self._should_send_property(name, getattr(self, name)): 699 # Send new state to front-end 700 self.send_state(key=name) --> 701 super().notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event) 1561 elif isinstance(c, EventHandler) and c.name is not None: 1562 c = getattr(self, c.name) -> 1564 c(event) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget_selection.py:236, in _Selection._propagate_index(self, change) 234 self.label = label 235 if self.value is not value: --> 236 self.value = value File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:732, in TraitType.__set__(self, obj, value) 730 raise TraitError('The "%s" trait is read-only.' % self.name) 731 else: --> 732 self.set(obj, value) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:721, in TraitType.set(self, obj, value) 717 silent = False 718 if silent is not True: 719 # we explicitly compare silent to True just in case the equality 720 # comparison above returns something other than True/False --> 721 obj._notify_trait(self.name, old_value, new_value) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1505, in HasTraits._notify_trait(self, name, old_value, new_value) 1504 def _notify_trait(self, name, old_value, new_value): -> 1505 self.notify_change( 1506 Bunch( 1507 name=name, 1508 old=old_value, 1509 new=new_value, 1510 owner=self, 1511 type="change", 1512 ) 1513 ) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ipywidgets/widgets/widget.py:701, in Widget.notify_change(self, change) 698 if name in self.keys and self._should_send_property(name, getattr(self, name)): 699 # Send new state to front-end 700 self.send_state(key=name) --> 701 super().notify_change(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change) 1515 def notify_change(self, change): 1516 """Notify observers of a change event""" -> 1517 return self._notify_observers(change) File ~/.pyenv/versions/3.11.2/lib/python3.11/site-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event) 1561 elif isinstance(c, EventHandler) and c.name is not None: 1562 c = getattr(self, c.name) -> 1564 c(event) File ~/Documents/geolog/geolog/geolog.py:297, in change_basemap(change) 248 def add_toolbar(self, position="topright"): 249 """Adds toolbar capability to map""" 251 # # widget_width = "250px" 252 # # padding = "0px 0px 0px 5px" 253 254 # toolbar_button = widgets.ToggleButton( 255 # value=False, 256 # tooltip="Toolbar", 257 # icon="wrench", 258 # layout=widgets.Layout(width="28px", height="28px", padding=padding), 259 # ) 260 261 # close_button = widgets.ToggleButton( 262 # value=False, 263 # tooltip="Close the tool", 264 # icon="times", 265 # button_style="primary", 266 # layout=widgets.Layout(height="28px", width="28px", padding=padding), 267 # ) 268 269 # toolbar = widgets.HBox([toolbar_button]) 270 271 # def toolbar_click(change): 272 # if change["new"]: 273 # toolbar.children = [toolbar_button, close_button] 274 # else: 275 # toolbar.children = [toolbar_button] 276 277 # toolbar_button.observe(toolbar_click, "value") 278 279 # def close_click(change): 280 # if change["new"]: 281 # toolbar_button.close() 282 # close_button.close() 283 # toolbar.close() 284 # basemap.close() 285 286 # close_button.observe(close_click, "value") 287 288 # rows = 2 289 # cols = 2 290 # grid = widgets.GridspecLayout(rows, cols, grid_gap="0px", layout=widgets.Layout(width="65px")) 291 292 # icons = ["folder-open", "map", "bluetooth", "area-chart"] 293 294 # for i in range(rows): 295 # for j in range(cols): 296 # grid[i, j] = widgets.Button(description="", button_style="primary", icon=icons[i*rows+j], --> 297 # layout=widgets.Layout(width="28px", padding="0px")) 298 299 # toolbar = widgets.VBox([toolbar_button]) 301 basemap = widgets.Dropdown( 302 options=['OpenStreetmap','roadmap','satellite'], 303 value=None, (...) 306 layout=widgets.Layout(width='250px') 307 ) 309 basemap_control = ipyleaflet.WidgetControl(widget=basemap, position='topright') File ~/Documents/geolog/geolog/geolog.py:151, in add_basemap(self, basemap, **kwargs) 121 tile_layer = ipyleaflet.TileLayer( 122 url=url, 123 name=name, 124 attribution=attribution, 125 **kwargs 126 ) 127 self.add_layer(tile_layer) 129 # def add_basemap(self, basemap, **kwargs): 130 # """ 131 # More user-friendly way to specify basemap. 132 133 # Args: 134 # basemap (must be string)- basemap of user choice. 135 # """ 136 # import xyzservices.providers as xyz 137 138 # if basemap.lower()=="roadmap": 139 # url = 'https://mt1.google.com/vt/lyrs=h&x={x}&y={y}&z={z}' 140 # self.add_tile_layer(url,name=basemap,**kwargs) 141 # elif basemap.lower()=="satellite": 142 # url = 'https://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}' 143 # self.add_tile_layer(url,name=basemap,**kwargs) 144 # else: 145 # try: 146 # basemap=eval(f"xyz.{basemap}") 147 # url = basemap.build_url() 148 # attribution = basemap.attribution 149 # self.add_tile_layer(url,name=basemap.name,attribution=attribution, **kwargs) 150 # except: --> 151 # raise ValueError(f"Basemap '{basemap}' not found.") 153 def add_basemap(m, basemap_name='OpenStreetMap', **kwargs): 154 """Add a basemap to a map object.""" ValueError: Basemap 'OpenStreetmap' not found.
Last update:
2023-05-12