folium ::使GeoJson搜索标记透明

时间:2019-03-23 10:28:27

标签: python geojson folium

我有一个基本的茶叶加热图,将位置显示为CircleMarker,并在顶部显示加热图图层,如下所示。

enter image description here

我想在地图中添加搜索功能,因此我将熊猫数据框转换为GeoJson格式,以便可以通过。

  

folium.plugins.Search(class,search_label = None,   search_zoom = None,geom_type ='Point',position ='topleft',   placeholder ='Search',合拢= False,** kwargs)基础:   branca.element.MacroElement

     

将搜索工具添加到您的地图。

     

参数:图层(GeoJson,TopoJson,FeatureGroup,MarkerCluster   类对象。)–要在

中建立索引的地图图层

我能够使用以下代码将Pandas DataFrame转换为GeoJson。

df_json = pd.read_csv("C:\\py\\folium\\NE Task 1\\json.csv").dropna(how="any")

# convert lat-long to floats and change address from ALL CAPS to Regular Capitalization
df_json['latitude'] = df_json['latitude'].astype(float)
df_json['longitude'] = df_json['longitude'].astype(float)
df_json['Site Name'] = df_json['Site Name'].str.title()


# we don't need all those columns - only keep useful ones
useful_cols = ['Site ID', 'Site Name', 'latitude', 'longitude']
df_subset = df_json[useful_cols]

# drop any rows that lack lat/long data
df_geo = df_subset.dropna(subset=['latitude', 'longitude'], axis=0, inplace=False)


def df_to_geojson(df_json, properties, lat='latitude', lon='longitude'):

    geojson = {'type': 'FeatureCollection', 'features': []}

    # loop through each row in the dataframe and convert each row to geojson format
    for _, row in df_json.iterrows():
        # create a feature template to fill in
        feature = {'type': 'Feature',
                   'properties': {},
                   'geometry': {'type': 'Point', 'coordinates': []}}


        # fill in the coordinates
        feature['geometry']['coordinates'] = [row[lon], row[lat]]

        # for each column, get the value and add it as a new feature property
        for prop in properties:
            feature['properties'][prop] = row[prop]

        # add this feature (aka, converted dataframe row) to the list of features inside our dict
        geojson['features'].append(feature)

    return geojson


geojson_dict = df_to_geojson(df_geo, properties=useful_cols)
geojson_str = json.dumps(geojson_dict, indent=2)


folium.plugins.Search(data=geojson_dict, geom_type='Point',
                      search_zoom=14, search_label='Site ID').add_to(map)

执行完该搜索功能后,可以按我的意愿正常工作,但是标记正在TOP上显示,我无法像下面那样隐藏它。

enter image description here

请帮助我指导如何隐藏此标记并保持GeoJson完好无损,以便可以将其用于搜索功能。我试图使其透明,通过我在stackOverflow上发现的解决方案来更改GeoJson的不透明度,但没有任何效果。

提前感谢您的时间,对冗长的帖子表示抱歉。

最好的问候

1 个答案:

答案 0 :(得分:0)

通常

如果您将folium.LayerControl().add_to(map)添加到地图,则它提供了显示或隐藏Geojson标记的功能。然后,您可以使用show=False或从地图右上角的“图层”图标隐藏或显示标记(请参见下图)

例如:

# creating folium GeoJson objects from out GeoDataFrames
pointgeo = folium.GeoJson(gdf,name='group on map', show=False,
                      tooltip=folium.GeoJsonTooltip(fields=['Name', 'Relation', 'City'], aliases=['Name','Relation', 'City'],
                        localize=True)).add_to(map)

# To Add a LayerControl add below line
folium.LayerControl().add_to(map)

map

像这些图像一样,通过控制顶部图层“ Layers”的图层来显示或隐藏标记-1)标记2)隐藏标记

with markers

hidden markers

您可以参考此链接获取更多示例: Folium_search

希望这会有所帮助!