Python Data. Leaflet.js Maps.

Related tags

Geolocation folium
Overview

PyPI Package Travis Build Status Gitter DOI binder

folium

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 library. Manipulate your data in Python, then visualize it in a Leaflet map via folium.

Installation

$ pip install folium

or

$ conda install -c conda-forge folium

Documentation

https://python-visualization.github.io/folium/

Gallery

There are two galleries of Jupyter notebooks with examples, which you can see using Jupyter's nbviewer:

https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/

https://nbviewer.jupyter.org/github/python-visualization/folium_contrib/tree/master/notebooks/

Contributing

We love contributions! folium is open source, built on open source, and we'd love to have you hang out in our community.

See our complete contributor's guide for more info.

Changelog

Check the changelog for a detailed list of the latest changes.

Comments
  • Add Search Box on Folium map

    Add Search Box on Folium map

    Can anybody point me towards how to add a Search box on Folium? I know Leaflet has this functionality but couldn't find any documentation on Folium. Thanks in advance.

    plugin feature request 
    opened by sangyh 61
  • Adding popup_attribute to the GeoJson feature

    Adding popup_attribute to the GeoJson feature

    I've made a change to the GeoJson feature to add a popup_attribute parameter. Including this changes the template so that attribute of the feautre is used as the popup for that feature. Based on the map I did for the #gistribe 15 minute map competition.

    opened by om-henners 44
  • Maps with complex polygon layers not rendering in Jupyter Lab/Notebook

    Maps with complex polygon layers not rendering in Jupyter Lab/Notebook

    Please add a code sample or a nbviewer link, copy-pastable if possible

    # Your code here
    
    

    Problem description

    I have been trying to run your sample notebook in examples/Geopandas.ipnyb in both Jupyter Lab and Jupyter Notebook. When I execute the cells, they all execute with no error but no map is rendered. I have had a similar problem in my own notebooks that seems to occur when the polygons are complex and have a lot of data points. I can get it to render simple polygons and so it doesn't seem to be a library problem. Can you confirm this example still works with the latest release?

    Versions below: notebook: 5.2.2 Jupyter Lab: 0.30 (note I upgraded to 0.31 but was having issues getting Lab to load) python: 3.6 Folium: 0.5.0

    Expected Output

    Rendered map in the examples/Geopandas.ipnyb

    Output of folium.__version__

    0.5.0

    jupyter 
    opened by EMarcantonio 41
  • Add image overlay

    Add image overlay

    This PR addresses #149.

    As of submission, it is not complete. I think I am adding layers correctly and put in the right template form, but it is not adding the layer to the rendered map.

    @ocefpaf What am I missing?

    opened by andrewgiessel 39
  • Folium doesn't package as expected when compiling to an executable

    Folium doesn't package as expected when compiling to an executable

    Please add a code sample or a nbviewer link, copy-pastable if possible

    import folium
    from tkinter import *
    
    class UserInterface:
    	"""This is just a basic interface to enter coordinates to test the folium functionality"""
    
    	def __init__(self):
    		super(UserInterface,self).__init__()
    		UserInterface.window = Tk()
    		UserInterface.map_name_label = Label(UserInterface.window, text="Enter A Map Name")
    		UserInterface.map_name_label.grid(row=0, column=0)
    		UserInterface.map_name_text = StringVar()
    		UserInterface.map_name_entry = Entry(UserInterface.window, textvariable=UserInterface.map_name_text)
    		UserInterface.map_name_entry.grid(row=0, column=1)
    
    		UserInterface.lat1label = Label(UserInterface.window, text="Point 1 Lat:")
    		UserInterface.lat1label.grid(row=1, column=0)
    		UserInterface.lat1text = StringVar()
    		UserInterface.lat1_entry = Entry(UserInterface.window, textvariable=UserInterface.lat1text)
    		UserInterface.lat1_entry.grid(row=1, column=1)
    
    		UserInterface.long1label = Label(UserInterface.window, text="Point 1 Long:")
    		UserInterface.long1label.grid(row=2, column=0)
    		UserInterface.long1text = StringVar()
    		UserInterface.lat1_entry = Entry(UserInterface.window, textvariable=UserInterface.long1text)
    		UserInterface.lat1_entry.grid(row=2, column=1)
    
    		UserInterface.lat2label = Label(UserInterface.window, text="Point 2 Lat:")
    		UserInterface.lat2label.grid(row=3, column=0)
    		UserInterface.lat2text = StringVar()
    		UserInterface.lat2_entry = Entry(UserInterface.window, textvariable=UserInterface.lat2text)
    		UserInterface.lat2_entry.grid(row=3, column=1)
    
    		UserInterface.long2label = Label(UserInterface.window, text="Point 2 Long:")
    		UserInterface.long2label.grid(row=4, column=0)
    		UserInterface.long2text = StringVar()
    		UserInterface.long2_entry = Entry(UserInterface.window, textvariable=UserInterface.long2text)
    		UserInterface.long2_entry.grid(row=4, column=1)
    
    		UserInterface.create_map_button = Button(UserInterface.window, text="Get Map", command=UserInterface.get_map, width=20)
    		UserInterface.create_map_button.grid(row=5, columnspan=2)
    		UserInterface.map_status = Label(UserInterface.window, text="")
    		UserInterface.map_status.grid(row=6, column=0)
    		UserInterface.window.mainloop()
    
    	def get_map():
    		UserInterface.map_status = Label(UserInterface.window, text="Getting map...")
    		UserInterface.map_status.grid(row=6, column=0)
    		centerpoint = [float(UserInterface.lat1text.get()), float(UserInterface.long1text.get())]
    		marker = [float(UserInterface.lat2text.get()),float(UserInterface.long2text.get())]
    		MapProgram.mapping.create_map(centerpoint=centerpoint, marker=marker)
    
    class FoliumTest:
    	"""This is just a basic class declaration to test the compiling process of folium when using Pyinstaller"""
    	
    	def __init__(self):
    		super(FoliumTest,self).__init__()
    
    	def create_map(self, centerpoint, marker):
    		map_image = folium.Map(location=[centerpoint[0], centerpoint[1]], zoom_start=14, tiles='OpenStreetMap')
    		centerpoint_icon_url = "http://maps.google.com/mapfiles/kml/shapes/star.png"
    		centerpoint_icon = folium.features.CustomIcon(centerpoint_icon_url, icon_size=(70,70))
    		folium.Marker([centerpoint[0], centerpoint[1]], icon=centerpoint_icon).add_to(map_image)
    		custom_map_icon_url = "http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png"
    		custom_map_icon = folium.features.CustomIcon(custom_map_icon_url, icon_size=(50,50))
    		folium.Marker([marker[0], marker[1]], icon=custom_map_icon).add_to(map_image)
    		map_image.save(outfile=UserInterface.map_name_text.get() + ".html")
    		UserInterface.map_status = Label(UserInterface.window, text="Map created!")
    		UserInterface.map_status.grid(row=6, column=0)
    
    class MapProgram:
    	"""This sets up the interface with the mapping functionality"""
    
    	def __init__(self):
    		MapProgram.mapping = FoliumTest()
    		UserInterface()
    		#Optional Coords to use for testing
    		#centerpoint = [37.9969,-121.2919]
    		#marker = [38.0132,-121.3671])
    
    def main():
    	MapProgram()
    	
    if __name__ == '__main__':
    	main()
    

    Problem description

    When attempting to make an exe using pyinstaller, cx_freeze, py2exe etc, the folium module and its dependencies don't seem to get compiled properly so that the program can run successfully. In the process of trying to determine where the core problem resided, I came across unexpected behavior when typing from folium import * which resulted in an error AttributeError: module 'folium' has no attribute 'GeoJsonStyle' This seemed odd to me and I thought possibly why the exe is not being compiled as it would throw the error that _cnames.json could not be found, which makes sense if GeoJsonStyle doesn't exist in the module but perhaps it's supposed to. If I attempt to compile the above program, but comment out folium, the compiled executable runs fine, so I know it's related to folium specifically.

    Expected Output

    I expected the module to compile and load correctly so that it can be utilized in an executable.

    Output of folium.__version__

    0.7.0

    question 
    opened by nathan3leaf 32
  • Popup on polygon geojson features

    Popup on polygon geojson features

    I am not clear on "Popup on polygon geojson features". How can I construct a popup with polygon features. Where can I find a good example? Regards

    question 
    opened by orkun 31
  • replace GeoJsonStyle by kwarg style_function in GeoJson

    replace GeoJsonStyle by kwarg style_function in GeoJson

    To simplify choropleth generation.

    You have to provide a function feature -> style which is to me the most generic API.

    I need to update Map.geo_json and tests before merge.

    enhancement 
    opened by BibMartin 31
  • Tooltip classes (simple and geojson/topojson)

    Tooltip classes (simple and geojson/topojson)

    Added a new Tooltip class to reference GeoJson feature properties, with tests, documentation, and examples. It's flexible, and can take field names, aliases, that can be turned on/off with the 'labels' boolean, a 'sticky' property, and can incorporate Javascript's .toLocaleString() functionality if desired. The same string can be passed for each object with the 'text' variable as well if you'd rather not use the 'fields'.

    Also updated the GeoJson JS template to reference this Tooltip object, and added a test to make sure that the values passed exist in the properties.

    Use case at this nbviewer

    opened by jtbaker 30
  • Highlight map elements on mouseover/click

    Highlight map elements on mouseover/click

    Hi team,

    Thank you for developing folium, it's immensely helpful. We're using it to display routes on a map. To declutter some complicated routing maps, I would like to be able to highlight tagged groups of polylines (corresponding to a group of routes) by mouseover/clicking on them. I found some related leaflet examples online, but I am uncertain whether that is possible folium.

    enhancement 
    opened by agravier 27
  • Features

    Features

    This is another version of #170 . This is not ready for merge. But I would like to share it and have your point of view.

    At the cost of scrambling things in version 2, I think this is a more robust implementation of #170's ideas.

    The main new thing is a Feature object that has _parent and _children attributes, and a render method. Everything inherits from this (Map, Figure, Layer, ...).

    • The _parent is either another Feature, or None (if this is the root of the tree).
    • The _children is an OrdredDict of Features.
    • The render method calls the render method of each children, it can have a bodre effect on the parent, and it returns a string.
    enhancement 
    opened by BibMartin 24
  • HeatMap doesn't use weights

    HeatMap doesn't use weights

    I spend quite some time tracking down this bug. I think it should be fixed or the limitation should be clearly stated in the docs. This is a major time waster and makes a bad impression on this otherwise great package.

    This is a major bug coming for the upstream Leaflet.heat project.

    • https://github.com/python-visualization/folium/issues/496
    • https://github.com/Leaflet/Leaflet.heat/issues/43
    • https://github.com/Leaflet/Leaflet.heat/issues/74

    Problem description

    The plugins.HeatMap states that the points used to create the heat map can be weighted.

    data (list of points of the form [lat, lng] or [lat, lng, weight])
    

    However weights are simply ignored. This makes it useless for heatmaps that are based on a few points with different weights.

    Expected Output

    Weight should have impact. Or remove this option from the docs.

    bug 
    opened by ibayer 23
  • adding Nautical milles unit to MeasureControl

    adding Nautical milles unit to MeasureControl

    Thanks a lot for the MeasureControl plugin that I found very usefull !

    This MeasureControl plugin includes "acres", "feet", "kilometers","meters" and "miles" as linear units. (Note : the "miles" unit refers to "Statute mile", of the British Imperial unit system)

    Could it be possible to introduce also nautical mile (or "nautical") ? This unit is very usefull (almost mandatory) for sea navigation because it is directly linked to the distance between paralleles.

    The Implementation could be a new item in the objects list of the unit.js file :

    nautical: {
        factor: 1,0/1852.0,
        display: 'nauticals',
        decimals: 2
    },
    sqnautical: {
        factor: 1,0/1852.0/1852.0,
        display: 'sqnauticals',
        decimals: 2
    },
    

    Best regards

    opened by jef-maubert 0
  • Type hints

    Type hints

    Let's try this again. Based on https://github.com/python-visualization/folium/pull/1297. Closes https://github.com/python-visualization/folium/issues/1559.

    I didn't do the plugins, I'll leave that for another time.

    opened by Conengmo 0
  • Leaflet Control

    Leaflet Control

    Trying out an idea I had based on a number of issues I've encountered. Use the Leaflet Control class to put legends, images or other custom stuff on the map. That way they integrate better with other Leaflet features, such as full screen and potentially layer control.

    Before this is ready I'll look at how this combines with layer control. And what the potential benefits are for other folium classes that are currently outside of Leaflet control.

    Possibly related issues: https://github.com/python-visualization/folium/issues/450 https://github.com/python-visualization/folium/issues/1344 https://github.com/python-visualization/folium/issues/1079 https://github.com/python-visualization/folium/issues/1167

    Some lessons:

    • Nearly everything in Leaflet is meant to move with the map. So inheriting from anything related to L.Layer is not the way to go.
    • L.Control is static, but can't be switched in LayerControl.
    • Adding arbitrary content as a control is one use case, making arbitrary content switchable with layer control is a separate use case.
    opened by Conengmo 0
  • Dark mode feature by wrapping Leaflet.TileLayer.ColorFilter plugin

    Dark mode feature by wrapping Leaflet.TileLayer.ColorFilter plugin

    Creating a dark mode feature for Folium seems necessary. One way to implement this feature is to wrap Leaflet.TileLayer.ColorFilter plugin, which applies CSS filters on map tiles.

    A nice demo is provided here: https://xtk93x.github.io/Leaflet.TileLayer.ColorFilter.updateFilter/

    I would be grateful if someone could take the time and wrap this lightweight plugin for Folium. Please let me know if there is any other workaround for creating dark mode (rather than using original tiles with dark theme).

    sidebyside

    plugin 
    opened by amir-arayeshnia 0
  • TimeSliderChoropleth stroke colour/width

    TimeSliderChoropleth stroke colour/width

    Hi,

    I am having issues with trying to change the line colour/width/opacity/removing dashed line for the TimeSliderChoropleth, is this possible or would it be a possible feature add please? The white dashed lines I am getting are meaning you cannot see the data on the map.

    Thanks (and thanks for all the development on this, its great), Amy

    enhancement 
    opened by amyycb 1
Releases(v0.14.0)
  • v0.14.0(Dec 12, 2022)

    0.14.0

    Breaking changes

    • Use keyword arguments as CSS properties in FloatImage (@Conengmo #1668)
    • Upgrade Leaflet 1.6.0 to 1.9.3, set default font size (@Conengmo #1660)
    • Upgrade Bootstrap 3.2.0 to 5.2.2 (@Conengmo #1650)

    New plugins

    • Add GroupedLayerControl plugin (@chansooligans #1592)
    • Add SideBySide plugin (@fralc #1292)
    • Add TagFilterButton plugin (@Waffleboy #1343)

    Major improvements

    • Add optional Jenks Natural Breaks Optimization to Choropleth (@pmains #1634)
    • Add Map.show_in_browser() method (@Conengmo #1651)
    • Accept TileProvider objects from the xyzservices package (@martinfleis #1498)
    • Add support for Vega-Lite v4 and v5 (@wd60622 #1525)
    • Upgrade Font Awesome 4.6.3 to 6.2.0 (@Sujithkumardola #1637)

    Minor improvements

    • Allow cql_filter argument in WmsTileLayer (@Conengmo #1673)
    • Silently allow lowerCamelCase for vector path options (@Conengmo #1672)
    • Allow html popups and templating in ClickForMarker (@Conengmo #1666)
    • Add show_geometry_on_click argument to Draw plugin (@Conengmo #1657)
    • Automatically join string and numeric key_on values for Choropleth (@alessioarena #1193)
    • Add speed_slider argument to TimeStampedGeoJson (@gokyori #1279)
    • Add gradient option to vector path options (@nocturnalAndroid #1433)
    • Add initial timestamp argument to TimeSliderChoropleth (@jjbenes #1435)
    • Allow passing TileLayer to Map (@Conengmo #1624)
    • Use fullscreen window in Map._to_png() (@Conengmo #1656)
    • Expose webdriver argument in Map._to_png() (@WooilJeong #1620)
    • Export the map only in Map._to_png() (@Vayel #1197)

    Bug fixes

    • Fix LayerControl visibility on multiple renders (@Conengmo #1674)
    • Fix the new TagFilterButton plugin, it's not a Layer (@Conengmo #1671)
    • Fix TopoJson object path lookup (@Conengmo #1665)
    • Fix Choropleth when bins is a list of integers (@Conengmo #1664)
    • Fix attribution links in Notebooks opening within iframe (@Conengmo #1655)
    • Fix empty geojson failing when using style_function (@agussman #1213)
    • Fix Marker location validation for numpy array (@Conengmo #1647)
    • Fix date sorting in TimeSliderChoropleth (@Ade-StapleHill #1503)
    • Fix unescaped backticks in Popup (@Conengmo #1642)
    • Fix map.get_bounds() when using GeometryCollection (@amrutha1098 #1633)
    • Fix ClickForLatLng not imported in init (@amrutha1098 #1627)

    Documentation

    • More Flask examples (@Conengmo #1675)
    • Add PolyLine example to Quickstart.ipynb (@IamPhytan #1492)

    Thanks to:

    • All contributors to this release
    • @giswqs for fixing typos
    • @pmains for fixing flake8 warnings
    • @amrutha1098 for fixing tests
    • Our maintainers @ocefpaf and @Conengmo
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Oct 7, 2022)

    0.13.0

    • Lazy popup: only load content on click (@marciogranzotto #1511)
    • Add Leaflet.VectorGrid plugin: VectorGridProtobuf (@iwpnd #1576)
    • Add blur parameter to HeatMapWithTime plugin (@Demetrio92 #1529)
    • New ClickForLatLng class: click to save lat/lon to clipboard (@BibMartin #1530)
    • Add width parameter to css for FloatImage (@beautah #1570)
    • Add support for tooltips in TimestampedGeoJson objects (@tblundy #1472)
    • Expose GeoJson's web retrieval to its own function (@beautah #1458)

    Bug fixes

    • Restore allowing simple Popup in GeoJson (@ocefpaf #1528)

    Tests

    • Fix test failure with recent branca change on map ids (@oefe #1556)

    Documentation

    • Thanks to @oefe, @Demetrio92 and @giswqs for helping out with the documentation
    Source code(tar.gz)
    Source code(zip)
  • v0.12.1.post1(Nov 19, 2021)

  • v0.12.1(Nov 19, 2021)

  • v0.12.0(Jan 6, 2021)

    0.12.0

    • GeoJson add zoom_on_click option, default False (@conengmo #1349)
    • Add Geocoder plugin (@WBP20 #1323)
    • Replace githack.com CDN with jsdelivr.com (@conengmo #1337)
    • Add SemiCircle plugin (@kuaka #1238)
    • Move hardcoded JS CDN links to class variables (@and-viceversa @conengmo #1312 #1416)
    • Treat data uris as valid (@Kirill888 #1428)
    • Add GeoJson marker option (@jtbaker #957)

    Bug fixes

    • Fix TimeSliderChoropleth breaking when using layer control (@markhudson42 #1380)
    • Fix GeoJson data loading (@conengmo #1353)
    • Fix heatmap weights/intensity (@conengmo #1354 #1282)
    • Fix multiple GeoJsonPopup 'name_getter' JS SyntaxError (@jtbaker #1347)
    • Fix TimestampedWmsTileLayers layer control (@conengmo #1319)

    API changes

    • Remove deprecated Mapbox and Cloudmade tilesets (@conengmo #1339)
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(May 6, 2020)

    0.11.0

    
    - Upgrade Leaflet 1.5.1 -> 1.6.0 (@conengmo #1241)
    - Add auto_start parameter to locate control plugin (@fullonic #1220)
    - New feature: GeoJsonPopup (@jtbaker #1023)
    
    Bug fixes
    
    - Choropleth: default color for with and without data (@conengmo #1288)
    - Update WMS data url in WmsTimeDimension example notebook (@sknzl #1259)
    - Search plugin: fix position argument (@jjbenes #1304)
    - Fix GeoJsonPopupAndTooltip example notebook (@conengmo #1298)
    - Change geopandas dataframe `to_crs()` usage syntax (@artnikitin #1251)
    - GeoJson: fix `show` parameter when embedding data (@conengmo #1289)
    - Use https CDN for leaflet.timedimension.control.min.css (@sknzl #1256)
    - Host leaflet-heatmap.js under different name to avoid adblockers (@conengmo #1240)
    
    API changes
    
    - Removed unused `folium.utilities.iter_points` function, use instead `iter_coords` (@conengmo #1294)
    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Dec 2, 2019)

    0.10.1

    Bug fixes

    • Fix TimeSliderChoropleth plugin broken setStyle (@khllkcm #1227)
    • Fix HeatMapWithTime plugin (@farisnanosoft @conengmo #1228)
    • Fix adding GeoJSON to MarkerCluster (@conengmo #1190)

    Documentation

    • Typo corrections in examples/Colormaps.ipynb (@nik-ahuja #1215)
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Jul 24, 2019)

    0.10.0

    • Add user location plugin LocateControl (@fullonic #1116)
    • Bump Leaflet version from 1.4.0 to 1.5.1 (@ocefpaf #1149)
    • Choropleth: warn if key_on not found in data (@evwhiz #1144)

    Bug fixes

    • Fix layer control in DualMap plugin (@conengmo #1156)
    • Fix typo in DivIcon options (@fullonic #1181)
    • Fix JS error in Draw plugin export option (@fullonic #1180)
    • Fix typo in color options in Icon (@adnanhemani #1171)
    • Fix draw and edit options in Draw plugin (@mccarthyryanc #1175)
    • Remove warnings about conflicts with Draw plugin (@fullonic #1184)
    • More explicit key_on check in Choropleth (@leandroordonez #1169)

    Documentation

    • Add Flask example (@penguindustin #1140)
    • Improve contribution guide (@leonardofurtado #1173)
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(May 26, 2019)

  • v0.9.0(May 17, 2019)

    This version drops support for Python 2.7. (#1100, #1104, #1111) Python 3.5+ is required.

    v0.9.0

    • Geojson separate style mapping (conengmo #1058)
    • Warn for wrong color values in Icon (conengmo #1099)
    • Use Jinja2's tojson filter to convert data (conengmo #1101)
    • Pass **kwargs as options to Leaflet classes (conengmo #1101)
    • Explicit coordinate validation (conengmo #1090)
    • Add icon_create_function arg to FastMarkerCluster plugin (Gordonei #1109)
    • Add PolyLineOffset plugin (FabeG #1091)
    • Add Locate Control plugin (fullonic #1116)
    • Add Leaflet CustomPane class (Ipkirwin #1094)

    API changes

    • Remove add_tile_layer method from Map (conengmo #1127)
    • Remove args from Map, if needed use TileLayer instead (conengmo #1127)

    Bug fixes

    • Fix broken attribution for built-in tiles (FabeG #1128)
    • Fix broken prefer_canvas option of Map (FabeG #1133)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.3(Mar 15, 2019)

    0.8.3

    • Relaxing location data type restriction (dskkato #1084)
    • Add options to draw control (EtsuNDmA #1035)
    • folium 0.8.x will be the last version series to support Python 2 (conengmo #1087)

    Bug Fixes

    • Use jquery.com CDN instead of Google (conengmo #1086)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(Feb 26, 2019)

  • v0.8.0(Feb 26, 2019)

    0.8.0

    • Warn when using geojson data with GeometryCollection type in GeoJsonToolTip (jtbaker #988)
    • Change default popup width from 300px to 100% (ocefpaf #1040)
    • Automatically detect VegaLite version from specs (JarnoRFB #959)
    • Validate style and highlight functions in GeoJson (jtbaker #1024)
    • AntPath plugin (ocefpaf #1016)
    • Update Leaflet version to 1.4.0 (conengmo #1047)
    • DualMap plugin (conengmo #933)
    • CirclePattern and StripePattern plugins (talbertc-usgs #966)
    • Add option to make Marker draggable (Conengmo #1053)
    • Example notebook on creating polygons from points (HZALK #1056)

    API changes

    • Improved Search plugin (jtbaker #995)

    Bug Fixes

    • Re-add missing GeoJsonTooltip in init (Conengmo #1029)
    • Use Javascript template literals in DivIcon (Conengmo #1054)
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Nov 20, 2018)

    0.7.0

    • Fixed HeatMap silently fail on incompatible data types (ocefpaf 1017)
    • Proper scaling on mobile phones (Conengmo 992)
    • Update leaflet to 1.3.4 (ocefpaf #939)
    • More options (tms, opacity, kwargs) in TileLayer (mpickering #948)
    • Add MousePosition plugin (btozer #916)
    • Add Minimap plugin (talbertc-usgs #968)
    • Replace Rawgit CDN with Githack (jtbaker #1002)
    • Handling of NaN and missing values in choropleth (FloChehab #1005)

    API changes

    • threshold_scale argument of choropleth is replaced by bins (FloChehab #1005)
    • Map.choropleth() moved to Choropleth class, former is deprecated (Conengmo #1011)

    Bug Fixes

    • Fix wrong default value for fmt argument of WmsTileLayer (conengmo #950)
    • Fix icon_create_function argument in MarkerCluster (conengmo #954)
    • Update stylesheet url in TimestampedGeoJson (frodebjerke #963)
    • Use Javascript template literals in Tooltip and Popup (jtbaker #955 #962)
    • Proper scaling on mobile phones (conengmo #992)
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Aug 13, 2018)

    0.6.0

    • Popup accepts new arguments show (render open on page load) and sticky (popups only close when explicitly clicked) (jwhendy #778)
    • Added leaflet-search plugin (ghandic #759)
    • Improved Vector Layers docs, notebooks, and optional arguments (ocefpaf #731)
    • Implemented export=False/True option to the Draw plugin layer for saving GeoJSON files (ocefpaf #727)
    • Internal re-factor to reflect leaflet's organization (ocefpaf #725)
    • Added tooltip support to Markers (ocefpaf #724)
    • Added tooltip support to all vector layers (ocefpaf #722)
    • Added TimeSliderChoropleth plugin (halfdanrump #736)
    • Added show parameter to choose which overlays to show on opening (conengmo #772)
    • Added BeautifyIcon Plugin (arthuralvim and jeremybyu #819)
    • Explicit WMSTileLayer options, accept all **kwargs (conengmo #838)
    • Updated links to Draw plugin (conengmo #868)
    • Ingest any object that __geo_interface__ (ocefpaf #880)
    • Added FeatureGroupSubGroup plugin (shtrom #875)
    • Added duration option to TimestampedGeoJson (andy23512 #894)
    • Added zoom_control to Map to toggle zoom controls as per enhancement (#795) (okomarov #899)
    • Change default date_options in TimestampedGeoJson (andy23512 #914)
    • Added gradient argument to HeatMapWithTime (jtbaker #925)
    • Added Tooltip and GeoJsonTooltip classes (jtbaker #883)

    API changes

    • Refactor ImageOverlay, VideoOverlay, WmsTileLayer, and TileLayer to a new raster_layers.py module (ocefpaf #729)
    • Rectangle and Polygon were renamed and set to leaflet's defaults. Both now accepted all Path's optional arguments (ocefpaf #722)

    Bug Fixes

    • Fixed numpy array bug (#749) in _flatten
    • Unify get_bounds routine to avoid wrong responses
    • If Path option fill_color is present it will override fill=False
    • Fix disappearing layer control when using FastMarkerCluster (conengmo #866)
    • Host heatmap.js to circumvent adblockers (conengmo #886)
    • Fix permission error in Map._to_png() due to tempfile (conengmo #887)
    • Replace strftime use in TimesliderChoropleth example (conengmo #919)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Sep 13, 2017)

    v0.5.0

    • Added Draw plugin (ocefpaf #720)
    • Better handling of URL input (ocefpaf #717)
    • Versioned docs! Visit http://python-visualization.github.io/folium/docs-v0.5.0 or simply http://python-visualization.github.io/folium/ for the current master version.

    Bug Fixes

    • Fix VideoOverlay import (ocefpaf #719)
    • Fix choropleth docstring (lsetiawan #713)
    • Fix choropleth name in LayerControl (ocefpaf #493)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 4, 2017)

    0.4.0

    • Optional iconCreateFunction for MarkerCluster to customize the icons (odovad #701)
    • Added HeatMapWithTime (Padarn #567)
    • Added MeasureControl (ocefpaf #669)
    • Added VideoOverlay plugin (ocefpaf #665)
    • Added TimestampedWmsTileLayers plugin (acrosby #644 and #660)
    • Vega-Lite features support via altair (njwilson23 #643)
    • Experimental support for a static png output (ocefpaf #634)
    • Added support for subdomains options in TileLayer (damselem #623)
    • Updated to leaflet 1.2.0 (ocefpaf #693)
    • Added FastMarkerCluster (James Gardiner #585 (proposed by @ruoyu0088))
    • Use the GIS standard "pixelated" css image-rendering in image overlays by default (dirkvdb #684 and ocefpaf #686)

    API changes

    • Removed features MarkerCluster in lieu of the plugin version (ocefpaf #704)
    • choropleth now takes a single geo_data instad of geo_path/geo_str leaving the parsing to GeoJSON, remove the unused data_out option, add geopandas support (ocefpaf #702)
    • All popups are considered HTML text by default (ocefpaf #689) If a popup requires rendering use the kwarg parse_html=True.
    • PolyLine, Circle and CircleMarker are set to leaflet's defaults and accepted all Path's optional arguments (ocefpaf #683 and #697)
    • WmsTileLayer and ImageOverlay are set to leaflet's defaults and accepted all TileLayer.WMS and ImageOverlay optional arguments respectively (ocefpaf #695 and #697)
    • Changed default max_bounds to False to reflect leaflet's default value (rdd9999 #641)
    • Modified Fullscreen plugin kwargs to be more "pythonic"
    • All .format properties are now .fmt for consistency
    • Removed the kwarg continuous_world that is no longer in leaflet's API (ocefpaf #695)

    Bug Fixes

    • subdomain option in TileLayer should be a list and WmsTileLayer overlay default is True (ocefpaf #707)
    • Checking if the lat, lon locations are floats to avoid empty maps (radumas #626)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Mar 6, 2017)

    0.3.0

    • Switched to leaflet 1.0.1 (juoceano #531 and ocefpaf #535)
    • Added continuous_world, world_copy_jump, and no_wrap options (ocefpaf #508)
    • Update font-awesome to 4.6.3 (ocefpaf #478)
    • Added text path (talespaiva #451 and ocefpaf #474)
    • More options added to LayerControl (qingkaikong #473)
    • More options added to fullscreen plugin (qingkaikong #468)
    • Added ColorLine object (bibmartin #449)
    • Added highlight function to GeoJSON, and Chrorpleth (JoshuaCano #341)
    • Added fullscreen plugin (sanga #437)
    • Added smooth_factoroption to GeoJSON, TopoJSON and Choropleth (JamesGardiner #428)
    • Map object now accepts Leaflet global switches (sgvandijk #424)
    • Added weight option to CircleMarker (palewire #581)

    Bug Fixes

    • Fixed image order (juoceano #536)
    • Fixed Icon rotation (juoceano #530 and sseemayer #527)
    • Fixed MIME type (text/plain) is not executable (talespaiva #440)
    • Update Travis-CI testing to incorporate branca and fix notebook tests (ocefpaf #436)
    • Removed MultiPolyLine and MultiPolygon, both are handled by PolyLine and PolyLine in leaflet 1.0.* (ocefpaf #554)
    • Removed deprecated MapQuest tiles (HashCode55 #562)
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Apr 2, 2016)

    v0.2.1

    This is mostly a bugfix release

    • TopoJson.get_bounds() returns [lon,lat] instead of [lat,lon](eddies #383)
    • HeatMap was not passing "name" argument (eddies #380)
    • Fix heatmap.fit_bounds (same bug as #383) (BibMartin #384)
    • Fix WMS rendering (ocefpaf #404)
    • Change Leaflet.awesome-markers URL (BibMartin #393)
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Feb 12, 2016)

    v0.2.0

    Major changes to the API with the new plugin system, and several new features in this version. For more information check the docs: http://python-visualization.github.io/folium/

    • Added control_scale (BibMartin and jelmelk #355)
    • WMS styles (ocefpaf #348)
    • Docs! (BibMartin #344, #337, #329)
    • No tile option (ocefpaf #330)
    • GeoJSON and TopoJSON style_function (BibMartin #317 and #266)
    • Colormaps (BibMartin # 300)
    • Map CRS (BibMartin #297)
    • GeoPandas drawing (BibMartin #296)
    • Div Icons (BibMartin #250)
    • CustomIcon (BibMartin #230)
    • HeatMap (BibMartin #213)

    And many bug fixes! (See https://github.com/python-visualization/folium/issues?&q=milestone:v0.2.0+is:closed+label:bug)

    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(Nov 9, 2015)

    0.1.6

    • Added default options to tile_layer (ozak 1ad2336)
    • Introduce free scale for geo_json (Nikolay Koldunov 21e2757)
    • Added Image Overlay. (andrewgiessel b625613)
    • All popups can take a popup_width keyword to adjust the width in text/HTML (ocefpaf #157).
    • CAVEAT! Backwards incompatibly change: the keyword width in popups is now popup_width to avoid confusion with map width.
    • Simpler HTML repr (ocefpaf a343106)

    Bug Fixes

    • WMS layer (Martin Journois 610b42d)
    • Stamentoner URL (ocefpaf 7003dc5)
    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(Aug 13, 2015)

    Version 0.1.5

    • Popups on lines. (themiurgo #122)
    • Map auto bounds. (themiurgo #134)
    • GeoJSON popup. (ocefpaf 7aad5e0)
    • Added cartodb positron and dark_matter tiles (ocefpaf d4daee7)
    • Forcing HTTPS when available. (ocefpaf c69ac89)
    • Added Stamen Watercolor tiles. (ocefpaf 8c1f837)
    • Added non-pixel width and height. (ocefpaf a87a449)
    • Default map size is defined as non-pixel and equal to 100% of the window. (ocefpaf dcaf575)

    Bug Fixes

    • Draw GeoJSON first. (ocefpaf d92bdbe)
    • Removed keyword unnecessary popup_on. (themiurgo 204d722)
    • Fixed MapQuest Open Aerial URL. (ocefpaf 5e787fa)
    Source code(tar.gz)
    Source code(zip)
  • v0.1.4(Apr 1, 2015)

    New features

    • Popups allow unicode. @apatil
    • Support for https protocol. @apatil
    • Custom popup width. @ocefpaf
    • Support multiPolyLine. @scari
    • Added max and min zoom keywords. @Paradoxeuh

    Bug Fixes

    • Remove margins from leaflet-tiles (Fixes #64). @lennart0901
    • Template not found on Windows OSes (Fixes #50). @Paradoxeuh
    • WMS layer on python 3. @ocefpaf
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Dec 4, 2014)

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
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
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
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
Google maps for Jupyter notebooks

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 g

Pascal Bugnion 747 Dec 19, 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
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
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
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
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
Open Data Cube analyses continental scale Earth Observation data through time

Open Data Cube Core Overview The Open Data Cube Core provides an integrated gridded data analysis environment for decades of analysis ready earth obse

Open Data Cube 410 Dec 13, 2022
A public data repository for datasets created from TransLink GTFS data.

TransLink Spatial Data What: TransLink is the statutory public transit authority for the Metro Vancouver region. This GitHub repository is a collectio

Henry Tang 3 Jan 14, 2022
Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Ayush Mishra 3 May 6, 2022
Python tools for geographic data

GeoPandas Python tools for geographic data Introduction GeoPandas is a project to add support for geographic data to pandas objects. It currently impl

GeoPandas 3.5k Jan 3, 2023
A package built to support working with spatial data using open source python

EarthPy EarthPy makes it easier to plot and manipulate spatial data in Python. Why EarthPy? Python is a generic programming language designed to suppo

Earth Lab 414 Dec 23, 2022
Python package for earth-observing satellite data processing

Satpy The Satpy package is a python library for reading and manipulating meteorological remote sensing data and writing it to various image and data f

PyTroll 882 Dec 27, 2022