将UN地点的`坐标`转换为纬度和经度
我有一些来自UNLOCATION数据集的坐标,格式是这样的:4230N 00131E
。
根据他们网站上的说明,这些坐标应该这样处理:https://service.unece.org/trade/locode/Service/LocodeColumn.htm#Coordinates
这一列包含了地点的地理坐标(纬度/经度),如果有的话。
为了避免使用不标准的字符和空格,采用了以下标准格式:
0000lat 00000long
(lat - 纬度:N或S;long - 经度:W或E,只有一个数字,大写字母)
其中,最右边的两个数字表示分钟,前面两个或三个数字表示纬度和经度的度数。此外,纬度需要指定N或S,经度需要指定W或E,具体情况而定。
有没有什么公式可以把这种格式转换成有效的纬度和经度,或者在Python中有没有相关的包可以做到这一点?因为把4230N 00131E
转换成4230,00131
似乎不是正确的解决方案。
1 个回答
1
最后我写了这段代码:
def convert_unlocation_to_lat_lng(unlocation_coordinates: str) -> Tuple[Optional[float], Optional[float]]:
# Split the input string into latitude and longitude parts
coordinates = unlocation_coordinates.split(" ")
if not coordinates[0]:
return None, None
lat_str = coordinates[0]
lng_str = coordinates[1]
# Extract latitude and longitude values
lat_numbers = lat_str[:-1]
lat_deg = int(lat_numbers[:-2])
lat_min = int(lat_numbers[-2:])
lng_numbers = lng_str[:-1]
lng_deg = int(lng_numbers[:3])
lng_min = int(lng_numbers[3:])
# Determine direction of latitude and longitude
lat_dir = 'N' if lat_str.endswith('N') else 'S'
lng_dir = 'E' if lng_str.endswith('E') else 'W'
# Calculate latitude and longitude in decimal format
latitude = lat_deg + lat_min / 60
longitude = lng_deg + lng_min / 60
# Adjust latitude and longitude based on direction
if lat_dir == 'S':
latitude *= -1
if lng_dir == 'W':
longitude *= -1
return latitude, longitude