これは、入力文字列を期待される出力に変換します。それは存在しない分と秒を処理することができます。
現在、北/南、東/西を考慮していません。どのように処理したいのか教えていただければ、私は答えを更新します。
# -*- coding: latin-1 -*-
import re
PATTERN = re.compile(r"""(?P<lat_deg>\d+)° # Latitude Degrees
(?:(?P<lat_min>\d+)')? # Latitude Minutes (Optional)
(?:(?P<lat_sec>\d+)")? # Latitude Seconds (Optional)
(?P<north_south>[NS]) # North or South
,[ ]
(?P<lon_deg>\d+)° # Longitude Degrees
(?:(?P<lon_min>\d+)')? # Longitude Minutes (Optional)
(?:(?P<lon_sec>\d+)")? # Longitude Seconds (Optional)
(?P<east_west>[EW]) # East or West
""", re.VERBOSE)
LAT_FIELDS = ("lat_deg", "lat_min", "lat_sec")
LON_FIELDS = ("lon_deg", "lon_min", "lon_sec")
def parse_dms_string(s, out_type=float):
"""
Convert a string of the following form to a tuple of out_type latitude, longitude.
Example input:
0°25'30"S, 91°7'W
"""
values = PATTERN.match(s).groupdict()
return tuple(sum(out_type(values[field] or 0)/out_type(60 ** idx) for idx, field in enumerate(field_names)) for field_names in (LAT_FIELDS, LON_FIELDS))
INPUT = """0°25'30"S, 91°7'W"""
print parse_dms_string(INPUT) # Prints: (0.42500000000000004, 91.11666666666666)
が得られます。また、緯度には3つの数値フィールドがあり、経度2はこれらがどのように指定されているか(データ内では定数)の典型ですか?これまでに何を試しましたか? – Levon
だから私は浮動小数点数に生成したい: '0°25'30" S、91°7'W' - > '0.425'、' 91.116667'。データに分が付いていてもいなくても良いようです。どれも、私は0 –
経度 をとることができる180 W = -180 180 E = 180 緯度 90 N = 90 90のS = -90 例-0.425、-91.116667を与えてはならない。0°を検索することにより、これを確認し例えばGoogleマップでは25'30 "S、91°7'Wです。 –