Набор скрипотов для работы с веб-сервисом RunGPS - скачивание и обработка треков...
[pyrungps.git] / pyosmname.py
1 # coding=UTF-8
2 """
3 nominatim.openstreetmap.org API
4 """
5
6 import urllib2
7 from lxml import etree
8
9 def GetXMLDescr(lat,lon):
10
11     req = urllib2.Request("http://nominatim.openstreetmap.org/reverse?lat=%s&lon=%s&accept-language=ru,en" %(lat,lon), None, {'User-agent': 'Mozilla/5.0'})
12     page = urllib2.urlopen(req).read()
13
14     return etree.fromstring(page)
15
16 def printable_name(addr):
17
18     if 'country' in addr:
19       if 'state' in addr:
20         if addr['country'] == u"Российская Федерация" and addr['state'] == u"Москва":
21           if 'road' in addr:
22             str = addr['road'] + ', ' + addr['state'] + ', ' + addr['country']
23           else:
24             str = addr['state'] + ', ' + addr['country']
25         else:
26           if 'city' in addr:
27             if 'road' in addr:
28               str = addr['road'] + ', ' + addr['city'] + ', ' + addr['state'] + ', ' + addr['country']
29             else:
30               str = addr['city'] + ', ' + addr['state'] + ', ' + addr['country']
31           elif 'town' in addr:
32             if 'road' in addr:
33               str = addr['road'] + ', ' + addr['town'] + ', ' + addr['state'] + ', ' + addr['country']
34             else:
35               str = addr['town'] + ', ' + addr['state'] + ', ' + addr['country']
36           elif 'village' in addr:
37             if 'road' in addr:
38               str = addr['road'] + ', ' + addr['village'] + ', ' + addr['state'] + ', ' + addr['country']
39             else:
40               str = addr['village'] + ', ' + addr['state'] + ', ' + addr['country']
41           elif 'county' in addr:
42             if 'road' in addr:
43               str = addr['road'] + ', ' + addr['county'] + ', ' + addr['state'] + ', ' + addr['country']
44             else:
45               str = addr['county'] + ', ' + addr['state'] + ', ' + addr['country']
46           else:
47             if 'road' in addr:
48               str = addr['road'] + ', ' + addr['state'] + ', ' + addr['country']
49             else:
50               str = addr['state'] + ', ' + addr['country']
51       else:
52         if 'city' in addr:
53           if 'road' in addr:
54             str = addr['road'] + ', ' + addr['city'] + addr['country']
55           else:
56             str = addr['city'] + ', ' + addr['country']
57         elif 'village' in addr:
58           if 'road' in addr:
59             str = addr['road'] + ', ' + addr['village'] + addr['country']
60           else:
61             str = addr['village'] + ', ' + addr['country']
62         else:
63           if 'road' in addr:
64             str = addr['road'] + ', ' + addr['country']
65           else:
66             str = addr['country']
67     else:
68       str = u"Планета Земля, "
69       if addr['lat'] > 0:
70         str = str + u"%s с.ш.," % (addr['lat'])
71       else:
72         str = str + u"%s ю.ш.," % (-addr['lat'])
73       if addr['lon'] > 0:
74         str = str + u"%s в.д." % (addr['lon'])
75       else:
76         str = str + u"%s з.д." % (-addr['lon'])
77
78     return str
79
80 class GeoName:
81
82     def __init__(self, lat, lon):
83
84         for elem in GetXMLDescr(lat,lon):
85           self.addr = {'lat':lat,'lon':lon}
86           self.road = ''
87           self.city = ''
88           self.country = '' 
89
90           if elem.tag == "addressparts":
91             for addrpart in elem:
92               tag = addrpart.tag
93               text = urllib2.unquote(addrpart.text)
94               self.addr[tag] = text
95               if tag == "road":
96                 self.road = text
97               elif tag == "city":
98                 self.city = text
99               elif tag == "country":
100                 self.country = text
101                 
102         self.printable = printable_name(self.addr)
103                  
104