Как обновить маркеры из пользовательского ввода и добавить их на карту Python Folium? - PullRequest
0 голосов
/ 11 июня 2019

Мне было интересно, не могли бы вы помочь мне с небольшим вопросом, который у меня возник. Я создал доску для планирования на одной странице, и люди могут вводить данные о стране на ней, а затем я создал карту на другой странице, которая наносит маркер на то место, которое они выбрали, и все это работает, но если я отредактирую страну, которая не обновляет карту, пока я не перестану запускать скрипт. Пожалуйста, можно мне несколько указателей?

Я создал его с фолием и использовал панды, MongoDB и geopy.

Я пробовал, пока и если циклы

Я думал поставить еще одно заявление в конце?

любые предложения будут с благодарностью

import os
from flask import Flask, render_template, url_for, request, redirect
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
import folium
import requests
import pandas as pd
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

app = Flask(__name__)
geolocator = Nominatim(user_agent="Travel Tracker")
app.config["MONGO_DBNAME"] = 'travel_tracker'
app.config["MONGO_URI"] = os.getenv('MONGO_URI')

mongo = PyMongo(app)
countries = mongo.db.country.find()
hotels = mongo.db.hotel.find()
map_obj = folium.Map(location=[53.49, -2.24], zoom_start=5)
#map_obj.save('templates/travelmap.html')
url = requests.get('https://ipinfo.io/')

@app.route('/my_map')
def my_map():
    global map_obj
    return map_obj.get_root().render()

# Tracks your current location
@app.route('/travel_map')
def travel_map():
    global map_obj   
    data = url.json()
    my_loc = data['loc'].split(',')
    folium.Marker(location=my_loc, popup="I am here").add_to(map_obj)

# Pulls info from MongoDB to get the coordinates to display on map
    fg = folium.FeatureGroup(name="travel_map")
    specific_country = mongo.db.country.find_one()
    for count in countries:
        df = pd.DataFrame({'name': count['country_name']}, index=[0])
        geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)
        df['location'] = df['name'].apply(geocode)
        df['point'] = df['location'].apply(lambda loc: tuple(loc.point) if loc else None)
        fg.add_child(folium.Marker(location=df['point'][0][:-1], popup=count['country_name'], icon=folium.Icon(color='purple')))
        map_obj.add_child(fg)    

    return render_template('map.html', specific_country=specific_country)
...