如何将kml文件写入可公开访问的服务器

本文关键字:访问 服务器 kml 文件 | 更新日期: 2023-09-27 18:21:24

我想从我的asp.net MVC 3应用程序中在谷歌地图中呈现一个KML文件。

从谷歌地图JavaScript API V3,我使用KmlLayer('url')来渲染谷歌地图中的kml。我已经读到kml文件需要在一个可公开访问的服务器中。我可以使用第三方javascript在本地呈现kml文件,但它们可能容易出错。(使用谷歌地图加载本地.kml文件?)

我要渲染的kml文件以字节数组的形式存储在SQL server数据库中。因此,对于一个Kml文件,我必须将字节数组写入一个扩展名为Kml的路径中。我已经用File.WriteAllBytes(path,byte)完成了这项工作,其中path=本地路径,byte=数据库中的字节数组。这是在MVC应用程序的控制器中完成的。这是代码:

public ActionResult MapView(int id)
        {
          Incident inc = db.Incidents.Find(id);
            if (inc.IncidentDatas.Count != 0)
            {
                ViewBag.ListKmlUrls = kmlFileStore(inc);
            }
            return View(inc);
        }
public List<string> kmlFileStore(Incident inc)
        {
            List<string> listKmlUrls = new List<string>();
            // Specify a "currently active folder"
            string activeDir = @"c:'incident" + inc.incId + @"'incidentData";
            //Create a new subfolder under the current active folder
            string newPath = System.IO.Path.Combine(activeDir, "kmlFiles");
            // Create the subfolder
            System.IO.Directory.CreateDirectory(newPath);
            String url;
            foreach(var d in inc.IncidentDatas) {
                url = @"c:'incident" + inc.incId + @"'incidentData'kmlFiles'" + d.id + ".kml";
                 //dataContent is byte[]
                System.IO.File.WriteAllBytes(url, d.dataContent);
                listKmlUrls.Add(url);
            }
            return listKmlUrls;
        }

这个想法是视图将通过viewbag访问url列表,将url传递给javascript方法KmlLayer(…)。但这里的url只是本地路径。

那么,MVC应用程序如何将kml文件存储到可公开访问的服务器上,以便将url传递给KmlLayer(…)呢?这必须通过程序来完成。

我目前正在从本地主机访问我的MVC应用程序和数据库。我有一个静态Ip和名称。我还想发布应用程序和数据库以供在线访问。不知道如何进行,请给我一些建议/指导。谢谢

如何将kml文件写入可公开访问的服务器

使kml文件可公开访问存在一些问题。假设文件位置必须可以通过谷歌访问。

如果你想在网站中嵌入谷歌地球,那么有三种方法可以将KML导入到插件中。1.KmlNetworkLink2.提取Kml3.ParseKml

两者都是1&2需要存储在服务器中的kml文件,该文件必须是可公开访问的,但3。ParseKml的工作方式更好。

<head>
    <title>parsekml_example.html</title>
    <script src="//www.google.com/jsapi?key=ABQIAAAA5El50zA4PeDTEMlv-sXFfRSsTL4WIgxhMZ0ZK_kHjwHeQuOD4xTdBhxbkZWuzyYTVeclkwYHpb17ZQ"></script>
    <script type="text/javascript">
        var ge;
        var placemark;
        var object;
        google.load("earth", "1");
        function init() {
            google.earth.createInstance('map3d', initCB, failureCB);
        }
        function initCB(instance) {
            ge = instance;
            ge.getWindow().setVisibility(true);
            var kmlString = ''
                         + '<?xml version="1.0" encoding="UTF-8"?>'
                         + '<kml xmlns="http://www.opengis.net/kml/2.2">'
                         + '<Document>'
                         + '  <Camera>'
                         + '    <longitude>-122.444633</longitude>'
                         + '    <latitude>37.801899</latitude>'
                         + '    <altitude>139.629438</altitude>'
                         + '    <heading>-70.0</heading>'
                         + '    <tilt>75</tilt>'
                         + '  </Camera>'
                         + '  <Placemark>'
                         + '    <name>Placemark from KML string</name>'
                         + '    <Point>'
                         + '      <coordinates>-122.448425,37.802907,0</coordinates>'
                         + '    </Point>'
                         + '  </Placemark>'
                         + '</Document>'
                         + '</kml>';
            var kmlObject = ge.parseKml(kmlString);
            ge.getFeatures().appendChild(kmlObject);
            ge.getView().setAbstractView(kmlObject.getAbstractView());
        }
        function failureCB(errorCode) {
        }
        google.setOnLoadCallback(init);
    </script>  
</head>
<body>
    <div id="map3d" style="height: 400px; width: 600px;">
    </div>   
</body>

有关更多详细信息,请参阅http://code.google.com/apis/earth/documentation/kml.html