UserPreferences

GoogleMapUrlToKmlPy


  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 

import win32clipboard
import cgi, gmapUtil, string, os

#takes a list of [lat,long] and returns a keyhole file
def kmlFromLatLong(maptitle,latlongs):

    import gmapUtil
    from xml.dom.minidom import Document, parseString
    import cgi

    docString = """<Document><name>%s</name><visibility>1</visibility><Folder><name>Destination</name><visibility>1</visibility></Folder></Document>""" % (cgi.escape(maptitle))
    doc = parseString(docString)
    documentNode = doc.documentElement

    folderNode = documentNode.getElementsByTagName('Folder')[0]

    for latlong in latlongs:
        latitude = unicode(latlong[0])
        longitude = unicode(latlong[1])

        description = cgi.escape("%s,%s" % (latitude,longitude))
        name = description

        range = 600.0  # set to 600 m for now
        tilt = 0
        heading = 0
        visibility = 1
        #styleUrl = "root://styleMaps#default?iconId=0x304"
        styleUrl = "root://styleMaps#default?iconId=0x307"
        coordinates = "%s, %s, %s" % (longitude, latitude, "65")

        viewString = """<View><longitude>%s</longitude><latitude>%s</latitude><range>%s</range><tilt>%s</tilt><heading>%s</heading></View>""" % (longitude, latitude, unicode(range), unicode(tilt), unicode(heading))
        restString = """<visibility>%s</visibility><styleUrl>%s</styleUrl><Point><coordinates>%s</coordinates></Point>""" % (visibility,styleUrl,coordinates)



        PlacemarkNodeString = """<Placemark><description>%s</description><name>%s</name>%s%s</Placemark>""" % (description, name,viewString,restString)
        print PlacemarkNodeString
        pDoc = parseString(PlacemarkNodeString)

        folderNode.appendChild(pDoc.documentElement)


    return doc.toxml(encoding='utf-8')


win32clipboard.OpenClipboard()
gURL = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()



# of form http://maps.google.com/maps?q=berkeley,+ca&ll=37.882751,-122.302134&spn=0.020416,0.039312&hl=en

#try:
ll = cgi.parse_qs(gURL)['ll'][0]
latlongs = [string.split(ll,",")]

# print out in some nice form for flickr geotagging
latitude = unicode(latlongs[0][0])
longitude = unicode(latlongs[0][1])

geocodeTags = "geotagged geo:lat=%s geo:long=%s geo:lon=%s" % (latitude,longitude,longitude)
# put on clipboard
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(geocodeTags)
win32clipboard.CloseClipboard()

kml = kmlFromLatLong('destination TITLE', latlongs)

# now invoke keyhole

dir = r'C:\Documents and Settings\Administrator\Application Data\Google\GoogleEarth'
destinationKmlFile = dir + "\destination.kml"
f = open(destinationKmlFile,"w")
f.write(kml)
f.close()

keyholeApp = r'C:\PROGRA~1\GOOGLE\GOOGLE~1\GOOGLE~1.EXE'
cmd = '%s "%s"' % (keyholeApp,destinationKmlFile)
print cmd

os.system(cmd)