Какая самая лучшая практика, чтобы показать несколько меток с фотографиями внутри баллонов? - PullRequest
3 голосов
/ 17 февраля 2012

У меня есть следующий проект: несколько фотографий сделаны с мобильного телефона, фотографии сохраняются в веб-системе, которая в свою очередь отображает фотографии на Google Планета Земля, которая находится внутри него.Я прочитал много статей, но все они использовали fetchKml, одна хорошая статья, которую я прочитал, была с использованием php, но с использованием fetchKml.Я не знаю, возможно ли использование parseKml вместо этого.В любом случае, я не уверен, как это сделать с помощью kml, поэтому это выглядит так:

Мой класс KMLGenerator ()

public static String getKMLFromObra (List<Obra> obraFotos) {
    StringBuffer sb = new StringBuffer();
    sb.append("<?xml version='1.0' encoding='UTF-8'?>");
    sb.append("<kml xmlns='http://www.opengis.net/kml/2.2' " + 
            "xmlns:gx='http://www.google.com/kml/ext/2.2' " + 
            "xmlns:kml='http://www.opengis.net/kml/2.2' " + 
            "xmlns:atom='http://www.w3.org/2005/Atom'> ");

    if (obraFotos != null && obraFotos.size() > 0) {
        for (Obra o : obraFotos) {
            for (Local local : o.getLocais()) {
                sb.append("<Document>");  
                sb.append("<name>" + local.getName() + "</name>");  

                sb.append("<Style id='defaultStyles'>");  
                sb.append("<IconStyle>");  
                sb.append("<scale>1.1</scale>");
                sb.append("<Icon>");  
                sb.append("<href>" + "http://localhost:8080/ConstruMobilFoto/lib/img/fotoIcon.png" + "</href>");  
                sb.append("</Icon>");  
                sb.append("</IconStyle>");  
                sb.append("</Style>");  

                sb.append("<Placemark>");  
                sb.append("<name>" + "Foto" + "</name>");  
                sb.append("<styleUrl>" + "#defaultStyles"+ "</styleUrl>");  
                sb.append("<altitudeMode>" + "relativeToGround" + "</altitudeMode>");  
                sb.append("<Point>");
                sb.append("<altitudeMode>relativeToGround</altitudeMode>");
                sb.append("<coordinates>" + local.getLongitude() + "," + local.getLatitude() + "," + 50</coordinates>");
                sb.append("</Point>");
                sb.append("<Link>");
                sb.append("<href>" + local.getFotos() + "</href>");
                sb.append("</Link>");

                sb.append("</Placemark>");  
                sb.append("</Document>");  
                sb.append("</kml>");  
                return sb.toString();
            }
        }
    }
    return null;
}

У меня есть функция dwr в моем jsp, котораявызывает этот метод, получает его результаты String и выполняет синтаксический анализ следующим образом:

Класс PainelEarth ()

@SuppressWarnings("static-access")
public String geraFotosObra (int idObra) throws Exception {
    try {
        List<Obra> obraFotos = obraBusiness.getObraLatLong(new Obra(idObra));
        return new KMLGenerator().getKMLFromObra(obraFotos);
    } catch (Exception e) {
        log.error(e.getLocalizedMessage(), e);
        return null;
    }
}

и на моей странице JSP

function initCB(instance) {
    // other codes

    showPics(ge);
}

function showPics(ge) {
    PainelEarthAjax.geraFotosObra({
        callback : function(kmlString) {
            var kmlObject = ge.parseKml(kmlString);
            ge.getFeatures().appendChild(kmlObject);
        }
    });
    return null;
}

Любая помощьбудет приветствоваться !!

1 Ответ

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

В вашем коде, если вы посмотрите на сигнатуру метода geraFotosObra, вы увидите, что он принимает один int параметр idObra.

public String geraFotosObra (int idObra) throws Exception { ...

Тем не менее, когда вы вызываете метод в вашем jsp, вы передаете литерал объекта, содержащий функцию обратного вызова.

PainelEarthAjax.geraFotosObra({
        callback : function(kmlString) { ...

Как я не вижу, как kmlгенерируется, разве возможно geraFotosObra перегруженный метод?Кроме того, даже если бы он был сгенерирован, как есть, я не вижу, как когда-либо вызывается функция обратного вызова, которую вы передаете вместо идентификатора - почему, например, kmlString будет результатом вызова geraFotosObra?

// How is this called, what sets kmlString!?
callback : function(kmlString) {
            var kmlObject = ge.parseKml(kmlString);
            ge.getFeatures().appendChild(kmlObject);
        }

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

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

Что-то вроде следующего имеет смысл.Замените функцию showPics на следующую.

function showPics(ge) {
  var kmlString = PainelEarthAjax.geraFotosObra(1); // or something?
  var kmlObject = ge.parseKml(kmlString);
  ge.getFeatures().appendChild(kmlObject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...