e6dc29e1ca37e6e468728bd4301e3cf882a64ab0
[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     reqstr = "http://nominatim.openstreetmap.org/reverse?lat=%s&lon=%s&accept-language=ru,en" %(lat,lon)
12     print reqstr
13     headers = { 'User-Agent' : 'PyRunGPS/1.0', 'Referer' : 'https://maps.rvb.name' }    
14     req = urllib2.Request(reqstr, None, headers)
15     page = urllib2.urlopen(req).read()
16
17     return etree.fromstring(page)
18
19 def printable_name(addr):
20
21     if 'country' in addr:
22       if 'state' in addr:
23         if addr['country'] == u"Российская Федерация" and addr['state'] == u"Москва":
24           if 'road' in addr:
25             str = addr['road'] + ', ' + addr['state'] + ', ' + addr['country']
26           else:
27             str = addr['state'] + ', ' + addr['country']
28         else:
29           if 'city' in addr:
30             if 'road' in addr:
31               str = addr['road'] + ', ' + addr['city'] + ', ' + addr['state'] + ', ' + addr['country']
32             else:
33               str = addr['city'] + ', ' + addr['state'] + ', ' + addr['country']
34           elif 'town' in addr:
35             if 'road' in addr:
36               str = addr['road'] + ', ' + addr['town'] + ', ' + addr['state'] + ', ' + addr['country']
37             else:
38               str = addr['town'] + ', ' + addr['state'] + ', ' + addr['country']
39           elif 'village' in addr:
40             if 'road' in addr:
41               str = addr['road'] + ', ' + addr['village'] + ', ' + addr['state'] + ', ' + addr['country']
42             else:
43               str = addr['village'] + ', ' + addr['state'] + ', ' + addr['country']
44           elif 'county' in addr:
45             if 'road' in addr:
46               str = addr['road'] + ', ' + addr['county'] + ', ' + addr['state'] + ', ' + addr['country']
47             else:
48               str = addr['county'] + ', ' + addr['state'] + ', ' + addr['country']
49           else:
50             if 'road' in addr:
51               str = addr['road'] + ', ' + addr['state'] + ', ' + addr['country']
52             else:
53               str = addr['state'] + ', ' + addr['country']
54       else:
55         if 'city' in addr:
56           if 'road' in addr:
57             str = addr['road'] + ', ' + addr['city'] + ', ' + addr['country']
58           else:
59             str = addr['city'] + ', ' + addr['country']
60         elif 'village' in addr:
61           if 'road' in addr:
62             str = addr['road'] + ', ' + addr['village'] +', ' + addr['country']
63           else:
64             str = addr['village'] + ', ' + addr['country']
65         else:
66           if 'road' in addr:
67             str = addr['road'] + ', ' + addr['country']
68           else:
69             str = addr['country']
70     else:
71       str = u"Планета Земля, "
72       if addr['lat'] > 0:
73         str = str + u"%s с.ш.," % (addr['lat'])
74       else:
75         str = str + u"%s ю.ш.," % (-addr['lat'])
76       if addr['lon'] > 0:
77         str = str + u"%s в.д." % (addr['lon'])
78       else:
79         str = str + u"%s з.д." % (-addr['lon'])
80
81     return str
82
83 class GeoName:
84
85     def __init__(self, lat, lon):
86
87         for elem in GetXMLDescr(lat,lon):
88           self.addr = {'lat':lat,'lon':lon}
89           self.road = ''
90           self.city = ''
91           self.country = '' 
92
93           if elem.tag == "addressparts":
94             for addrpart in elem:
95               tag = addrpart.tag
96               text = urllib2.unquote(addrpart.text)
97               self.addr[tag] = text
98               if tag == "road":
99                 self.road = text
100               elif tag == "city":
101                 self.city = text
102               elif tag == "country":
103                 self.country = text
104                 
105         self.printable = printable_name(self.addr)
106                  
107