Folium FeatureGroup в Python - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать карты с помощью группы функций Folium. Группа объектов будет из строки pandas данных. Я могу добиться этого, когда в фрейме данных есть одна информация. Но когда в кадре данных больше 1, а через l oop через l в 1011 * я не могу получить то, что хочу. Пожалуйста, найдите прикрепленный код в Python.

from folium import Map, FeatureGroup, Marker, LayerControl

mapa = Map(location=[35.11567262307692,-89.97423444615382], zoom_start=12,
           tiles='Stamen Terrain')

feature_group1 = FeatureGroup(name='Tim')
feature_group2 = FeatureGroup(name='Andrew')
feature_group1.add_child(Marker([35.035075, -89.89969], popup='Tim'))
feature_group2.add_child(Marker([35.821835, -90.70503], popup='Andrew'))
mapa.add_child(feature_group1)
mapa.add_child(feature_group2)
mapa.add_child(LayerControl())

mapa

Мой фрейм данных содержит следующее:

Name                             Address  
0                      Dollar Tree #2020                    3878 Goodman Rd.   
1                      Dollar Tree #2020                    3878 Goodman Rd.   
2            National Guard Products Inc                    4985 E Raines Rd   
3   434 SAVE A LOT C MID WEST 434 Kelvin                    3240 Jackson Ave   
4                        WALGREENS 06765                   108 E HIGHLAND DR   
5                               Aldi #69                  4720 SUMMER AVENUE   
6                  Richmond, Christopher              1203 Chamberlain Drive   


         City State Zipcode           Group  
0   Horn Lake    MS   38637  Johnathan Shaw   
1   Horn Lake    MS   38637    Tony Bonetti   
2     Memphis    TN   38118    Tony Bonetti   
3     Memphis    TN   38122    Tony Bonetti   
4   JONESBORO    AR   72401   Josh Jennings   
5     Memphis    TN   38122   Josh Jennings   
6     Memphis    TN   38119   Josh Jennings   


                                         full_address      Color  sequence  \
0             3878 Goodman Rd.,Horn Lake,MS,38637,USA       blue         1   
1             3878 Goodman Rd.,Horn Lake,MS,38637,USA  cadetblue         1   
2               4985 E Raines Rd,Memphis,TN,38118,USA  cadetblue         2   
3               3240 Jackson Ave,Memphis,TN,38122,USA  cadetblue         3   
4            108 E HIGHLAND DR,JONESBORO,AR,72401,USA     yellow         1   
5             4720 SUMMER AVENUE,Memphis,TN,38122,USA     yellow         2   
6         1203 Chamberlain Drive,Memphis,TN,38119,USA     yellow         3   


     Latitude  Longitude  
0   34.962637 -90.069019  
1   34.962637 -90.069019  
2   35.035367 -89.898428  
3   35.165115 -89.952624  
4   35.821835 -90.705030  
5   35.148707 -89.903760  
6   35.098829 -89.866838  

То же самое, когда я пытаюсь выполнить l oop в for for l oop, я не могу достичь Что мне нужно. :

from folium import Map, FeatureGroup, Marker, LayerControl

mapa = Map(location=[35.11567262307692,-89.97423444615382], zoom_start=12,tiles='Stamen Terrain')
#mapa.add_tile_layer()
for i in range(0,len(df_addresses)): 
feature_group = FeatureGroup(name=df_addresses.iloc[i]['Group'])
    feature_group.add_child(Marker([df_addresses.iloc[i]['Latitude'], df_addresses.iloc[i]['Longitude']], 
                  popup=('Address: ' + str(df_addresses.iloc[i]['full_address']) + '<br>'
                    'Tech: ' + str(df_addresses.iloc[i]['Group'])),
                                   icon = plugins.BeautifyIcon(
                                    number= str(df_addresses.iloc[i]['sequence']),
                                    border_width=2,
                                    iconShape= 'marker',
                                    inner_icon_style= 'margin-top:2px',
                                     background_color  = df_addresses.iloc[i]['Color'],
                 )))
    mapa.add_child(feature_group)
mapa.add_child(LayerControl())

1 Ответ

0 голосов
/ 18 апреля 2020

Это пример набора данных, потому что я не хотел форматировать вашу df. Тем не менее, я думаю, вы поймете идею.

print(df_addresses)
    Latitude  Longitude Group
0  34.962637 -90.069019     B
1  34.962637 -90.069019     B
2  35.035367 -89.898428     A
3  35.165115 -89.952624     B
4  35.821835 -90.705030     A
5  35.148707 -89.903760     A
6  35.098829 -89.866838     A

После того, как я создаю объект карты (карты), я выполняю групповую операцию в столбце группы. Затем я перебираю каждую группу. Сначала я создаю FeatureGroup с grp_name (A или B). И для каждой группы я перебираю фрейм данных этой группы, создаю маркеры и добавляю их в группу объектов

mapa = folium.Map(location=[35.11567262307692,-89.97423444615382], zoom_start=12,
           tiles='Stamen Terrain')

for grp_name, df_grp in df_addresses.groupby('Group'):
    feature_group = folium.FeatureGroup(grp_name)
    for row in df_grp.itertuples():
        folium.Marker(location=[row.Latitude, row.Longitude]).add_to(feature_group)
    feature_group.add_to(mapa)

folium.LayerControl().add_to(mapa)
mapa

enter image description here

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