无法使用 folium 创建点 add_child
Can't creating points using folium add_child
Python菜鸟来了。我正在制作一个 google 地图 API 地点请求,我得到一个列表,然后我想映射点(lat,long)。我已经使用 '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")
解决前的2条提示:
- 不要使用
map
作为变量名。 map
是 Python 中的保留字。 Folium 用户通常将变量名称 m
用于地图
- 您的代码包含
SyntaxError
。 fill_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")
如果您想要更好看的工具提示或弹出窗口,请将文本插入 folium.Iframe 和 Html,如 here in the fancy popup section
所示
地图:
example of the map with the previous code
Python菜鸟来了。我正在制作一个 google 地图 API 地点请求,我得到一个列表,然后我想映射点(lat,long)。我已经使用 '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")
解决前的2条提示:
- 不要使用
map
作为变量名。map
是 Python 中的保留字。 Folium 用户通常将变量名称m
用于地图 - 您的代码包含
SyntaxError
。fill_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")
如果您想要更好看的工具提示或弹出窗口,请将文本插入 folium.Iframe 和 Html,如 here in the fancy popup section
所示地图:
example of the map with the previous code