gpt4 book ai didi

java - 在气球内显示带有照片的多个地标的最佳做法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:18 24 4
gpt4 key购买 nike

我有一个项目是这样的:从手机上拍几张照片,照片保存在网络系统中,然后在里面的谷歌地球上显示照片。我读过很多文章,但所有文章都在使用 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;
}

我的 jsp 中有一个 dwr 函数调用这个方法,得到它的字符串结果并像这样进行解析:

类 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;
}

欢迎任何帮助!!

最佳答案

在您的代码中,如果您查看方法 geraFotosObra 的签名,您会发现它采用单个 int 参数 idObra

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

然而,当您在 jsp 中调用该方法时,您传递的是一个包含回调函数的对象文字。

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

事实上,我看不到 kml 是如何生成的,除非 geraFotosObra 可能是一个重载方法?同样,即使它是按原样生成的,我也看不到您传递的回调函数代替 id 是如何被调用的——为什么例如 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);
}

关于java - 在气球内显示带有照片的多个地标的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9329945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com