Кластерные Полилинии в Фолиуме - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь показать на карте сеть с множеством точек, соединенных друг с другом через PolyLines. Я использовал MarkerCluster для построения точек, но, конечно, PolyLines не ведут себя соответствующим образом, поэтому, если точки уменьшаются, если я уменьшаю масштаб, линии продолжают переходить от невидимого маркера к другому.

Насколько я понял, читая документацию, нет способа сделать это встроенным в Folium, но есть ли обходной путь, который я мог бы попробовать?

РЕДАКТИРОВАТЬ: Добавил код по запросу, может не добавляйте данные, но это набор ребер и узлов с геокоординатами и некоторыми функциями.

def new_map(value):
    fil = []
    mc = MarkerCluster()
    for p in value:
        fil.append(services[ids1.index(int(p))])
    m = folium.Map(start_loc)
    map_ls = []
    if len(fil) > 0:
        for x in edges_fol:
            for y in fil:
                if y in x['data']['serviceName']:
                    tooltip = 'Services on this edge:<br> {}'.format(['{}<br>'.format(t) for t in x['data']['serviceName_aggregate']]).replace('"', '').replace('[', '').replace(',', '').replace(']', '').replace("'", '')
                    line = folium.PolyLine(locations = [x['data']['source_geo_site_coordinates'], x['data']['target_geo_site_coordinates']], popup = tooltip, weight = len(x['data']['serviceName_aggregate']), smooth_factor = 500)
                    if line not in list_of_polylines:
                        if x['data']['source'] not in map_ls:
                            map_ls.append(x['data']['source'])
                            mc.add_child(folium.Marker(location = x['data']['source_geo_site_coordinates'], popup=x['data']['source'])).add_to(m)
                        if x['data']['target'] not in map_ls:
                            map_ls.append(x['data']['target'])
                            mc.add_child(folium.Marker(location = x['data']['target_geo_site_coordinates'], popup=x['data']['target'])).add_to(m)        
                        list_of_polylines.append((line, y))
    else:
        for x in nodes_fol:
            mc.add_child(folium.Marker(location = x['data']['geo_site_coordinates'], popup=x['data']['siteName'])).add_to(m)
    tbd = []
    for line in list_of_polylines:
        if line[1] not in fil:
            tbd.append(line)
        else:
            line[0].add_to(mc)
    m.save('test1.html')
    for t in tbd: 
        list_of_polylines.remove(t)
    return open('test1.html', 'r').read()```
...