无法使用大叶add_child创建点

时间:2019-02-15 06:35:00

标签: python folium

Python新手在这里。我在向地方发出Google Map API请求,我返回了一个列表,然后我想映射点(纬度,经度)。我已经使用'mapit'脚本完成了此任务,但是我希望能够在叶片中使用更多功能(例如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 :(得分:0)

解决方案之前的2条提示:

  • 请勿使用map作为变量名。 map是Python中的保留字。 Folium用户通常将变量名m用于地图
  • 您的代码包含SyntaxErrorfill_opacity=1.0))..add_to(Map)中有2个点

解决方案:您还需要使用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的folium.iframe中,如here in the fancy popup section

地图:

example of the map with the previous code