Не могу создавать точки, используя фолиум add_child - PullRequest
0 голосов
/ 15 февраля 2019

Питон новобранец здесь.Я делаю запрос карты Google API для мест, я получаю список, а затем я хочу сопоставить точки (широта, долгота).Я выполнил эту задачу, используя скрипт 'mapit', но я хотел иметь возможность использовать больше функций в folium ((то есть) layercontrol и т. Д.).Цикл for, который я написал, просто отображает последний элемент в списке, который он создает.Я понимаю, почему он это делает, но не понимаю, как отобразить их все в один слой.ценим любые отзывы

import folium
import pandas
import urllib3.request
import json, requests

url = "https://maps.googleapis.com/maps/api/place/textsearch/json?"
google_api = "mykey"

#google API request code
qry = input('Search query: ')
r = requests.get(url + 'query=' + qry + '&key=' + google_api)
response = r.json()
results = response['results']

for i in range(len(results)):
    location = results[i]['geometry']['location']
    lat = location['lat']
    lng = location['lng']
    nameP = results[i]['name']
    latLong = []
    latLong.append(tuple([lat,lng, nameP]))

print(latLong)


map = folium.Map(location=[39.712183, -104.998424], zoom_start=5)
point_layer = folium.FeatureGroup(name="Query Search")

point_layer.add_child(folium.CircleMarker(location=[lat, lng], radius=10,
    popup=str(nameP) + " Lat: " + str(lat) + " , Long: " + str(lng), 
    tooltip=str(nameP) + " Lat: " + str(lat) + " , Long: " + str(lng),
    fill=True,  # Set fill to True
    color='red',
    fill_opacity=1.0))..add_to(Map)

map.add_child(point_layer)
map.add_child(folium.LayerControl())  
map.save("Map1.html")

1 Ответ

0 голосов
/ 18 февраля 2019

2 подсказки перед решением:

  • Не используйте map в качестве имени переменной.map - зарезервированное слово в Python.Пользователи Folium обычно используют имя переменной m для карт
  • Ваш код содержит SyntaxError.У вас есть 2 точки в fill_opacity=1.0))..add_to(Map)

Решение : вам также необходимо выполнить итерацию по каждой паре lat-long с циклом for, а затем объединить их на слое.Есть другие способы сделать это без итераций (например, geoJson), но в вашем случае это самый простой.Проверьте следующий код:

import folium
m = folium.Map(location=[39.712183, -104.998424], zoom_start=5)
point_layer = folium.FeatureGroup(name="Query Search")

latLong = [(36.314292,-117.517516,"initial point"),
           (40.041159,-116.153016,"second point"),
           (34.014757,-119.821985,"third point")]

for lat,lng,nameP in latLong:
    point_layer.add_child(folium.CircleMarker(location=[lat, lng], radius=10,
        popup=str(nameP) + " Lat: " + str(lat) + " , Long: " + str(lng), 
        tooltip=str(nameP) + " Lat: " + str(lat) + " , Long: " + str(lng),
        fill=True,  # Set fill to True
        color='red',
        fill_opacity=1.0)).add_to(m)

m.add_child(point_layer)
m.add_child(folium.LayerControl())  
m.save("Map1.html")

Если вы хотите, чтобы всплывающая подсказка или всплывающее окно выглядели лучше, вставьте текст в фолио. Рамка с Html, как показано здесь, в разделе необычных всплывающих окон

Карта:

пример карты с предыдущим кодом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...