Google maps for Jupyter notebooks

Overview

Travis build status Latest version released on PyPi Latest documentation

gmaps

gmaps is a plugin for including interactive Google maps in the IPython Notebook.

Let's plot a heatmap of taxi pickups in San Francisco:

import gmaps
import gmaps.datasets
gmaps.configure(api_key="AI...") # Your Google API key

# load a Numpy array of (latitude, longitude) pairs
locations = gmaps.datasets.load_dataset("taxi_rides")

fig = gmaps.figure()
fig.add_layer(gmaps.heatmap_layer(locations))
fig

docs/source/_images/taxi_example.png

We can also plot chloropleth maps using GeoJSON:

from matplotlib.cm import viridis
from matplotlib.colors import to_hex

import gmaps
import gmaps.datasets
import gmaps.geojson_geometries

gmaps.configure(api_key="AI...") # Your Google API key

countries_geojson = gmaps.geojson_geometries.load_geometry('countries') # Load GeoJSON of countries

rows = gmaps.datasets.load_dataset('gini') # 'rows' is a list of tuples
country2gini = dict(rows) # dictionary mapping 'country' -> gini coefficient
min_gini = min(country2gini.values())
max_gini = max(country2gini.values())
gini_range = max_gini - min_gini

def calculate_color(gini):
    """
    Convert the GINI coefficient to a color
    """
    # make gini a number between 0 and 1
    normalized_gini = (gini - min_gini) / gini_range

    # invert gini so that high inequality gives dark color
    inverse_gini = 1.0 - normalized_gini

    # transform the gini coefficient to a matplotlib color
    mpl_color = viridis(inverse_gini)

    # transform from a matplotlib color to a valid CSS color
    gmaps_color = to_hex(mpl_color, keep_alpha=False)

    return gmaps_color

# Calculate a color for each GeoJSON feature
colors = []
for feature in countries_geojson['features']:
    country_name = feature['properties']['name']
    try:
        gini = country2gini[country_name]
        color = calculate_color(gini)
    except KeyError:
        # no GINI for that country: return default color
        color = (0, 0, 0, 0.3)
    colors.append(color)

fig = gmaps.figure()
gini_layer = gmaps.geojson_layer(
    countries_geojson,
    fill_color=colors,
    stroke_color=colors,
    fill_opacity=0.8)
fig.add_layer(gini_layer)
fig

docs/source/_images/geojson-2.png

Or, for coffee fans, a map of all Starbucks in the UK:

import gmaps
import gmaps.datasets
gmaps.configure(api_key="AI...") # Your Google API key

df = gmaps.datasets.load_dataset_as_df('starbucks_kfc_uk')

starbucks_df = df[df['chain_name'] == 'starbucks']
starbucks_df = starbucks_df[['latitude', 'longitude']]

starbucks_layer = gmaps.symbol_layer(
    starbucks_df, fill_color="green", stroke_color="green", scale=2
)
fig = gmaps.figure()
fig.add_layer(starbucks_layer)
fig

docs/source/_images/starbucks-symbols.png

Installation

Installing jupyter-gmaps with conda

The easiest way to install gmaps is with conda:

$ conda install -c conda-forge gmaps

Installing jupyter-gmaps with pip

Make sure that you have enabled ipywidgets widgets extensions:

$ jupyter nbextension enable --py --sys-prefix widgetsnbextension

You can then install gmaps with:

$ pip install gmaps

Then tell Jupyter to load the extension with:

$ jupyter nbextension enable --py --sys-prefix gmaps

Installing jupyter-gmaps for JupyterLab

To use jupyter-gmaps with JupyterLab, you will need to install the jupyter widgets extension for JupyterLab:

$ jupyter labextension install @jupyter-widgets/jupyterlab-manager

You can then install jupyter-gmaps via pip (or conda):

$ pip install gmaps

Next time you open JupyterLab, you will be prompted to rebuild JupyterLab: this is necessary to include the jupyter-gmaps frontend code into your JupyterLab installation. You can also trigger this directly on the command line with:

$ jupyter lab build

Support for JupyterLab pre 1.0

To install jupyter-gmaps with versions of JupyterLab pre 1.0, you will need to pin the version of jupyterlab-manager and of jupyter-gmaps. Find the version of the jupyterlab-manager that you need from this compatibility table. For instance, for JupyterLab 0.35.x:

$ jupyter labextension install @jupyter-widgets/[email protected]

Then, install a pinned version of jupyter-gmaps:

$ pip install gmaps==0.8.4

You will then need to rebuild JupyterLab with:

$ jupyter lab build

Google API keys

To access Google maps, gmaps needs a Google API key. This key tells Google who you are, presumably so it can keep track of rate limits and such things. To create an API key, follow the instructions in the documentation. Once you have an API key, pass it to gmaps before creating widgets:

gmaps.configure(api_key="AI...")

Documentation

Documentation for gmaps is available here.

Similar libraries

The current version of this library is inspired by the ipyleaflet notebook widget extension. This extension aims to provide much of the same functionality as gmaps, but for leaflet maps, not Google maps.

Vision and roadmap

Jupyter-gmaps is built for data scientists. Data scientists should be able to visualize geographical data on a map with minimal friction. Beyond just visualization, they should be able to integrate gmaps into their widgets so they can build interactive applications.

We see the priorities of gmaps as:

  • responding to events, like user clicks, so that maps can be used interactively.
  • adding greater flexibility and customisability (e.g. choosing map styles)

Issue reporting and contributing

Report issues using the github issue tracker.

Contributions are welcome. Read the CONTRIBUTING guide to learn how to contribute.

Comments
  • Does not display output

    Does not display output

    Running the following code does not produce any output on Ipython Notebook v3.2.0 and Python 2.7.10

    import gmaps
    
    data = [ [ 37.782551,-122.445368 ],
             [ 37.782745,-122.444586 ],
             [ 37.782842,-122.443858 ] ]
    
    gmaps.heatmap(data)
    

    No Warnings (except for :0: FutureWarning: IPython widgets are experimental and may change in the future.) and No Errors.

    opened by Mohitsharma44 43
  • Failed to display Jupyter Widget

    Failed to display Jupyter Widget

    I am having issues displaying gmaps once i upgraded anaconda to jupyter 5.0. are there any known issues? when i did the initial installation, added dependencies, when i try to run it instead of displaying the map like before i get the following:

    A Jupyter Widget Thanks

    opened by tespintom 27
  • Error: module 'gmaps' has no attribute ' '

    Error: module 'gmaps' has no attribute ' '

    Hallo, I am trying to use the gmaps package on jupyter notebook. my python version is: 3.5 my jupyter version is: 5.2.1 my gmaps: 7.0

    i started to install using pip but I get the error "module 'gmaps' has no attribute ' ' " for every method i am trying to use (i dont get error for the line "import gmaps"). than, i tried to install using conda, using this command: conda install -c conda-forge gmaps -v and I get the attached error.

    is someone know what I am doing wrong?

    ===> LINKING PACKAGE: conda-forge::gmaps-0.7.0-py35_0 <=== prefix=/home/naamah/anaconda3 source=/home/naamah/anaconda3/pkgs/gmaps-0.7.0-py35_0

    $ /bin/bash -x /home/naamah/anaconda3/bin/.gmaps-post-link.sh ==> cwd: /home/naamah/anaconda3/bin <== ==> exit code: 1 <== ==> stdout <== b'' ==> stderr <== b'+ /home/naamah/anaconda3/bin/jupyter-nbextension enable gmaps --py --sys-prefix\nTraceback (most recent call last):\n File "/home/naamah/anaconda3/bin/jupyter-nbextension", line 11, in \n sys.exit(main())\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/jupyter_core/application.py", line 266, in launch_instance\n return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/traitlets/config/application.py", line 658, in launch_instance\n app.start()\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 988, in start\n super(NBExtensionApp, self).start()\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/jupyter_core/application.py", line 255, in start\n self.subapp.start()\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 896, in start\n self.toggle_nbextension_python(self.extra_args[0])\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 872, in toggle_nbextension_python\n logger=self.log)\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 483, in enable_nbextension_python\n logger=logger)\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 380, in _set_nbextension_state_python\n m, nbexts = _get_nbextension_metadata(module)\n File "/home/naamah/anaconda3/lib/python3.5/site-packages/notebook/nbextensions.py", line 1125, in _get_nbextension_metadata\n 'it is missing the _jupyter_nbextension_paths() method.'.format(module))\nKeyError: 'The Python module gmaps is not a valid nbextension, it is missing the _jupyter_nbextension_paths() method.'\n'

    An error occurred while installing package 'conda-forge::gmaps-0.7.0-py35_0'. LinkError: post-link script failed for package conda-forge::gmaps-0.7.0-py35_0 running your command again with -v will provide additional information location of failed script: /home/naamah/anaconda3/bin/.gmaps-post-link.sh ==> script messages <==

    Attempting to roll back.

    ===> REVERSING PACKAGE LINK: conda-forge::gmaps-0.7.0-py35_0 <=== prefix=/home/naamah/anaconda3

    An unexpected error has occurred. Please consider posting the following information to the conda GitHub issue tracker at:

    https://github.com/conda/conda/issues
    

    Current conda install:

               platform : linux-64
          conda version : 4.3.29
       conda is private : False
      conda-env version : 4.3.29
    conda-build version : 3.0.30
         python version : 3.5.4.final.0
       requests version : 2.18.4
       root environment : /home/naamah/anaconda3  (writable)
    default environment : /home/naamah/anaconda3
       envs directories : /home/naamah/anaconda3/envs
                          /home/naamah/.conda/envs
          package cache : /home/naamah/anaconda3/pkgs
                          /home/naamah/.conda/pkgs
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.continuum.io/pkgs/main/linux-64
                          https://repo.continuum.io/pkgs/main/noarch
                          https://repo.continuum.io/pkgs/free/linux-64
                          https://repo.continuum.io/pkgs/free/noarch
                          https://repo.continuum.io/pkgs/r/linux-64
                          https://repo.continuum.io/pkgs/r/noarch
                          https://repo.continuum.io/pkgs/pro/linux-64
                          https://repo.continuum.io/pkgs/pro/noarch
            config file : None
             netrc file : None
           offline mode : False
             user-agent : conda/4.3.29 requests/2.18.4 CPython/3.5.4 Linux/4.4.0-97-generic debian/stretch/sid glibc/2.23    
                UID:GID : 1001:1001
    

    $ /home/naamah/anaconda3/bin/conda install -c conda-forge gmaps -v

    Traceback (most recent call last):
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 497, in run_script
        subprocess_call(command_args, env=env, path=dirname(path))
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/gateways/subprocess.py", line 56, in subprocess_call
        output=_format_output(command_str, path, rc, stdout, stderr))
    subprocess.CalledProcessError: Command '['/bin/bash', '-x', '/home/naamah/anaconda3/bin/.gmaps-post-link.sh']' returned non-zero exit status 1
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 327, in _execute_actions
        run_script(target_prefix, Dist(pkg_data), 'post-unlink' if is_unlink else 'post-link')
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 513, in run_script
        raise LinkError(message)
    conda.exceptions.LinkError: post-link script failed for package conda-forge::gmaps-0.7.0-py35_0
    running your command again with `-v` will provide additional information
    location of failed script: /home/naamah/anaconda3/bin/.gmaps-post-link.sh
    ==> script messages <==
    <None>
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 281, in execute
        pkg_data, actions)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 344, in _execute_actions
        reverse_excs,
    conda.CondaMultiError: post-link script failed for package conda-forge::gmaps-0.7.0-py35_0
    running your command again with `-v` will provide additional information
    location of failed script: /home/naamah/anaconda3/bin/.gmaps-post-link.sh
    ==> script messages <==
    <None>
    
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/exceptions.py", line 640, in conda_exception_handler
        return_value = func(*args, **kwargs)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/cli/main.py", line 140, in _main
        exit_code = args.func(args, p)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/cli/main_install.py", line 80, in execute
        install(args, parser, 'install')
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/cli/install.py", line 326, in install
        execute_actions(actions, index, verbose=not context.quiet)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/plan.py", line 830, in execute_actions
        execute_instructions(plan, index, verbose)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/instructions.py", line 247, in execute_instructions
        cmd(state, arg)
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/instructions.py", line 108, in UNLINKLINKTRANSACTION_CMD
        txn.execute()
      File "/home/naamah/anaconda3/lib/python3.5/site-packages/conda/core/link.py", line 297, in execute
        rollback_excs,
    conda.CondaMultiError: post-link script failed for package conda-forge::gmaps-0.7.0-py35_0
    running your command again with `-v` will provide additional information
    location of failed script: /home/naamah/anaconda3/bin/.gmaps-post-link.sh
    ==> script messages <==
    <None>
    
    opened by naamahoresh 24
  • AttributeError

    AttributeError

    Hi,

    I followed install instructions but always got this same error: AttributeError: module 'ipywidgets.widgets.trait_types' has no attribute 'InstanceDict'

    How can I fix it? Thanks in advance, Jaime

    opened by jaimebayes 20
  • GMaps does not show up

    GMaps does not show up

    I have tried running the simple example:

    import gmaps
    import gmaps.datasets
    
    gmaps.configure(api_key="AIzaSyDOESksOPLhqEw...")
    
    m = gmaps.Map()
    m
    

    but nothing shows up - the kernel keeps running forever. In the terminal it says:

    (404 GET /static/jupyter-gmaps.js?v=20160823123004 (127.0.0.1) 9.95ms referer=http://localhost:8888/notebooks/test-gmaps.ipynb)
    
    opened by quang-ha 16
  • Room for improvement on directions interface

    Room for improvement on directions interface

    (from #60)

    Some room for improvements, here are some reflections:

    • It would be great to be able to pass as data either lat/lon tuples or the kind of dictionaries returned by googlemaps API.
    import googlemaps
    import gmaps
    
    client = googlemaps.Client(">>>> fill in your API key <<<<")
    location = client.geocode("Toulouse")
    print (location) # have a look!
    gmaps.add_layer(Directions(data=[client.geocode("Toulouse"), client.geocode("Paris")]))
    
    • Also, we hardcoded the travelmode parameter which could be passed as parameter (though I have no idea how to pass something more than data). More generally, it would be great to have a close interface to googlemaps and write:
    # from googlemaps documentation
    directions_result = client.directions("Sydney Town Hall",
                                         "Parramatta, NSW",
                                         mode="transit",
                                         departure_time=now)
    # how about this ?
    gmaps.add_layer(Directions("Sydney Town Hall",
                               "Parramatta, NSW",
                               mode="transit",
                               departure_time=now))
    

    For future references, there is a good overview of the interface here.

    enhancement 
    opened by xoolive 13
  • Failed to display Jupyter Widget of type Figure.

    Failed to display Jupyter Widget of type Figure.

    I'm trying to display a map in my jupyter notebook, however I am getting this error when running the cell. I followed the setup closely although there is something just not adding up.. I'm new to python and tried to follow a couple of the other threads similar to this although still no joy. I have (hopefully) attached the image below of how my console looks. Any help would be greatly appreciated

    image

    image

    opened by Stazzy1 11
  • Map not showing on notebook

    Map not showing on notebook

    Hi,

    I tried using the code for the San Francisco taxi in my notebook, but the map does not appear on my notebook. Not getting any error messages. Any idea what the problem might be?

    Thanks, Oren

    opened by orenp85 10
  • Inside a Method

    Inside a Method

    Hi Pascal:

    I've tried to use the code inside a method, but when i try to print the map it just doesnt print anything and keeps running, only works when i do it outside i have tried to return the map from the method but still doesnt work, i dont know if i am doing something wrong, could you help me? here is the code.

    import gmaps
    import gmaps.datasets
    gmaps.configure(api_key="AI...")
    
    m = gmaps.Map()
    
    def generate_map():
        geneva = (46.2, 6.1)
        montreux = (46.4, 6.9)
        zurich = (47.4, 8.5)
        geneva2zurich = gmaps.directions_layer(geneva, zurich)
        m.add_layer(geneva2zurich)
        return m
    
    def mapa ():
        m = generate_map()
        m
    
    mapa()
    
    opened by Nickl55 10
  • Error loading gmaps: `AttributeError: module 'gmaps' has no attribute 'configure'`

    Error loading gmaps: `AttributeError: module 'gmaps' has no attribute 'configure'`

    Has anyone experience this issue:

    AttributeError Traceback (most recent call last) in () 1 import gmaps ----> 2 gmaps.configure(api_key='AIzaSyBJrDxxxxxxxxxxxxxxxxxx')

    AttributeError: module 'gmaps' has no attribute 'configure'

    opened by ianweb1000 9
  • 'Oops! Something went wrong' in map window

    'Oops! Something went wrong' in map window

    I am trying to use this to create a heatmap of some (lat, long) pairs that I have. Before I use it on my data, I wanted to recreate what you have in the readme. When I run that code, the heatmap flashes for a second, then switches to the image, below. When I run the cell for a second time, the widget loads only the download button and a big white space, approximately the size of the figure. I have also copied in the contents of my javascript console for reference. Any guidance?

    image

    main.min.js:41579 actions jupyter-notebook:find-and-replace does not exist, still binding it in case it will be defined later... MenuBar.bind_events @ main.min.js:41579 main.min.js:19269 load_extensions Arguments(2) main.min.js:42481 Loaded moment locale en main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:23490 HTML Sanitizer style removed Object main.min.js:23490 HTML Sanitizer tr.style changed Object main.min.js:19246 Loading extension: jupyter-gmaps/extension main.min.js:32903 Session: kernel_created (3c393d98-3761-469d-9fbe-3905d1850c67) main.min.js:32059 Starting WebSockets: ws://localhost:8888/api/kernels/dc6e74cd-753c-4319-857d-a8f726bc3f9e TeX-AMS-MML_HTMLorMML-full.js?rev=2.6.0:67 Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: about:blank TeX-AMS-MML_HTMLorMML-full.js?rev=2.6.0:67 Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: http://localhost:8888/static/components/MathJax/fonts/HTML-CSS/STIX-Web/woff/STIXMathJax_Main-Italic.woff?rev=2.6.0 Proj2-Notebook-Alla.ipynb:1 Access to Font at 'about:blank' from origin 'http://localhost:8888' has been blocked by CORS policy: Invalid response. Origin 'http://localhost:8888' is therefore not allowed access. main.min.js:31703 Kernel: kernel_connected (dc6e74cd-753c-4319-857d-a8f726bc3f9e) TeX-AMS-MML_HTMLorMML-full.js?rev=2.6.0:67 Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: http://localhost:8888/static/components/MathJax/fonts/HTML-CSS/STIX-Web/woff/STIXMathJax_Main-Regular.woff?rev=2.6.0 main.min.js:31703 Kernel: kernel_ready (dc6e74cd-753c-4319-857d-a8f726bc3f9e) main.min.js:19246 Loading extension: jupyter-js-widgets/extension main.min.js:29646 Ignoring untrusted application/vnd.jupyter.widget-view+json output. :8888/nbextensions/jupyter-gmaps/index.js?v=20180412054309:14611 Releasing Google Maps Proj2-Notebook-Alla.ipynb#Weather-Data-Pull:1 Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2 controls.js:43 Slow network is detected. See https://www.chromestatus.com/feature/5636954674692096 for more details. Fallback font will be used while loading: https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2 maps.googleapis.com/maps/api/js?callback=google_maps_api_provider_initializator&key=AIzaSyCC1NXBun_gr1xqwwpdoeRAF0YDjH73VQY&libraries=visualization:42 Google Maps API error: ApiNotActivatedMapError https://developers.google.com/maps/documentation/javascript/error-messages#api-not-activated-map-error _.Ib @ maps.googleapis.com/maps/api/js?callback=google_maps_api_provider_initializator&key=AIzaSyCC1NXBun_gr1xqwwpdoeRAF0YDjH73VQY&libraries=visualization:42

    opened by allahale 9
  • Cannot Install gmaps on Linux using Miniconda

    Cannot Install gmaps on Linux using Miniconda

    Hello, I have an issue with gmaps installation.

    I followed the conda installation instructions and there seems to be an issue with the process... looks like a link error?

    Thanks for your help in advance!

    Linux <mymachine> 5.15.0-52-generic #58~20.04.1-Ubuntu SMP Thu Oct 13 13:09:46 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
    

    Some useful versions:

    Python 3.9.15
    conda 22.9.0
    
    (base) user@location:~/<some dir>$ conda install -c conda-forge gmaps
    Collecting package metadata (current_repodata.json): done
    Solving environment: done
    
    ## Package Plan ##
    
      environment location: /home/sam/miniconda3
    
      added / updated specs:
        - gmaps
    
    
    The following packages will be downloaded:
    
        package                    |            build
        ---------------------------|-----------------
        six-1.16.0                 |     pyh6c4a22f_0          14 KB  conda-forge
        tornado-6.1                |   py39hb9d737c_3         649 KB  conda-forge
        zeromq-4.3.4               |       h9c3ff4c_1         351 KB  conda-forge
        ------------------------------------------------------------
                                               Total:        1014 KB
    
    The following NEW packages will be INSTALLED:
    
      asttokens          conda-forge/noarch::asttokens-2.1.0-pyhd8ed1ab_0 None
      attrs              conda-forge/noarch::attrs-22.1.0-pyh71513ae_1 None
      backcall           conda-forge/noarch::backcall-0.2.0-pyh9f0ad1d_0 None
      backports          conda-forge/noarch::backports-1.0-pyhd8ed1ab_3 None
      backports.functoo~ conda-forge/noarch::backports.functools_lru_cache-1.6.4-pyhd8ed1ab_0 None
      decorator          conda-forge/noarch::decorator-5.1.1-pyhd8ed1ab_0 None
      entrypoints        conda-forge/noarch::entrypoints-0.4-pyhd8ed1ab_0 None
      executing          conda-forge/noarch::executing-1.2.0-pyhd8ed1ab_0 None
      geojson            conda-forge/noarch::geojson-2.5.0-py_0 None
      gmaps              conda-forge/noarch::gmaps-0.9.0-py_0 None
      importlib-metadata conda-forge/noarch::importlib-metadata-5.1.0-pyha770c72_0 None
      importlib_resourc~ conda-forge/noarch::importlib_resources-5.10.0-pyhd8ed1ab_0 None
      ipykernel          conda-forge/linux-64::ipykernel-5.5.5-py39hef51801_0 None
      ipython            conda-forge/noarch::ipython-8.6.0-pyh41d4057_1 None
      ipython_genutils   conda-forge/noarch::ipython_genutils-0.2.0-py_1 None
      ipywidgets         conda-forge/noarch::ipywidgets-8.0.2-pyhd8ed1ab_1 None
      jedi               conda-forge/noarch::jedi-0.18.2-pyhd8ed1ab_0 None
      jsonschema         conda-forge/noarch::jsonschema-4.17.1-pyhd8ed1ab_0 None
      jupyter_client     conda-forge/noarch::jupyter_client-7.0.6-pyhd8ed1ab_0 None
      jupyter_core       conda-forge/linux-64::jupyter_core-5.0.0-py39hf3d152e_0 None
      jupyterlab_widgets conda-forge/noarch::jupyterlab_widgets-3.0.3-pyhd8ed1ab_0 None
      libsodium          conda-forge/linux-64::libsodium-1.0.18-h36c2ea0_1 None
      matplotlib-inline  conda-forge/noarch::matplotlib-inline-0.1.6-pyhd8ed1ab_0 None
      nbformat           conda-forge/noarch::nbformat-5.7.0-pyhd8ed1ab_0 None
      nest-asyncio       conda-forge/noarch::nest-asyncio-1.5.6-pyhd8ed1ab_0 None
      parso              conda-forge/noarch::parso-0.8.3-pyhd8ed1ab_0 None
      pexpect            conda-forge/noarch::pexpect-4.8.0-pyh1a96a4e_2 None
      pickleshare        conda-forge/noarch::pickleshare-0.7.5-py_1003 None
      pkgutil-resolve-n~ conda-forge/noarch::pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0 None
      platformdirs       conda-forge/noarch::platformdirs-2.5.2-pyhd8ed1ab_1 None
      prompt-toolkit     conda-forge/noarch::prompt-toolkit-3.0.33-pyha770c72_0 None
      ptyprocess         conda-forge/noarch::ptyprocess-0.7.0-pyhd3deb0d_0 None
      pure_eval          conda-forge/noarch::pure_eval-0.2.2-pyhd8ed1ab_0 None
      pygments           conda-forge/noarch::pygments-2.13.0-pyhd8ed1ab_0 None
      pyrsistent         pkgs/main/linux-64::pyrsistent-0.18.0-py39heee7806_0 None
      python-dateutil    conda-forge/noarch::python-dateutil-2.8.2-pyhd8ed1ab_0 None
      python-fastjsonsc~ conda-forge/noarch::python-fastjsonschema-2.16.2-pyhd8ed1ab_0 None
      python_abi         conda-forge/linux-64::python_abi-3.9-2_cp39 None
      pyzmq              conda-forge/linux-64::pyzmq-19.0.2-py39hb69f2a1_2 None
      six                conda-forge/noarch::six-1.16.0-pyh6c4a22f_0 None
      stack_data         conda-forge/noarch::stack_data-0.6.1-pyhd8ed1ab_0 None
      tornado            conda-forge/linux-64::tornado-6.1-py39hb9d737c_3 None
      traitlets          conda-forge/noarch::traitlets-5.5.0-pyhd8ed1ab_0 None
      typing_extensions  conda-forge/noarch::typing_extensions-4.4.0-pyha770c72_0 None
      wcwidth            conda-forge/noarch::wcwidth-0.2.5-pyh9f0ad1d_2 None
      widgetsnbextension conda-forge/noarch::widgetsnbextension-4.0.3-pyhd8ed1ab_0 None
      zeromq             conda-forge/linux-64::zeromq-4.3.4-h9c3ff4c_1 None
      zipp               conda-forge/noarch::zipp-3.10.0-pyhd8ed1ab_0 None
    
    The following packages will be UPDATED:
    
      conda              pkgs/main::conda-22.9.0-py39h06a4308_0 --> conda-forge::conda-22.9.0-py39hf3d152e_2 None
    
    The following packages will be SUPERSEDED by a higher-priority channel:
    
      ca-certificates    pkgs/main::ca-certificates-2022.10.11~ --> conda-forge::ca-certificates-2022.9.24-ha878542_0 None
      certifi            pkgs/main/linux-64::certifi-2022.9.24~ --> conda-forge/noarch::certifi-2022.9.24-pyhd8ed1ab_0 None
    
    
    Proceed ([y]/n)? y
    
    
    Downloading and Extracting Packages
    zeromq-4.3.4         | 351 KB    | #################################################################################################################################################### | 100% 
    six-1.16.0           | 14 KB     | #################################################################################################################################################### | 100% 
    tornado-6.1          | 649 KB    | #################################################################################################################################################### | 100% 
    Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    ERROR conda.core.link:_execute(733): An error occurred while installing package 'conda-forge::gmaps-0.9.0-py_0'.
    Rolling back transaction: done
    
    LinkError: post-link script failed for package conda-forge::gmaps-0.9.0-py_0
    location of failed script: /home/sam/miniconda3/bin/.gmaps-post-link.sh
    ==> script messages <==
    <None>
    ==> script output <==
    stdout: 
    stderr: /home/<user>/miniconda3/bin/.gmaps-post-link.sh: line 1: /home/<user>/miniconda3/bin/jupyter-nbextension: No such file or directory
    
    return code: 127
    
    ()
    
    
    opened by OliverHeilmann 0
  • nose seems to be dead

    nose seems to be dead

    I think that nose, referred to in various places in the documentation, has been succeeded by nose2, which seems to work with the existing tests.

    fwiw, I found that pytest also works with the tests and throws out some deprecations that nose2 did not report (at least by default - and I couldn't coerce it to do so).

    opened by timcoote 0
  • jupyter-gmaps loaded but cannot be instantiated

    jupyter-gmaps loaded but cannot be instantiated

    Issue:

    I was able to successfully create gmaps figure object but when tried to display the map in a jupyter cell, receiving the following error ->

    [Open Browser Console for more detailed log - Double click to close this message] Model class 'FigureModel' from module 'jupyter-gmaps' is loaded but can not be instantiated TypeError: Class constructor L cannot be invoked without 'new' at new t (http://localhost:8888/nbextensions/jupyter-gmaps/index.js?v=20220906161950:39:179771) at u._make_model (http://localhost:8888/nbextensions/jupyter-js-widgets/extension.js?v=20220906161950:2:747368)

    It was working fine until few weeks ago. I tried re-installing jupyter-gmaps and enabling the gmaps jupyter extension, created fresh virtual environment, tried reinstalling node.js, reinstalling jupyter etc. but got no luck. I suspect some package version issues could be a reason for this as this setup is working fine until few weeks ago please help.

    Note:- also ipywidgets should not be the issue because i was able to create widgets using it and they are working fine in the same jupyter notebook.

    Input code used to generate a figure :

    import gmaps
    gmaps.configure(api_key=google_maps_key)
    fig = gmaps.figure()
    markers = gmaps.marker_layer(marker_locations) # marker_locations = [(latitude1, longitude1), (latitude2, longitude2),......,]
    fig.add_layer(markers)
    

    Requirements file:

    python=3.7.0 tqdm pandas openpyxl xlrd requests ortools jupyter gmaps

    Screen shot of the error: image

    opened by ylnhari 4
  • Trouble when installing

    Trouble when installing

    when I run this command in my terminal:

    jupyter nbextension enable --py --sys-prefix gmaps

    From the installation tutorial, I get this error.

    AttributeError: module 'ipywidgets.widgets.trait_types' has no attribute 'InstanceDict'

    I am not able to see any maps in jupyter notebook, it shows this message:

    A Jupyter widget could not be displayed because the widget state could not be found. This could happen if the kernel storing the widget is no longer available, or if the widget state was not saved in the notebook. You may be able to create the widget by running the appropriate cells.

    opened by ArturoVelasquez 0
  • Possible bug in gmaps or ipywidgets.embed.embed_minimal_html

    Possible bug in gmaps or ipywidgets.embed.embed_minimal_html

    During the generation of multiple heatmaps at the same location, I noticed the generated html files keep increasing in size without an equivalent increase in the volume at a given map. Here are the resulting file sizes when I generate the same map with the same data for 200 times:

    import os
    import shutil
    import tempfile
    from pathlib import Path
    
    import gmaps
    import numpy as np
    from ipywidgets.embed import embed_minimal_html
    
    tmp = tempfile.mkdtemp()
    coordinates = np.random.randint(10, 50, (50, 2)).astype('float64')
    for i in range(200):
        center = 20, 30
        fig = gmaps.figure(center=center, zoom_level=10)
        heatmap_layer = gmaps.heatmap_layer(coordinates)
        heatmap_layer.max_intensity = 100
        heatmap_layer.point_radius = 5
        fig.add_layer(heatmap_layer)
        p = Path(tmp) / f'{i}.html'
        embed_minimal_html(p.as_posix(), views=[fig])
        print(f'Current: {p.name}: {os.path.getsize(p.as_posix()) / 1024 ** 2} MB')
    shutil.rmtree(tmp)
    

    Result:

    Current: 0.html: 0.01 MB
    Current: 1.html: 0.01 MB
    Current: 2.html: 0.02 MB
    Current: 3.html: 0.02 MB
    Current: 4.html: 0.03 MB
    Current: 5.html: 0.04 MB
    Current: 6.html: 0.04 MB
    Current: 7.html: 0.05 MB
    Current: 8.html: 0.05 MB
    Current: 9.html: 0.06 MB
    Current: 10.html: 0.07 MB
    Current: 11.html: 0.07 MB
    Current: 12.html: 0.08 MB
    Current: 13.html: 0.08 MB
    Current: 14.html: 0.09 MB
    Current: 15.html: 0.1 MB
    Current: 16.html: 0.1 MB
    Current: 17.html: 0.11 MB
    Current: 18.html: 0.11 MB
    Current: 19.html: 0.12 MB
    Current: 20.html: 0.13 MB
    Current: 21.html: 0.13 MB
    Current: 22.html: 0.14 MB
    Current: 23.html: 0.14 MB
    Current: 24.html: 0.15 MB
    Current: 25.html: 0.16 MB
    Current: 26.html: 0.16 MB
    Current: 27.html: 0.17 MB
    Current: 28.html: 0.17 MB
    Current: 29.html: 0.18 MB
    Current: 30.html: 0.19 MB
    Current: 31.html: 0.19 MB
    Current: 32.html: 0.2 MB
    Current: 33.html: 0.2 MB
    Current: 34.html: 0.21 MB
    Current: 35.html: 0.22 MB
    Current: 36.html: 0.22 MB
    Current: 37.html: 0.23 MB
    Current: 38.html: 0.23 MB
    Current: 39.html: 0.24 MB
    Current: 40.html: 0.25 MB
    Current: 41.html: 0.25 MB
    Current: 42.html: 0.26 MB
    Current: 43.html: 0.26 MB
    Current: 44.html: 0.27 MB
    Current: 45.html: 0.28 MB
    Current: 46.html: 0.28 MB
    Current: 47.html: 0.29 MB
    Current: 48.html: 0.29 MB
    Current: 49.html: 0.3 MB
    Current: 50.html: 0.31 MB
    Current: 51.html: 0.31 MB
    Current: 52.html: 0.32 MB
    Current: 53.html: 0.32 MB
    Current: 54.html: 0.33 MB
    Current: 55.html: 0.34 MB
    Current: 56.html: 0.34 MB
    Current: 57.html: 0.35 MB
    Current: 58.html: 0.35 MB
    Current: 59.html: 0.36 MB
    Current: 60.html: 0.37 MB
    Current: 61.html: 0.37 MB
    Current: 62.html: 0.38 MB
    Current: 63.html: 0.38 MB
    Current: 64.html: 0.39 MB
    Current: 65.html: 0.39 MB
    Current: 66.html: 0.4 MB
    Current: 67.html: 0.41 MB
    Current: 68.html: 0.41 MB
    Current: 69.html: 0.42 MB
    Current: 70.html: 0.42 MB
    Current: 71.html: 0.43 MB
    Current: 72.html: 0.44 MB
    Current: 73.html: 0.44 MB
    Current: 74.html: 0.45 MB
    Current: 75.html: 0.45 MB
    Current: 76.html: 0.46 MB
    Current: 77.html: 0.47 MB
    Current: 78.html: 0.47 MB
    Current: 79.html: 0.48 MB
    Current: 80.html: 0.48 MB
    Current: 81.html: 0.49 MB
    Current: 82.html: 0.5 MB
    Current: 83.html: 0.5 MB
    Current: 84.html: 0.51 MB
    Current: 85.html: 0.51 MB
    Current: 86.html: 0.52 MB
    Current: 87.html: 0.53 MB
    Current: 88.html: 0.53 MB
    Current: 89.html: 0.54 MB
    Current: 90.html: 0.54 MB
    Current: 91.html: 0.55 MB
    Current: 92.html: 0.56 MB
    Current: 93.html: 0.56 MB
    Current: 94.html: 0.57 MB
    Current: 95.html: 0.57 MB
    Current: 96.html: 0.58 MB
    Current: 97.html: 0.59 MB
    Current: 98.html: 0.59 MB
    Current: 99.html: 0.6 MB
    Current: 100.html: 0.6 MB
    Current: 101.html: 0.61 MB
    Current: 102.html: 0.62 MB
    Current: 103.html: 0.62 MB
    Current: 104.html: 0.63 MB
    Current: 105.html: 0.63 MB
    Current: 106.html: 0.64 MB
    Current: 107.html: 0.65 MB
    Current: 108.html: 0.65 MB
    Current: 109.html: 0.66 MB
    Current: 110.html: 0.66 MB
    Current: 111.html: 0.67 MB
    Current: 112.html: 0.68 MB
    Current: 113.html: 0.68 MB
    Current: 114.html: 0.69 MB
    Current: 115.html: 0.69 MB
    Current: 116.html: 0.7 MB
    Current: 117.html: 0.71 MB
    Current: 118.html: 0.71 MB
    Current: 119.html: 0.72 MB
    Current: 120.html: 0.72 MB
    Current: 121.html: 0.73 MB
    Current: 122.html: 0.74 MB
    Current: 123.html: 0.74 MB
    Current: 124.html: 0.75 MB
    Current: 125.html: 0.75 MB
    Current: 126.html: 0.76 MB
    Current: 127.html: 0.77 MB
    Current: 128.html: 0.77 MB
    Current: 129.html: 0.78 MB
    Current: 130.html: 0.78 MB
    Current: 131.html: 0.79 MB
    Current: 132.html: 0.8 MB
    Current: 133.html: 0.8 MB
    Current: 134.html: 0.81 MB
    Current: 135.html: 0.81 MB
    Current: 136.html: 0.82 MB
    Current: 137.html: 0.82 MB
    Current: 138.html: 0.83 MB
    Current: 139.html: 0.84 MB
    Current: 140.html: 0.84 MB
    Current: 141.html: 0.85 MB
    Current: 142.html: 0.85 MB
    Current: 143.html: 0.86 MB
    Current: 144.html: 0.87 MB
    Current: 145.html: 0.87 MB
    Current: 146.html: 0.88 MB
    Current: 147.html: 0.88 MB
    Current: 148.html: 0.89 MB
    Current: 149.html: 0.9 MB
    Current: 150.html: 0.9 MB
    Current: 151.html: 0.91 MB
    Current: 152.html: 0.91 MB
    Current: 153.html: 0.92 MB
    Current: 154.html: 0.93 MB
    Current: 155.html: 0.93 MB
    Current: 156.html: 0.94 MB
    Current: 157.html: 0.94 MB
    Current: 158.html: 0.95 MB
    Current: 159.html: 0.96 MB
    Current: 160.html: 0.96 MB
    Current: 161.html: 0.97 MB
    Current: 162.html: 0.97 MB
    Current: 163.html: 0.98 MB
    Current: 164.html: 0.99 MB
    Current: 165.html: 0.99 MB
    Current: 166.html: 1.0 MB
    Current: 167.html: 1.0 MB
    Current: 168.html: 1.01 MB
    Current: 169.html: 1.02 MB
    Current: 170.html: 1.02 MB
    Current: 171.html: 1.03 MB
    Current: 172.html: 1.03 MB
    Current: 173.html: 1.04 MB
    Current: 174.html: 1.05 MB
    Current: 175.html: 1.05 MB
    Current: 176.html: 1.06 MB
    Current: 177.html: 1.06 MB
    Current: 178.html: 1.07 MB
    Current: 179.html: 1.08 MB
    Current: 180.html: 1.08 MB
    Current: 181.html: 1.09 MB
    Current: 182.html: 1.09 MB
    Current: 183.html: 1.1 MB
    Current: 184.html: 1.11 MB
    Current: 185.html: 1.11 MB
    Current: 186.html: 1.12 MB
    Current: 187.html: 1.12 MB
    Current: 188.html: 1.13 MB
    Current: 189.html: 1.14 MB
    Current: 190.html: 1.14 MB
    Current: 191.html: 1.15 MB
    Current: 192.html: 1.15 MB
    Current: 193.html: 1.16 MB
    Current: 194.html: 1.17 MB
    Current: 195.html: 1.17 MB
    Current: 196.html: 1.18 MB
    Current: 197.html: 1.18 MB
    Current: 198.html: 1.19 MB
    Current: 199.html: 1.2 MB
    

    A temporary fix to the issue is to add the following to the code:

    from ipywidgets.widgets.widget import Widget 
    

    And to include this line in the loop:

    Widget.widgets.clear()
    

    As gmaps.figure for some reason uses this object and keeps storing additional figure data inside it disregarding whether they are still needed. If this behavior is unintentional, I can issue a pr with the fix if there is one.

    for i in range(200):
        Widget.widgets.clear()
        center = 20, 30
        fig = gmaps.figure(center=center, zoom_level=10)
        heatmap_layer = gmaps.heatmap_layer(coordinates)
        heatmap_layer.max_intensity = 100
        heatmap_layer.point_radius = 5
        fig.add_layer(heatmap_layer)
        p = Path(tmp) / f'{i}.html'
        embed_minimal_html(p.as_posix(), views=[fig])
        print(f'Current: {p.name}: {os.path.getsize(p.as_posix()) / 1024 ** 2} MB')
    shutil.rmtree(tmp)
    

    Result:

    Current: 0.html: 0.0067386627197265625 MB
    Current: 1.html: 0.0067386627197265625 MB
    Current: 2.html: 0.0067386627197265625 MB
    Current: 3.html: 0.0067386627197265625 MB
    Current: 4.html: 0.0067386627197265625 MB
    Current: 5.html: 0.0067386627197265625 MB
    Current: 6.html: 0.0067386627197265625 MB
    Current: 7.html: 0.0067386627197265625 MB
    Current: 8.html: 0.0067386627197265625 MB
    Current: 9.html: 0.0067386627197265625 MB
    Current: 10.html: 0.0067386627197265625 MB
    Current: 11.html: 0.0067386627197265625 MB
    Current: 12.html: 0.0067386627197265625 MB
    Current: 13.html: 0.0067386627197265625 MB
    Current: 14.html: 0.0067386627197265625 MB
    Current: 15.html: 0.0067386627197265625 MB
    Current: 16.html: 0.0067386627197265625 MB
    Current: 17.html: 0.0067386627197265625 MB
    Current: 18.html: 0.0067386627197265625 MB
    Current: 19.html: 0.0067386627197265625 MB
    Current: 20.html: 0.0067386627197265625 MB
    Current: 21.html: 0.0067386627197265625 MB
    Current: 22.html: 0.0067386627197265625 MB
    Current: 23.html: 0.0067386627197265625 MB
    Current: 24.html: 0.0067386627197265625 MB
    Current: 25.html: 0.0067386627197265625 MB
    Current: 26.html: 0.0067386627197265625 MB
    Current: 27.html: 0.0067386627197265625 MB
    Current: 28.html: 0.0067386627197265625 MB
    Current: 29.html: 0.0067386627197265625 MB
    Current: 30.html: 0.0067386627197265625 MB
    Current: 31.html: 0.0067386627197265625 MB
    Current: 32.html: 0.0067386627197265625 MB
    Current: 33.html: 0.0067386627197265625 MB
    Current: 34.html: 0.0067386627197265625 MB
    Current: 35.html: 0.0067386627197265625 MB
    Current: 36.html: 0.0067386627197265625 MB
    Current: 37.html: 0.0067386627197265625 MB
    Current: 38.html: 0.0067386627197265625 MB
    Current: 39.html: 0.0067386627197265625 MB
    Current: 40.html: 0.0067386627197265625 MB
    Current: 41.html: 0.0067386627197265625 MB
    Current: 42.html: 0.0067386627197265625 MB
    Current: 43.html: 0.0067386627197265625 MB
    Current: 44.html: 0.0067386627197265625 MB
    Current: 45.html: 0.0067386627197265625 MB
    Current: 46.html: 0.0067386627197265625 MB
    Current: 47.html: 0.0067386627197265625 MB
    Current: 48.html: 0.0067386627197265625 MB
    Current: 49.html: 0.0067386627197265625 MB
    Current: 50.html: 0.0067386627197265625 MB
    Current: 51.html: 0.0067386627197265625 MB
    Current: 52.html: 0.0067386627197265625 MB
    Current: 53.html: 0.0067386627197265625 MB
    Current: 54.html: 0.0067386627197265625 MB
    Current: 55.html: 0.0067386627197265625 MB
    Current: 56.html: 0.0067386627197265625 MB
    Current: 57.html: 0.0067386627197265625 MB
    Current: 58.html: 0.0067386627197265625 MB
    Current: 59.html: 0.0067386627197265625 MB
    Current: 60.html: 0.0067386627197265625 MB
    Current: 61.html: 0.0067386627197265625 MB
    Current: 62.html: 0.0067386627197265625 MB
    Current: 63.html: 0.0067386627197265625 MB
    Current: 64.html: 0.0067386627197265625 MB
    Current: 65.html: 0.0067386627197265625 MB
    Current: 66.html: 0.0067386627197265625 MB
    Current: 67.html: 0.0067386627197265625 MB
    Current: 68.html: 0.0067386627197265625 MB
    Current: 69.html: 0.0067386627197265625 MB
    Current: 70.html: 0.0067386627197265625 MB
    Current: 71.html: 0.0067386627197265625 MB
    Current: 72.html: 0.0067386627197265625 MB
    Current: 73.html: 0.0067386627197265625 MB
    Current: 74.html: 0.0067386627197265625 MB
    Current: 75.html: 0.0067386627197265625 MB
    Current: 76.html: 0.0067386627197265625 MB
    Current: 77.html: 0.0067386627197265625 MB
    Current: 78.html: 0.0067386627197265625 MB
    Current: 79.html: 0.0067386627197265625 MB
    Current: 80.html: 0.0067386627197265625 MB
    Current: 81.html: 0.0067386627197265625 MB
    Current: 82.html: 0.0067386627197265625 MB
    Current: 83.html: 0.0067386627197265625 MB
    Current: 84.html: 0.0067386627197265625 MB
    Current: 85.html: 0.0067386627197265625 MB
    Current: 86.html: 0.0067386627197265625 MB
    Current: 87.html: 0.0067386627197265625 MB
    Current: 88.html: 0.0067386627197265625 MB
    Current: 89.html: 0.0067386627197265625 MB
    Current: 90.html: 0.0067386627197265625 MB
    Current: 91.html: 0.0067386627197265625 MB
    Current: 92.html: 0.0067386627197265625 MB
    Current: 93.html: 0.0067386627197265625 MB
    Current: 94.html: 0.0067386627197265625 MB
    Current: 95.html: 0.0067386627197265625 MB
    Current: 96.html: 0.0067386627197265625 MB
    Current: 97.html: 0.0067386627197265625 MB
    Current: 98.html: 0.0067386627197265625 MB
    Current: 99.html: 0.0067386627197265625 MB
    Current: 100.html: 0.0067386627197265625 MB
    Current: 101.html: 0.0067386627197265625 MB
    Current: 102.html: 0.0067386627197265625 MB
    Current: 103.html: 0.0067386627197265625 MB
    Current: 104.html: 0.0067386627197265625 MB
    Current: 105.html: 0.0067386627197265625 MB
    Current: 106.html: 0.0067386627197265625 MB
    Current: 107.html: 0.0067386627197265625 MB
    Current: 108.html: 0.0067386627197265625 MB
    Current: 109.html: 0.0067386627197265625 MB
    Current: 110.html: 0.0067386627197265625 MB
    Current: 111.html: 0.0067386627197265625 MB
    Current: 112.html: 0.0067386627197265625 MB
    Current: 113.html: 0.0067386627197265625 MB
    Current: 114.html: 0.0067386627197265625 MB
    Current: 115.html: 0.0067386627197265625 MB
    Current: 116.html: 0.0067386627197265625 MB
    Current: 117.html: 0.0067386627197265625 MB
    Current: 118.html: 0.0067386627197265625 MB
    Current: 119.html: 0.0067386627197265625 MB
    Current: 120.html: 0.0067386627197265625 MB
    Current: 121.html: 0.0067386627197265625 MB
    Current: 122.html: 0.0067386627197265625 MB
    Current: 123.html: 0.0067386627197265625 MB
    Current: 124.html: 0.0067386627197265625 MB
    Current: 125.html: 0.0067386627197265625 MB
    Current: 126.html: 0.0067386627197265625 MB
    Current: 127.html: 0.0067386627197265625 MB
    Current: 128.html: 0.0067386627197265625 MB
    Current: 129.html: 0.0067386627197265625 MB
    Current: 130.html: 0.0067386627197265625 MB
    Current: 131.html: 0.0067386627197265625 MB
    Current: 132.html: 0.0067386627197265625 MB
    Current: 133.html: 0.0067386627197265625 MB
    Current: 134.html: 0.0067386627197265625 MB
    Current: 135.html: 0.0067386627197265625 MB
    Current: 136.html: 0.0067386627197265625 MB
    Current: 137.html: 0.0067386627197265625 MB
    Current: 138.html: 0.0067386627197265625 MB
    Current: 139.html: 0.0067386627197265625 MB
    Current: 140.html: 0.0067386627197265625 MB
    Current: 141.html: 0.0067386627197265625 MB
    Current: 142.html: 0.0067386627197265625 MB
    Current: 143.html: 0.0067386627197265625 MB
    Current: 144.html: 0.0067386627197265625 MB
    Current: 145.html: 0.0067386627197265625 MB
    Current: 146.html: 0.0067386627197265625 MB
    Current: 147.html: 0.0067386627197265625 MB
    Current: 148.html: 0.0067386627197265625 MB
    Current: 149.html: 0.0067386627197265625 MB
    Current: 150.html: 0.0067386627197265625 MB
    Current: 151.html: 0.0067386627197265625 MB
    Current: 152.html: 0.0067386627197265625 MB
    Current: 153.html: 0.0067386627197265625 MB
    Current: 154.html: 0.0067386627197265625 MB
    Current: 155.html: 0.0067386627197265625 MB
    Current: 156.html: 0.0067386627197265625 MB
    Current: 157.html: 0.0067386627197265625 MB
    Current: 158.html: 0.0067386627197265625 MB
    Current: 159.html: 0.0067386627197265625 MB
    Current: 160.html: 0.0067386627197265625 MB
    Current: 161.html: 0.0067386627197265625 MB
    Current: 162.html: 0.0067386627197265625 MB
    Current: 163.html: 0.0067386627197265625 MB
    Current: 164.html: 0.0067386627197265625 MB
    Current: 165.html: 0.0067386627197265625 MB
    Current: 166.html: 0.0067386627197265625 MB
    Current: 167.html: 0.0067386627197265625 MB
    Current: 168.html: 0.0067386627197265625 MB
    Current: 169.html: 0.0067386627197265625 MB
    Current: 170.html: 0.0067386627197265625 MB
    Current: 171.html: 0.0067386627197265625 MB
    Current: 172.html: 0.0067386627197265625 MB
    Current: 173.html: 0.0067386627197265625 MB
    Current: 174.html: 0.0067386627197265625 MB
    Current: 175.html: 0.0067386627197265625 MB
    Current: 176.html: 0.0067386627197265625 MB
    Current: 177.html: 0.0067386627197265625 MB
    Current: 178.html: 0.0067386627197265625 MB
    Current: 179.html: 0.0067386627197265625 MB
    Current: 180.html: 0.0067386627197265625 MB
    Current: 181.html: 0.0067386627197265625 MB
    Current: 182.html: 0.0067386627197265625 MB
    Current: 183.html: 0.0067386627197265625 MB
    Current: 184.html: 0.0067386627197265625 MB
    Current: 185.html: 0.0067386627197265625 MB
    Current: 186.html: 0.0067386627197265625 MB
    Current: 187.html: 0.0067386627197265625 MB
    Current: 188.html: 0.0067386627197265625 MB
    Current: 189.html: 0.0067386627197265625 MB
    Current: 190.html: 0.0067386627197265625 MB
    Current: 191.html: 0.0067386627197265625 MB
    Current: 192.html: 0.0067386627197265625 MB
    Current: 193.html: 0.0067386627197265625 MB
    Current: 194.html: 0.0067386627197265625 MB
    Current: 195.html: 0.0067386627197265625 MB
    Current: 196.html: 0.0067386627197265625 MB
    Current: 197.html: 0.0067386627197265625 MB
    Current: 198.html: 0.0067386627197265625 MB
    Current: 199.html: 0.0067386627197265625 MB
    
    opened by ghost 0
Releases(v0.2)
Owner
Pascal Bugnion
Software and code and data.
Pascal Bugnion
Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF.

google-maps-at-88-mph The folks maintaining Google Maps regularly update the satellite imagery it serves its users, but outdated versions of the image

Noah Doersing 111 Sep 27, 2022
Location field and widget for Django. It supports Google Maps, OpenStreetMap and Mapbox

django-location-field Let users pick locations using a map widget and store its latitude and longitude. Stable version: django-location-field==2.1.0 D

Caio Ariede 481 Dec 29, 2022
Implemented a Google Maps prototype that provides the shortest route in terms of distance

Implemented a Google Maps prototype that provides the shortest route in terms of distance, the fastest route, the route with the fewest turns, and a scenic route that avoids roads when provided a source and destination. The algorithms used were DFS, BFS, A*, and Iterative Depth First Search.

null 1 Dec 26, 2021
Python Data. Leaflet.js Maps.

folium Python Data, Leaflet.js Maps folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js

null 6k Jan 2, 2023
python toolbox for visualizing geographical data and making maps

geoplotlib is a python toolbox for visualizing geographical data and making maps data = read_csv('data/bus.csv') geoplotlib.dot(data) geoplotlib.show(

Andrea Cuttone 976 Dec 11, 2022
Solving the Traveling Salesman Problem using Self-Organizing Maps

Solving the Traveling Salesman Problem using Self-Organizing Maps This repository contains an implementation of a Self Organizing Map that can be used

Diego Vicente 3.1k Dec 31, 2022
Interactive Maps with Geopandas

Create Interactive maps ??️ with your geodataframe Geopatra extends geopandas for interactive mapping and attempts to wrap the goodness of amazing map

sangarshanan 46 Aug 16, 2022
prettymaps - A minimal Python library to draw customized maps from OpenStreetMap data.

A small set of Python functions to draw pretty maps from OpenStreetMap data. Based on osmnx, matplotlib and shapely libraries.

Marcelo de Oliveira Rosa Prates 9k Jan 8, 2023
Daily social mapping project in November 2021. Maps made using PyGMT whenever possible.

Daily social mapping project in November 2021. Maps made using PyGMT whenever possible.

Wei Ji 20 Nov 24, 2022
Deal with Bing Maps Tiles and Pixels / WGS 84 coordinates conversions, and generate grid Shapefiles

PyBingTiles This is a small toolkit in order to deal with Bing Tiles, used i.e. by Facebook for their Data for Good datasets. Install Clone this repos

Shoichi 1 Dec 8, 2021
Python library to visualize circular plasmid maps

Plasmidviewer Plasmidviewer is a Python library to visualize plasmid maps from GenBank. This library provides only the function to visualize circular

Mori Hideto 9 Dec 4, 2022
Spectral decomposition for characterizing long-range interaction profiles in Hi-C maps

Inspectral Spectral decomposition for characterizing long-range interaction prof

Nezar Abdennur 6 Dec 13, 2022
Digital Earth Australia notebooks and tools repository

Repository for Digital Earth Australia Jupyter Notebooks: tools and workflows for geospatial analysis with Open Data Cube and xarray

Geoscience Australia 335 Dec 24, 2022
A Jupyter - Leaflet.js bridge

ipyleaflet A Jupyter / Leaflet bridge enabling interactive maps in the Jupyter notebook. Usage Selecting a basemap for a leaflet map: Loading a geojso

Jupyter Widgets 1.3k Dec 27, 2022
Use Mapbox GL JS to visualize data in a Python Jupyter notebook

Location Data Visualization library for Jupyter Notebooks Library documentation at https://mapbox-mapboxgl-jupyter.readthedocs-hosted.com/en/latest/.

Mapbox 620 Dec 15, 2022
leafmap - A Python package for geospatial analysis and interactive mapping in a Jupyter environment.

A Python package for geospatial analysis and interactive mapping with minimal coding in a Jupyter environment

Qiusheng Wu 1.4k Jan 2, 2023
geemap - A Python package for interactive mapping with Google Earth Engine, ipyleaflet, and ipywidgets.

A Python package for interactive mapping with Google Earth Engine, ipyleaflet, and folium

Qiusheng Wu 2.4k Dec 30, 2022
Simple CLI for Google Earth Engine Uploads

geeup: Simple CLI for Earth Engine Uploads with Selenium Support This tool came of the simple need to handle batch uploads of both image assets to col

Samapriya Roy 79 Nov 26, 2022
Get Landsat surface reflectance time-series from google earth engine

geextract Google Earth Engine data extraction tool. Quickly obtain Landsat multispectral time-series for exploratory analysis and algorithm testing On

Loïc Dutrieux 50 Dec 15, 2022