Как записать файл kml на общедоступный сервер? - PullRequest
0 голосов
/ 24 января 2012

Я хочу отобразить файл KML в картах Google из моего приложения asp.net MVC 3.

В API Карт Google JavaScript V3 я использую KmlLayer ('url') для визуализации kml вКарты Гугл.Я прочитал, что файл kml должен находиться на общедоступном сервере.Я мог бы визуализировать файл kml локально с использованием сторонних javascripts, но они могут быть подвержены ошибкам( Загрузка локального файла .kml с помощью карт Google? )

Файлы kml, которые я хочу отобразить, хранятся в базе данных сервера SQL в виде байтовых массивов.Поэтому для одного файла Kml я должен записать массив байтов в путь с расширением kml.Я сделал это с File.WriteAllBytes (путь, байт), где путь = локальный путь и байт = байтовый массив из базы данных.Это делается в приложении Controller of 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;
        }

Идея заключается в том, что представление будет обращаться к списку URL-адресов через viewbag для передачи URL-адресов методу javascript KmlLayer (...).Но здесь URL-адреса являются только локальными путями.

Итак, как приложение MVC может сохранить файл kml на общедоступном сервере, чтобы оно могло передать URL-адрес в KmlLayer (...)?Это должно быть сделано программно.

В настоящее время я обращаюсь к своему приложению MVC и базе данных с localhost.У меня есть статический Ip и имя.Я также хотел бы опубликовать приложение и базу данных для онлайн-доступа.Не знаете, как поступить, пожалуйста, дайте мне несколько советов.Спасибо.

1 Ответ

0 голосов
/ 24 января 2012

Есть проблема с тем, чтобы сделать файл kml общедоступным.Скажем, местоположение файла должно быть доступно для Google.

Если вы хотите встроить Google Планета Земля в веб-сайт, есть три способа импорта KML в плагин.1. KmlNetworkLink 2. fetchKml 3. 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

...