Skip to content

Instantly share code, notes, and snippets.

@pwlin
Created April 18, 2010 11:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pwlin/370190 to your computer and use it in GitHub Desktop.
Save pwlin/370190 to your computer and use it in GitHub Desktop.
// Mozilla export coordinates to a .kml file (for Google Earth)
var $google = {
_exampleLocation : {
'name':'Tokyo',
'latitude':35.65444,
'longitude':139.74472
// Other data:
//'heading' : 0 ,
//'tilt' : 0 ,
//'range': 1000000
},
_CC : Components.classes,
_CI : Components.interfaces,
_getDOMImpl : function(){
if (this._domImpl == null){
this._domImpl = this._CC["@mozilla.org/xmlextras/domparser;1"].createInstance(this._CI.nsIDOMParser).parseFromString("<foo/>", "text/xml").implementation;
}
return this._domImpl;
},
_stringToTmpFile: function(dataString, charset, tmpFileName) {
var unicodeConverter = this._CC["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(this._CI.nsIScriptableUnicodeConverter);
unicodeConverter.charset = charset;
var convertedString = unicodeConverter.ConvertFromUnicode(dataString);
var tmpFile = this._CC["@mozilla.org/file/directory_service;1"].getService(this._CI.nsIProperties).get("TmpD", this._CI.nsILocalFile);
tmpFile.append(tmpFileName);
tmpFile.createUnique(this._CI.nsIFile.NORMAL_FILE_TYPE, 0664);
var outStream = this._CC["@mozilla.org/network/file-output-stream;1"].createInstance(this._CI.nsIFileOutputStream);
outStream.init(tmpFile, 0x02 | 0x08 | 0x20, 0664, 0);
outStream.write(convertedString, convertedString.length);
var finalData = unicodeConverter.Finish();
if (finalData.length > 0) {
outStream.write(finalData, finalData.length);
}
outStream.close();
return tmpFile ;
},
openKMLFile : function(location,fileName) {
if (!location || location == '') { location = this._exampleLocation ; }
var doc = this._getDOMImpl().createDocument("http://earth.google.com/kml/2.0", "kml", null);
var kmlDocument = doc.createElement("Document");
doc.documentElement.appendChild(kmlDocument);
var kmlPlacemark = doc.createElement("Placemark")
kmlDocument.appendChild(kmlPlacemark);
var kmlName = doc.createElement("name");
kmlPlacemark.appendChild(kmlName);
var kmlPoint = doc.createElement("Point");
kmlPlacemark.appendChild(kmlPoint);
var kmlAltitudeMode = doc.createElement("altitudeMode");
kmlPoint.appendChild(kmlAltitudeMode);
var kmlCoordinates = doc.createElement("coordinates");
kmlPoint.appendChild(kmlCoordinates);
var kmlLookAt = doc.createElement("LookAt");
kmlPlacemark.appendChild(kmlLookAt);
var kmlHeading = doc.createElement("heading");
kmlLookAt.appendChild(kmlHeading);
var kmlTilt = doc.createElement("tilt");
kmlLookAt.appendChild(kmlTilt);
var kmlRange = doc.createElement("range");
kmlLookAt.appendChild(kmlRange);
var kmlLatitude = doc.createElement("latitude");
kmlLookAt.appendChild(kmlLatitude);
var kmlLongitude = doc.createElement("longitude");
kmlLookAt.appendChild(kmlLongitude);
kmlName.appendChild(doc.createTextNode(location.name));
kmlAltitudeMode.appendChild(doc.createTextNode("relativeToGround"));
kmlCoordinates.appendChild(doc.createTextNode(location.longitude + "," + location.latitude + ",0"));
kmlHeading.appendChild(doc.createTextNode(location.heading ? location.heading : '0'));
kmlTilt.appendChild(doc.createTextNode(location.tilt ? location.tilt : '0'));
kmlRange.appendChild(doc.createTextNode(location.range ? location.range : '1000000'));
kmlLatitude.appendChild(doc.createTextNode(location.latitude));
kmlLongitude.appendChild(doc.createTextNode(location.longitude));
var serializer = this._CC["@mozilla.org/xmlextras/xmlserializer;1"].createInstance(this._CI.nsIDOMSerializer);
var kmlString = '<?xml version="1.0" encoding="UTF-8"?>' + serializer.serializeToString(doc);
var kmlFile = this._stringToTmpFile(kmlString, "UTF-8", fileName);
kmlFile.launch();
}
}
Usage:
// define a location hash:
var location = {
'name':'Tokyo',
'latitude':35.65444,
'longitude':139.74472
// Other data:
//'heading' : 0 ,
//'tilt' : 0 ,
//'range': 1000000
}
// choose a name for your .kml file:
var myFileName = 'my_geo.kml';
// now use them to force opening a .kml file:
$google.openKMLFile(location,myFileName);
Will output:
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Document>
<Placemark>
<name>Tokyo</name>
<Point>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>139.74472,35.65444,0</coordinates>
</Point>
<LookAt>
<heading>0</heading>
<tilt>0</tilt>
<range>1000000</range>
<latitude>35.65444</latitude>
<longitude>139.74472</longitude>
</LookAt>
</Placemark>
</Document>
</kml>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment