+
+
+ def db_xml(self):
+ uri = etree.Element(DB+'uri',nsmap=NSMAP)
+ ln = etree.SubElement(uri, DB+'link')
+ ln.set(XLINK+'href',self.osmlink())
+ imo = etree.SubElement(ln, DB+'inlinemediaobject')
+ io = etree.SubElement(imo, DB+'imageobject', condition="web")
+ idat = etree.SubElement(io , DB+'imagedata',
+ fileref=encode(self.latitude, self.longitude)+'.png',
+ format='PNG')
+ to = etree.SubElement(imo, DB+'textobject')
+ ph = etree.SubElement(to, DB+'phrase')
+ ph.text = "geo:"+str(self.latitude)+","+str(self.longitude)
+ para = etree.SubElement(ln, DB+'para')
+ para.text = self.dms()
+ return uri
+
+class Address(object):
+ """Address object to contain everything known about an address"""
+ def __init__(self,address):
+ self._address_string = address
+ self._root = etree.Element(DB+'address',nsmap=NSMAP)
+ self._coord = None
+
+ def geocode(self,country=None):
+ params = { 'q': self._address_string,
+ 'addressdetails': 1,
+ 'limit': 1,
+ 'format': 'xml',
+ 'polygon': 0 }
+
+ if country:
+ params['countrycodes'] = country
+
+ base_url = 'http://nominatim.openstreetmap.org/search?%s'
+ url = base_url % urllib.urlencode(params)
+ resp, content = h.request(url)
+ root = etree.fromstring(content)
+ place = root.find("place")
+ if place is not None:
+ print (etree.tostring(root, pretty_print=True))
+ self._coord=Coord(place.get("lat"),place.get("lon"))
+ return 1
+ else:
+ print resp
+ print content
+ return 0
+
+ def db_xml(self):
+ return self._coord.db_xml()
+
+
+def distance(p1, p2):
+ res = Geodesic.WGS84.Inverse(p1[0], p1[1], p2[0], p2[1])
+ return res['s12']
+
+def mark(image, coord):
+ draw = ImageDraw.Draw(image)
+ x, y = coord
+ r = 5
+ bbox = (x-r, y-r, x+r, y+r)
+ draw.ellipse(bbox, outline="red")
+
+def mapimages(coords, zoom=15,size=(TS,TS)):