यह आपके इनपुट स्ट्रिंग को आपके अपेक्षित आउटपुट में परिवर्तित करता है। यह मिनट और सेकंड को मौजूद नहीं कर सकता है।
वर्तमान में, यह उत्तर/दक्षिण, पूर्व/पश्चिम के लिए खाता नहीं है। यदि आप मुझे बताएंगे कि आप उन्हें कैसे संभालना चाहते हैं, तो मैं जवाब अपडेट करूंगा।
# -*- 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)
स्रोत
2012-06-01 16:01:19
क्या आपके द्वारा दी गई के लिए समन्वय इसी उत्पादन होगा। इसके अलावा, अक्षांश में 3 संख्यात्मक फ़ील्ड हैं, रेखांश 2 .. यह सामान्य है कि यह कैसे निर्दिष्ट किया गया है (और आपके डेटा में निरंतर)? अब तक तुमने क्या प्रयास किये हैं? – Levon
तो मैं तैरने के लिए उत्पन्न करना चाहता हूं: '0 डिग्री 25'30" एस, 91 डिग्री 7'W' -> '0.425',' 91.116667'। ऐसा लगता है कि डेटा में मिनटों से संबंधित हो सकता है या नहीं। जहां वहां है कोई भी तो मैं यह मान सकते हैं 0. –
देशांतर 180 W = -180 180 E = 180 अक्षांश 90 एन = 90 90 एस = -90 उदाहरण -0.425, -९१.११६६६७ देना चाहिए। 0 डिग्री खोज के द्वारा इस की जाँच करें उदाहरण के लिए Google मानचित्र में 25'30 "एस, 91 डिग्री 7'W। –