Наведите курсор на всплывающее окно в Folium

Вот простой пример:

import folium

map_1 = folium.Map(location=[45.372, -121.6972], zoom_start=12,
                   tiles='Stamen Terrain')
folium.Marker([45.3288, -121.6625], popup='Mt. Hood Meadows').add_to(map_1)
map_1

Можно ли создать всплывающее окно, просто подняв мышку? Возможно ли такое с фолиумом?


person Lucas    schedule 12.12.2016    source источник


Ответы (4)


ОБНОВЛЕННЫЙ ОТВЕТ

Оказывается, эта функциональность была заложена в кодовую базу folium.

Просто добавьте аргумент tooltip, например:

import folium

map_1 = folium.Map(location=[45.372, -121.6972], zoom_start=12, tiles='Stamen Terrain',
                   tooltip = 'This tooltip will appear on hover' # THIS
                  )
folium.Marker([45.3288, -121.6625], popup='Mt. Hood Meadows').add_to(map_1)
map_1
person Jealie    schedule 28.12.2020

Из фолиума это сделать нелегко. Но поскольку folium действительно создает код LeafletJS, вы можете изменить вывод, чтобы он работал. Для этого вам нужно будет добавить в полученный HTML код, указанный в этот ответ:

    marker.bindPopup("Popup content");
    marker.on('mouseover', function (e) {
        this.openPopup();
    });
    marker.on('mouseout', function (e) {
        this.closePopup();
    });

Если у вас много маркеров, это может стать сложной задачей, но вы можете сделать это через python (хотя это будет выглядеть не очень красиво). Псевдокод:

import re

with open("map.html") as inf:
    txt = inf.read()

#Find all the markers names given by folium
markers = re.findall(r'\bmarker_\w+', txt)

for marker in markers:
   # Add the code given before to the string txt

# Save the new map
with open("new_map.html", "w") as outf:
    outf.write(txt)

Этот код открывает сгенерированный HTML-файл, находит все маркеры и добавляет код для каждого маркера.

person Fernando Irarrázaval G    schedule 02.06.2017

Ваш вопрос касается folium, и я так не думаю, но я думаю, что вы можете добавить некоторый Javascript (с jquery это было бы очень просто, я подозреваю), чтобы имитировать событие щелчка onmouseover или mouseenter

  var test = document.getElementById("test");

  test.addEventListener("mouseenter", handlerClickFunction);
person Nevermore    schedule 15.12.2016
comment
Да, я не думаю, что Folium справится с этим. Другое решение - напрямую использовать листовку - person Lucas; 20.12.2016
comment
Да, скорее всего, извините, это мне неизвестно :) - person Nevermore; 20.12.2016

В приведенном ниже примере всплывающее окно открывается при наведении курсора мыши, а не при нажатии, и скрывает его, когда пользователь наводит курсор мыши:

map_1.save('map_1.html')
import re
import fileinput

with open("map_1.html") as inf:
   txt = inf.read()

#Find all the markers names given by folium
markers = re.findall(r'\bmarker_\w+', txt)
markers = list(set(markers))

for linenum,line in enumerate( fileinput.FileInput("map_1.html",inplace=1) ):
    pattern = markers[0] + ".bindPopup"
    pattern2 = markers[0] + ".on('mouseover', function (e) {this.openPopup();});"
    pattern3 = markers[0] + ".on('mouseout', function (e) {this.closePopup();});"

    if pattern in line:
       print(line.rstrip())
       print(pattern2)
       print(pattern3)
    else:
       print(line.rstrip())
person Duc Vu    schedule 30.05.2018