# -*- coding: UTF-8 -*-

u"""
CSV to KML converter
Copyright (c) 2011 Jan Pöschko
poeschko.com
"""

from geopy import geocoders
import csv

def main():
	geocoder = geocoders.Google()
	data = csv.reader(open('data.csv', 'r'), delimiter='\t', quotechar='"')
	kml = []
	print "Geocoding places"
	for line in data:
		place, place_extra, sub_region, region, country, color = [value.decode('utf-8') for value in line]
		if not color:
			color = 'blue'
		query = place
		if sub_region: query += u", " + sub_region
		if region: query += u", " + region
		if country: query += u", " + country
		try:
			name, (lat, lng) = geocoder.geocode(query.encode('utf-8'), exactly_one=True)
			kml.append((u"<Placemark><name>%s/%s</name>" + \
				u"<Style><IconStyle><Icon><href>http://www.google.com/intl/en_us/mapfiles/ms/icons/%s-dot.png</href></Icon></IconStyle></Style>" + \
				u"<Point><coordinates>%s,%s</coordinates></Point></Placemark>") % \
				(place, place_extra, color, lng, lat))
		except ValueError:
			print u"Place not found: %s/%s" % (place, place_extra)
	print "Writing data.kml"
	kml = u"\n".join(kml)
	kml = u"""<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Exported KML data</name>
%s
</Document>
</kml>
""" % kml
	out = open('data.kml', 'w')
	out.write(kml.encode('utf-8'))
	out.close()
	print "Done"

if __name__ == '__main__':
	main()
