度分秒与十进制批量转换
liss = [
'北纬30°43′39″,东经119°27′42″'
,'北纬30°54′42″,东经119°12′52″'
,'北纬30°53′12″,东经119°31′25″'
,'30°50′44″,119°20′38″'
,'30°0′38″,119°25′0″'
,'30°39′33″,119°17′21″'
,'30°53′54″,119°30′42″'
,'30°0′17″,119°33′44″'
,'30°2′47″,119°31′55″'
,'中心坐标北纬30°55′48″、东经119°32′39″'
,'中心坐标北纬30°54′9″、东经119°19′46″'
,'中心坐标北纬30°54′48″、东经119°20′20.7″'
,'中心坐标北纬30°49′31″N、东经119°25′6″E'
,'北纬30°55′6.92″、东经119°13′25.4″'
,'中心坐标北纬30°51′25″、东经119°25′13″'
,'中心坐标北纬30°55′23″、东经119°20′52″中心坐标北纬30°58′49″、东经119°34′52″中心坐标北纬30°55′39″、东经119°12′21″'
,'中心坐标北纬30°53′20″、东经119°21′16″'
]
import re
def extract_dms_from_string(dms_string):
"""
从形如 "30°53′54″" 的字符串中提取度、分、秒
"""
parts = dms_string.replace('°', ' ').replace('′', ' ').replace('″', ' ').split()
degrees = int(parts[0])
minutes = int(parts[1])
seconds = float(parts[2]) if '.' in parts[2] else int(parts[2])
return degrees, minutes, seconds
def extract_numbers_from_coordinate(coordinate_string):
numbers = re.findall(r'[-+]?\d*\.\d+|\d+', coordinate_string)
return [float(num) if '.' in num else int(num) for num in numbers]
def dms_to_decimal(degrees, minutes, seconds):
dms_to_deci = degrees + (minutes / 60) + (seconds / 3600)
return dms_to_deci
result = []
_split_size = 6
for coords in liss:
numbers = extract_numbers_from_coordinate(coords)
_splits = [numbers[i:i+_split_size] for i in range(0,len(numbers),_split_size)]
for _split in _splits:
_jd_deci = dms_to_decimal(_split[0],_split[1],_split[2])
_wd_deci = dms_to_decimal(_split[3],_split[4],_split[5])
_split.append( round(_jd_deci, 8) )
_split.append( round(_wd_deci, 8) )
result.append( _split )
import pandas as pd
result_df = pd.DataFrame( result )
result_df.columns = ['wd_degrees', 'wd_minutes', 'wd_seconds', 'jd_degrees', 'jd_minutes', 'jd_seconds', 'jd', 'wd' ]