GWT: базовый рендеринг KML не работает

Я добавил geoxml3.js в свой проект GWT и добавил <script type="text/javascript" src="geoxml3.js"></script> в свой html-файл хоста.

В моем исходном файле Java у меня есть:

// KML utils
    public final native JavaScriptObject createKmlParser(JavaScriptObject mapId) /*-{
        var myParser = new $wnd.geoXML3.parser({
            map : mapId
        });
        return myParser;
    }-*/;

    public final native void showKml(JavaScriptObject parser, String kml) /*-{
        parser.parseKmlString(kml);
    }-*/;

    public final native void hideKml(JavaScriptObject parser) /*-{
        parser.hideDocument();
    }-*/;

    public void setupKmlLayer(final MapWidget mapWidget) {
        final JavaScriptObject jsoParser = createKmlParser(mapWidget.getJso());
        try {
            showKml(jsoParser, "cta.kml");
        } catch (final JavaScriptException jse) {

        }
    }

и он вызывается как:

setupKmlLayer(mapWidget);

KML-файл находится в том же пакете, что и этот java-файл.

Я получил файл KML с официальной страницы Google: http://gmaps-samples.googlecode.com/svn/trunk/ggeoxml/cta.kml

Любые советы, пожалуйста


person EMM    schedule 14.04.2015    source источник
comment
Я не могу помочь вам с kml, но было бы полезно, если бы вы могли описать, что на самом деле происходит. Есть ли собственный вызов на странице, можете ли вы отладить встроенную функцию, ... дополнительная информация будет полезна.   -  person thst    schedule 14.04.2015
comment
Не знаю, как отлаживать нативный код, но получаю исключение в showKml(jsoParser, cta.kml); выше. Я попытался поместить предупреждение в блок catch.   -  person EMM    schedule 14.04.2015
comment
Используете ли вы SuperDevMode и отладчик Chrome JS? В исходных картах должен быть класс, и вы должны найти настоящий нативный код, если вы не обфусцируете во время разработки.   -  person thst    schedule 14.04.2015
comment
ааа.. да, я могу отлаживать код.. Все выглядит нормально. Я думаю, что он не получает мой файл kml. Есть ли способ выяснить, что моя программа может выбрать локально помещенный файл kml?   -  person EMM    schedule 14.04.2015
comment
доступ должен быть виден в сетевой панели отладчика   -  person thst    schedule 14.04.2015
comment
Я не вижу этот файл kml на вкладке сетей.   -  person EMM    schedule 15.04.2015
comment
аргумент Я думаю, что знаю, см. мой ответ.   -  person thst    schedule 15.04.2015


Ответы (1)


ваш метод showKml() использует метод parseKmlString(). Это будет анализировать данный аргумент как KML. Но вы даете ему имя файла KML-файла.

Таким образом: не может произойти ничего, кроме ошибок синтаксического анализа.

Проверьте эту страницу документа, чтобы узнать, как передать URL-адрес:

https://code.google.com/p/geoxml/wiki/GeoXmlMethods

Я думаю (не зная этого) вы должны быть довольны реализацией showKml следующим образом:

public final native void showKml(JavaScriptObject parser, String kmlUrl) /*-{
    parser.urls = [kmlUrl];
    parser.parse();
}-*/;    
person thst    schedule 15.04.2015
comment
Я использую geoxml3.js, но согласно вашему ответу я изменил свой метод parseKmlString() на метод синтаксического анализа, который похож на var parse = function (urls) { // Обработать один или несколько документов KML if (typeof urls === ' string') { // URL одного документа KML = [urls]; }.... Теперь я получаю Невозможно получить ‹myKml›, который является записью журнала в geoxml3.js. Я совершенно уверен, что это просто вопрос размещения kml в нужном месте в проекте, и, надеюсь, это сработает. . - person EMM; 15.04.2015
comment
Я пытался поместить его в несколько мест, включая пакет, в котором находится мой исходный файл Java. Теперь я переместил его в папку src/main/resources и получил к нему доступ с помощью /resources/cta.kml Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден) Ошибка HTTP 404 при получении /resources/cta.kml Невозможно чтобы получить /resources/cta.kml(журнал geoxml.js) - person EMM; 15.04.2015
comment
какой URL-адрес отвечает файлом, если вы вызываете его вручную (поле адреса браузера) - person thst; 15.04.2015
comment
Не могли бы вы взглянуть здесь: code.google.com/p/ geoxml3/wiki/ Если я заставлю это работать, мне даже не нужно будет хранить файл KML на моем компьютере... только текст KML... Однако URL-адрес не изменится. - person EMM; 15.04.2015
comment
Мне удалось поставить метку на карту, используя содержимое файла kml напрямую: showKml(jsoParser, ‹?xml version=\1.0\ encoding=\utf-8\?›‹kml xmlns=\opengis.net/kml/2.2\›‹Метка›‹имя›Мой офис‹/имя›‹описание›Это расположение моего офиса.‹/описание›‹Точка›‹координаты›21.0000,78.0000‹/координаты›‹/точка›‹/метка›‹/кмл›); - person EMM; 15.04.2015
comment
Да, как я уже сказал: вы вызываете метод разбора строки. Если у вас есть статический файл kml, этого может быть достаточно. В противном случае: вы проверили, где в вашем веб-приложении на самом деле находится файл cta.kml? Если он развернут, он должен иметь правильный URL-адрес. И этот URL должен работать на синтаксическом анализаторе kml, - person thst; 16.04.2015