Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Wish I'd been up for writing an elisp version! This is from 2011-11. My blog is offline at the moment. -kurt
- # https://plus.google.com/u/0/113859563190964307534/posts/aqmFrjcY7WH
- #Here is my answers to emacs lisp exercise: latitude-longitude-decimalize. The first is dumb. It hard codes #the characters, which I think source-highlight mangled pretty badly. The code wasn't very pretty to start #with. The second solution is much more robust. It allows and character(s) to be the separator(s).
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- test_data = r"37ÃÇ°26âÂIJ36.42âÂijN 06ÃÇ°15âÂIJ14.28âÂijW"
- def decimal_deg_simple(coord_str):
- lat_str, lon_str = coord_str.split()
- lat = int(lat_str.split('ÃÇ°')[0])
- lat += int(lat_str.split('ÃÇ°')[1].split('âÂIJ')[0]) / 60.
- lat += float(lat_str.split('âÂIJ')[1][:-4]) / 3600.
- if 'S' in lat_str:
- lat = -lat
- lon = int(lon_str.split('ÃÇ°')[0])
- lon += int(lon_str.split('ÃÇ°')[1].split('âÂIJ')[0]) / 60.
- lon += float(lon_str.split('âÂIJ')[1][:-4]) / 3600.
- if 'W' in lon_str:
- lon = -lon
- return lat,lon
- print 'simple:', decimal_deg_simple(test_data)
- ########################################
- # Use a regular expression
- import re
- rawstr = r"""(?P<lat_deg>\d{1,2})\D+
- (?P<lat_min>\d{1,2})\D+
- (?P<lat_sec>\d{1,2}(\.\d+))\D+
- (?P<lat_hemi>[NS])
- \s+
- (?P<lon_deg>\d{1,3})\D+
- (?P<lon_min>\d{1,2})\D+
- (?P<lon_sec>\d{1,2}(\.\d+))\D+
- (?P<lon_hemi>[EW])
- """
- compile_obj = re.compile(rawstr, re.VERBOSE)
- def decimal_deg_re(coord_str):
- g = compile_obj.search(coord_str).groupdict() # m is match
- lat = int(g['lat_deg']) + int(g['lat_min'])/60. + float(g['lat_sec']) / 3600.
- if g['lat_hemi'] == 'S':
- lat = -lat
- lon = int(g['lon_deg']) + int(g['lon_min'])/60. + float(g['lon_sec']) / 3600.
- if g['lon_hemi'] == 'S':
- lon = -lon
- return {'y':lat, 'x':lon}
- print 're:', decimal_deg_re(test_data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement