You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter中创建标记信息数据库并实现信息检索?

批量生成地图标记的实现方案

以下是从数据库加载数据、在Jupyter中批量生成地图标记的具体步骤,以SQLite数据库+folium地图库为例:

1. 准备数据库与标记数据

首先创建存储标记信息的数据库表,表结构至少包含纬度(latitude)、经度(longitude),还可按需添加标题(title)、描述(description)等字段。

用Python的sqlite3库创建数据库并插入示例数据:

import sqlite3

# 连接数据库(不存在则自动创建)
conn = sqlite3.connect('map_markers.db')
cursor = conn.cursor()

# 创建标记表
cursor.execute('''
CREATE TABLE IF NOT EXISTS markers (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    latitude REAL NOT NULL,
    longitude REAL NOT NULL,
    title TEXT,
    description TEXT
)
''')

# 插入示例标记数据
sample_markers = [
    (39.9042, 116.4074, '北京天安门', '中华人民共和国首都地标'),
    (31.2304, 121.4737, '上海外滩', '上海标志性景观区域'),
    (23.1291, 113.2644, '广州塔', '广州最高建筑')
]
cursor.executemany('INSERT INTO markers (latitude, longitude, title, description) VALUES (?, ?, ?, ?)', sample_markers)

# 提交并关闭连接
conn.commit()
conn.close()

2. 在Jupyter中读取数据库数据

使用pandas库读取数据库中的标记数据,转换成DataFrame格式便于后续处理:

import pandas as pd
import sqlite3

# 连接数据库
conn = sqlite3.connect('map_markers.db')

# 读取所有标记数据
markers_df = pd.read_sql_query('SELECT * FROM markers', conn)

# 关闭连接
conn.close()

# 查看数据(可选)
print(markers_df.head())

3. 批量生成地图标记

用folium库初始化地图,然后遍历DataFrame中的每一行数据,批量添加标记:

import folium

# 初始化地图(可设置默认中心坐标和缩放级别)
m = folium.Map(location=[35.8617, 104.1954], zoom_start=5)

# 遍历数据批量添加标记
for idx, row in markers_df.iterrows():
    # 创建标记弹窗内容
    popup_content = f"<strong>{row['title']}</strong><br>{row['description']}"
    # 添加标记到地图
    folium.Marker(
        location=[row['latitude'], row['longitude']],
        popup=folium.Popup(popup_content, max_width=300),
        tooltip=row['title']  # 鼠标悬停显示的提示文字
    ).add_to(m)

# 在Jupyter中显示地图
m

4. 大数据量优化方案

如果标记数量超过千级,建议使用folium.plugins.FastMarkerCluster来优化性能,避免地图加载卡顿:

from folium.plugins import FastMarkerCluster

# 初始化地图
m = folium.Map(location=[35.8617, 104.1954], zoom_start=5)

# 批量生成集群标记
FastMarkerCluster(
    data=list(zip(markers_df['latitude'], markers_df['longitude'])),
    popup=folium.Popup(lambda row: f"<strong>{markers_df.iloc[row[0]]['title']}</strong><br>{markers_df.iloc[row[0]]['description']}", max_width=300)
).add_to(m)

# 显示地图
m

注意事项

  • 确保数据库中的经纬度是数值类型,若为字符串需先转换:markers_df['latitude'] = pd.to_numeric(markers_df['latitude'])
  • 若使用其他数据库(如PostgreSQL、MySQL),只需替换连接方式(例如用psycopg2连接PostgreSQL),读取数据的逻辑基本一致
  • 可根据需求自定义标记图标、颜色等样式,参考folium官方文档的Marker参数

内容的提问来源于stack exchange,提问作者White Angel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:22:13