2012-02-20 7 views
7

क्या ओपनलेयर से केएमएल लिखना और सहेजना संभव है? किसी को निर्यात करने का एक उदाहरण पता है?ओपनलेयर आपके मानचित्र पर आधारित केएमएल लिखते हैं और सहेजते हैं

+2

यहाँ एक समान समाधान है: मदद कर सकता है? http://gis.stackexchange.com/questions/17031/openlayers-format-kml-write-style – user1040259

उत्तर

9

आप के एम एल के लिए एक ही वेक्टर सुविधाओं निर्यात कर सकते हैं।

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); 
} 

अद्यतन

आदेश के एम एल स्ट्रिंग डाउनलोड करने के लिए एक KML फ़ाइल के रूप में आपको लगता है कि स्ट्रिंग सर्वर साइड करने के लिए वापस भेजने की जरूरत है तो यह ब्राउज़र के लिए वापस किया जा सकता ब्राउज़र के लिए मजबूर करने में डाउनलोड करने के लिए एक फ़ाइल के रूप में।

आपने यह निर्दिष्ट नहीं किया है कि आप सर्वर-साइड पर किस भाषा/प्लेटफॉर्म/आदि का उपयोग कर रहे हैं, लेकिन मैंने सी # में किया है।

मैंने एक हैंडलर बनाया जो क्वेरीस्ट्रिंग से फ़ाइल नाम और केएमएल को टेक्स्टरेरा फॉर्म से लेता है।

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"; 
      } 

      // force a download of the kml file. 
      response.Clear(); 
      response.ContentType = "application/kml"; 
      response.AddHeader("Content-Disposition", "attachment; filename=" + filename); 
      response.AddHeader("content-legth", kml.Length.ToString()); 
      response.Write(kml.ToString()); 
      response.End(); 
     } 

    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

} 

तब मेरे जावास्क्रिप्ट तरफ से मैं बस इस डाउनलोड आरंभ करने के लिए कॉल: आप Openlayers 3 या 4 उपयोग कर रहे हैं

var filename = "NameofKMLfileI_WANT.kml"; 

var url = "secure/KMLDownload.ashx"; 
if (filename) { 
    url += "?filename=" + filename; 
} 

var input = '<TEXTAREA name="kml">' + kml + '</TEXTAREA>'; 

//send request 
jQuery('<form action="' + url + '" method="post">' + input + '</form>').appendTo('body').submit().remove(); 
+0

अच्छा। आप केएमएल को संभावित रूप से लिख या सहेज सकते हैं? – user1040259

+0

विशिष्ट बनें। क्या आप डेटाबेस में सहेजना चाहते हैं, फ़ाइल में लिखना चाहते हैं, या उपरोक्त फ़ंक्शन रिटर्न के केएमएल स्ट्रिंग से केएमएल फ़ाइल डाउनलोड करने के लिए ब्राउज़र को मजबूर करना चाहते हैं? – capdragon

+0

आपकी मदद के लिए धन्यवाद। केएमएल के डाउनलोड को शुरू करने के लिए ब्राउज़र को मजबूर करें। – user1040259

3

यहाँ बचाने के लिए कुछ JQuery कार्रवाई है:

$('#saveKML').click(function() { 
var kmlFormat = new OpenLayers.Format.KML(); 
var newWindow = window.open('', 
    'KML Export ' + (new Date()).getTime(), "width=300,height=300"); 
    newWindow.document.write('<textarea id="kml" style="width: 100%; height: 100%">' + 
    kmlFormat.write(features) + '</textarea>'); 
}); 
0

, तो आप पाएंगे कि पिछले (2012) उत्तरों का वाक्यविन्यास अब काम नहीं करता है।

यह करता है:

 function GetKMLFromFeatures(features) { 
      var format = new ol.format.KML(); 
      var kml = format.writeFeatures(features, {featureProjection: 'EPSG:3857'}); 
      return kml; 
     } 
     function GetGeoJSONFromFeatures(features) { 
      var format = new ol.format.GeoJSON(); 
      var geoJSON = format.writeFeatures(features, {featureProjection: 'EPSG:3857'}); 
      return geoJSON; 
     } 
     function GetFeaturesFromLayer(layer) { 
      var source = layer.getSource(); 
      var features = source.getFeatures(); 
      return features; 
     } 
संबंधित मुद्दे