如何将冒号格式的Lat/long数据(如170:11:10)转换为十进制?
冒号分隔格式经纬度转十进制方法
单个值手动转换
度分秒(冒号分隔,如170:11:10)转十进制的核心公式:
十进制值 = 度 + 分/60 + 秒/3600
拿示例170:11:10计算:170 + 11/60 + 10/3600 ≈ 170.1861
如果是南纬(S)或西经(W),最终结果要加负号。
数据表批量转换
Excel 批量处理
假设经纬度数据在A列,在相邻空白列(如B列)输入以下公式,下拉填充即可完成批量转换:
=LEFT(A1,FIND(":",A1)-1)+MID(A1,FIND(":",A1)+1,FIND(":",A1,FIND(":",A1)+1)-FIND(":",A1)-1)/60+RIGHT(A1,LEN(A1)-FIND(":",A1,FIND(":",A1)+1))/3600
如果数据包含方向标识(如30:20:15S),可在公式中加入判断逻辑,比如判断最后一位是否为S/W,若是则乘以-1:
=IF(RIGHT(A1,1)={"S","W"},-1,1)*(LEFT(A1,FIND(":",A1)-1)+MID(A1,FIND(":",A1)+1,FIND(":",A1,FIND(":",A1)+1)-FIND(":",A1)-1)/60+RIGHT(A1,LEN(A1)-FIND(":",A1,FIND(":",A1)+1)-1)/3600)
Python 批量处理(用Pandas)
如果是用Python处理CSV/Excel数据表,可自定义转换函数批量处理:
import pandas as pd # 定义度分秒转十进制函数 def dms_to_decimal(dms_str): # 拆分冒号分隔的度、分、秒 degrees, minutes, seconds = map(float, dms_str.split(':')) return degrees + minutes/60 + seconds/3600 # 读取数据表(替换为你的文件路径) df = pd.read_excel("your_data.xlsx") # 转换指定列(假设列名为Latitude和Longitude) df["Lat_decimal"] = df["Latitude"].apply(dms_to_decimal) df["Lon_decimal"] = df["Longitude"].apply(dms_to_decimal) # 保存转换后的数据表 df.to_excel("converted_data.xlsx", index=False)
若数据包含方向标识,修改函数即可:
def dms_to_decimal_with_dir(dms_str): parts = dms_str.split(':') degrees = float(parts[0]) minutes = float(parts[1]) # 拆分秒和方向标识 seconds, direction = parts[2][:-1], parts[2][-1] decimal_val = degrees + float(minutes)/60 + float(seconds)/3600 # 南纬、西经取负值 if direction in ['S', 'W']: decimal_val = -decimal_val return decimal_val
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

