Я недавно обнаружил, что folium - очень впечатляющая библиотека для визуализации геоданных, и я собираюсь использовать ее в качестве моей стандартной библиотеки для геоданных.Спасибо всем людям, которые работали над этим пакетом!
В одном из моих текущих проектов я написал класс костюма, который получает список кортежей (широта, долгота) и создает карту тепла и карту маркера кластера.
Для анализаалгоритмически я хотел бы применить метод Cluster Marker и получить метку кластера для каждого кортежа, аналогично современному алгоритму кластеризации, такому как DBSCAN или HDBSCAN.Возможно ли это в текущей реализации?
Заранее большое спасибо.
Мой код выглядит следующим образом:
lat, lot = 'Latitude', 'Longitude'
class GeoData_Mapper(GeoData_Reader):
'''
class which is used to plot geo data on a map. Inherits from GeoData_Reader. Covers severals functions:
- HeatMap: draws a heatmap over a real-world map
- MapCluster: draws a map and indicates different cluster on the map itself
'''
def __init__(self,df):
super().__init__(df)
self._style_list = ["OpenStreetMap", "Mapbox Bright","Mapbox Control Room" ,
"Stamen Terrain","Stamen Toner", "Stamen Watercolor",
"CartoDB positron", "CartoDB dark_matter"]
self._grad_list = {0.2: 'blue', 0.4: 'lime', 0.6: 'orange', 1: 'red'}
self.__init_lat = df.loc[0,lat]
self.__init_lon = df.loc[0,lon]
def __generate_BaseMap(self,style, zoom_start):
self.map = folium.Map(location=[self.__init_lat,self.__init_lon], control_scale=True, zoom_start=zoom_start, tiles=self._style_list[style])
return self
def generate_HeatMap(self,style=6,zoom_start=12):
self.__generate_BaseMap(style,zoom_start)
HeatMap(data=self.df[[lat,lon]].groupby([lat,lon]).sum().reset_index().values.tolist(), radius=8, max_zoom=13).add_to(self.map)
def generate_MapCluster(self,style=6,zoom_start=12,include_Heat=True):
if include_Heat:
self.generate_HeatMap(style=style,zoom_start=zoom_start)
self.map.add_child(MarkerCluster(locations=list(zip(self.df[lat], self.df[lon]))))
else:
self.__generate_BaseMap(style,zoom_start)
self.map.add_child(MarkerCluster(locations=list(zip(self.df[lat], self.df[lon]))))