+
+ def db_xml(self):
+ img = encode(self.latitude, self.longitude)+'.png'
+ phr = "geo:"+str(self.latitude)+","+str(self.longitude)
+
+ db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
+ uri = db.uri(db.link(
+ db.inlinemediaobject(
+ db.imageobject(db.imagedata(
+ fileref=img,
+ format='PNG'))
+ db.textobject(db.phrase(phr))
+ ),
+ db.para(self.dms())
+ **{const.XLINK+"href": self.osmlink()}))
+ return uri
+
+
+class Address(object):
+ """Address object to contain everything known about an address"""
+ def __init__(self,address):
+ self._address_string = address
+ 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)):