将UN地点的`坐标`转换为纬度和经度

-2 投票
1 回答
42 浏览
提问于 2025-04-14 18:26

我有一些来自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

撰写回答