dinsdag 20 april 2010

Week 9 (12/04 - 19/04)

Google Maps. Om een overzicht van de datacenters te creeren werd google maps aangehaald. Op zich heel simpel te implementeren via javascript.

Probleem: De locatie van het adres dat ik wou weergeven kwam uit mijn database die via python code & Django naar men html wordt geschreven. Na een beetje googlen kwam ik deze website tegen die een degelijke uitleg gaf en me kon voorzien van de klasse PyMaps (Google Maps voor Python)

Dit gaf een goed resultaat en de locatie uit men database werd goed weergegeven:










Nu wou ik niet alleen het datacenter weergeven dat geselecteerd werd, maar ook een google map die mij een overzicht gaf van alle datacenters in Belgiƫ. Door naar de website maps.google.com te gaan kan je inloggen en meerdere locaties naar je map 'saven' en deze map dan gebruiken in je website.

Probleem: Wat als je locaties weer opgeslagen zitten in een database die via Django/Python met je website communiceert. Je kan deze locaties manueel invoegen via de site en dan die map in je website gebruiken, maar wat dan als iemand via het admin-panel een nieuwe locatie toevoegd?

Oplossing: XML! Google maps werkt met xml en kan locaties uit een xmlbestand halen (in deze xml moet dan wel 'latitude', 'longitude' 'naam', 'adres', enz aanwezig zijn voor elke locatie.

De klasse PyMaps bevat een functie die van het opgegeven adres de coordinaten berekent en deze dan teruggeeft. Door dus een combinatie te integreren van PyMaps & Xml kwam ik tot het volgende resultaat:










De klasse om de locaties op te slaan in het xmlbestand en deze te gebruiken in google maps ziet er zo uit:

from PyMaps import Icon, Map, PyMap
from xml.etree import ElementTree as ET


def savelocations(name, street, postalcode, city, country):
xml_file = os.path.abspath(__file__)
xml_file = os.path.dirname(xml_file)
xml_file = os.path.join(xml_file, MEDIA_ROOT + "media/files/Landmarks.xml")

add = "%s, %s, %s, %s" % (street, postalcode, city, country)
geo_data = get_geo(add)

lat = str(geo_data[1])
long = str(geo_data[0])

tree = ET.parse(xml_file)
child1 = ET.SubElement(tree.getroot(), "Row")
child2 = ET.SubElement(child1, "Longitude")
child2.text = long
child3 = ET.SubElement(child1, "Latitude")
child3.text = lat
child4 = ET.SubElement(child1, "Building_Name")
child4.text = name
child5 = ET.SubElement(child1, "Address")
child5.text = address
tree.write(xml_file)

Geen opmerkingen:

Een reactie posten