You can only export vector functions in KML.
function GetKMLFromFeatures(features) { var format = new OpenLayers.Format.KML({ 'maxDepth':10, 'extractStyles':true, 'internalProjection': map.baseLayer.projection, 'externalProjection': new OpenLayers.Projection("EPSG:4326") }); return format.write(features); }
UPDATE
To force the browser to load the KML string as a KML file, you need to send this string back to the server side so that it can be returned to the browser as a download file.
You did not specify which language / platform / etc you use on the server side. But this is what I did in C #.
I created a handler that takes a file name from the query string and KML from the textarea form.
KMLDownload.ashx:
<%@ WebHandler Language="C#" Class="KMLDownload" %> using System; using System.Web; public class KMLDownload : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpResponse response = context.Response; string kml = context.Request["kml"]; string filename = context.Request.QueryString["filename"]; if (String.IsNullOrEmpty(kml)) { context.Response.ContentType = "text/plain"; context.Response.Write("{\"error\":\"No files recevied\"}"); } else { if (String.IsNullOrEmpty(filename)){ filename = "Features_KML.kml"; }
Then, on my part of javascript, I just call this to start the download:
var filename = "NameofKMLfileI_WANT.kml"; var url = "secure/KMLDownload.ashx"; if (filename) { url += "?filename=" + filename; } var input = '<TEXTAREA name="kml">' + kml + '</TEXTAREA>';
capdragon
source share