Загрузка KmlLayers в Google Maps - это хит или промах? - PullRequest
3 голосов
/ 11 февраля 2012

Я использую API Карт Google Javascript v3 для загрузки некоторых файлов KML на карту. Тем не менее, я получаю различные значения TIMED_OUT, FETCH_ERROR и OK для определенных слоев. Я взял URL для каждого и поместил его в maps.google.com, где слои всегда загружаются очень хорошо. У кого-нибудь еще были проблемы с несогласованной загрузкой слоев? Более того, можно ли что-нибудь сделать, чтобы Карты Google постоянно загружали слои при запросе?

Я включил код, который я использую для загрузки слоя, хотя я вполне уверен, что он не виноват, потому что слои действительно загружаются иногда.

    function addMapLayer(url) {
        console.log('Attempting to add layer at: ' + url);
        var layer = new google.maps.KmlLayer(url, {
            preserveViewport: true,
            map: maps.BirdMap.map
        });

        google.maps.event.addListener(layer, 'status_changed', function () {
            console.log('KML load: ' + layer.getStatus());
            if (layer.getStatus() != 'OK') {
                $('#maps-error').text('[' + layer.getStatus() + '] Google Maps could not load the layer. Please try again later.');
                $('#maps-error').dialog('open');
            } else {
                layers.push(layer);
            }
        });
    }

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Загрузка KmlLayers зависит от нескольких вещей, которые не поддаются контролю, например, сеть между сервером, на котором размещен файл KML (позвольте мне предположить, что это ваш сервер ), и сервером Google, который должензагрузить.Чем медленнее эта сеть (или ваш сервер), тем легче сервер Google не может получить файл.Я уверен, что сервер Google не будет слишком долго ждать вашего файла, поэтому, если сеть или ваш сервер работают медленно, он, вероятно, сдастся и выдаст одну из этих ошибок.И я не думаю, что существует какой-либо механизм повторных попыток, поскольку я видел, как это происходило несколько раз (с большими файлами на медленных серверах), и единственный способ повторить попытку - это перезагрузить страницу, чтобы JavaScriptAPI снова запрашивает слой.

См. этот ответ , чтобы узнать о некоторых вещах.

0 голосов
/ 31 мая 2013

У меня были похожие проблемы.

  1. вам нужно использовать график
  2. вам нужно использовать memcache
  3. Запланированное задание загрузит все файлы kml и сохранит их в кэше
  4. используйте js для запуска файла jqery load kml для отображения
  5. имеет массив для файлов kml в документе js.

    var kmlLayerArray = [];
    

    var kmlLayerRegions = [0,0,0,0,0,0,0,0,0,0,0,0,0,]; // Удерживаем слои

  6. kmlLayer = new google.maps.KmlLayer (url);

            kmlLayer.setValues({
                suppressInfoWindows : true
            });
    
            kmlLayer.setValues({
                preserveViewport : bool
            });
            kmlLayer.setMap(map);
    
            kmlLayerArray.push(kmlLayer);
            kmlLayerRegions[region] = kmlLayer;
    
            addKmlEventListener(map,kmlLayer); //extra stuff
    

функция addKmlEventListener (map, kmlLayer) { google.maps.event.addListener (kmlLayer, 'click', function (kmlEvent) {

    $.ajax({
        url : 'http://' + top.location.host + '/mcmap/feed/kml.php?action=kmlclick',
        data : "id=" + surveyid,
        dataType : 'json',
        success : function(data) {

            // do whatever
        },
        error : function(jqXHR, textStatus,
                errorThrown) { }
    });

});

}

покормить

if (!$contents = $cache->load("kml_survey_id_" . $surveyId)) {
            $log->debug("not cached");

            $kml = $mapper->getSurveyKML($seismicLibrary->getSurvey($surveyId), "#FFFFFF"); // format kml file here
            $zip = new ZipArchive();
            $filename = "/tmp/" . time() . rand() . ".zip";
            $res = $zip->open($filename, ZipArchive::CREATE);
            if ($res === TRUE) {

                $zip->addFromString("doc.kml", $kml);
                $zip->close();
            }

            $file = fopen($filename, "rb");
            $contents = fread($file, filesize($filename));
            fclose($file);

            unlink($filename);
            //$log->debug($kml);
            $cache->save($contents, "kml_survey_id_" . $surveyId);
        }

        header('Content-type: application/vnd.google-earth.kml+xml');
        //header('Content-type: application/vnd.google-earth.kmz');

        echo $contents;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...