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

如何用Pandas转换度分秒经纬度为十进制并绘制地图散点图?

度分秒坐标处理与散点图绘制方案

Pandas本身没有内置的度分秒(DMS)转十进制坐标的功能,你需要先把DMS格式转换为十进制格式,才能在Pandas中处理并绘制散点图。下面是具体实现方法:

1. 自定义DMS转十进制函数

自己写一个简单函数解析DMS字符串,计算十进制坐标即可,注意方向标识(E/W、N/S):E和N为正,W和S为负。

import pandas as pd
import re

def dms_to_decimal(dms_str):
    # 匹配方向、度、分、秒
    match = re.match(r'([NSEW])?\s*(\d+)°(\d+)\'(\d+)\"', dms_str.strip())
    if not match:
        return None
    dir, deg, min, sec = match.groups()
    decimal = int(deg) + int(min)/60 + int(sec)/3600
    # 根据方向调整正负
    if dir in ['W', 'S']:
        decimal = -decimal
    return decimal

2. Pandas中批量转换

假设你的数据存在CSV文件中,列名为经度和纬度,读取后用apply批量转换:

# 读取数据
df = pd.read_csv('站点数据.csv')

# 转换为十进制坐标
df['经度_decimal'] = df['经度'].apply(dms_to_decimal)
df['纬度_decimal'] = df['纬度'].apply(dms_to_decimal)

3. 绘制散点图

转换完成后,可使用Matplotlib做基础可视化,或用Folium做交互式地图:

Matplotlib基础散点图

import matplotlib.pyplot as plt

plt.scatter(df['经度_decimal'], df['纬度_decimal'])
plt.xlabel('经度(十进制)')
plt.ylabel('纬度(十进制)')
plt.title('站点坐标散点图')
plt.show()

Folium交互式地图散点图

import folium

# 以坐标均值为地图中心
m = folium.Map(location=[df['纬度_decimal'].mean(), df['经度_decimal'].mean()], zoom_start=10)

# 添加每个站点标记
for idx, row in df.iterrows():
    folium.Marker(
        location=[row['纬度_decimal'], row['经度_decimal']],
        popup=f"站点{idx+1}"
    ).add_to(m)

# 保存地图
m.save('站点地图.html')

内容的提问来源于stack exchange,提问作者Maximilian Bähr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:15:59