Java 什么';我的代码解析kml到Google Earth有什么问题?
在无法将kml解析为我的GE时,我的代码有什么问题 我在这方面已经坚持了两周,并且尝试了很多其他的方法 欢迎任何帮助 拉斐尔·耶稣 google_earth.jspJava 什么';我的代码解析kml到Google Earth有什么问题?,java,javascript,kml,google-earth-plugin,Java,Javascript,Kml,Google Earth Plugin,在无法将kml解析为我的GE时,我的代码有什么问题 我在这方面已经坚持了两周,并且尝试了很多其他的方法 欢迎任何帮助 拉斐尔·耶稣 google_earth.jsp var ge; google.load("earth", "1"); function init() { google.earth.createInstance('map3d', initCB, failureCB); window.scroll(0, 10000); } functio
var ge;
google.load("earth", "1");
function init() {
google.earth.createInstance('map3d', initCB, failureCB);
window.scroll(0, 10000);
}
function initCB(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
// add a navigation control
ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
// add some layers
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
// directs the exact location of the placemark
var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
lookAt.setLatitude(-15.26108113514467);
lookAt.setLongitude(-57.77290131815782);
lookAt.setRange(8007066.726300671);
ge.getView().setAbstractView(lookAt);
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);
var kmlString = showPics();
// I put a alert in here and show in a window the value "undefined"
var kmlObject = ge.parseKml( kmlString );
ge.getFeatures().appendChild(kmlObject);
}
geraFotosObra.java
public String geraFotosObra () throws Exception {
try {
return new KMLGenerator().getKMLFromObra();
} catch (Exception e) {
log.error(e.getLocalizedMessage(), e);
return null;
}
}
KMLGenerator.java
public static String getKMLFromObra () {
StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
sb.append("<kml xmlns='http://www.opengis.net/kml/2.2' ");
sb.append("<Document>");
sb.append("<name>ConstruMobil</name>");
sb.append("<Style id='defaultStyles'>");
sb.append("<IconStyle>");
sb.append("<Icon>");
sb.append("<href>" + "http://maps.google.com/mapfiles/kml/pal4/icon38.png" + "</href>");
sb.append("</Icon>");
sb.append("</IconStyle>");
sb.append("</Style>");
sb.append("</Style>");
sb.append("<Placemark>");
sb.append("<name>" + "Some name" + "</name>");
sb.append("<styleUrl>" + "#defaultStyles"+ "</styleUrl>");
sb.append("<altitudeMode>" + "relativeToGround" + "</altitudeMode>");
sb.append("<Location>");
sb.append("<longitude>" + -122.3599987260313 + "</longitude>");
sb.append("<latitude>" + 47.62949781133496 + "</latitude>");
sb.append("<altitude>"+ 15.49615401024533 + "</altitude>");
sb.append("</Location>");
sb.append("<Link>");
sb.append("<href>" + "http://localhost:8080/myCompany/lib/img/dubai.jpg" + "</href>");
sb.append("</Link>");
sb.append("</Model>");
sb.append("</Placemark>");
sb.append("</Document>");
sb.append("</kml>");
return sb.toString();
}
public静态字符串getKMLFromObra(){
StringBuffer sb=新的StringBuffer();
某人加上(“”);
sb.append(“showPics()
不会返回结果。您可以在回调函数中返回结果。请尝试以下操作:
function showPics(ge) {
PainelEarthAjax.geraFotosObra({
callback : function(kmlString) {
var kmlObject = ge.parseKml(kmlString);
ge.getFeatures().appendChild(kmlObject);
}
});
}
然后像这样调用它:
ge.getView().setAbstractView(lookAt);
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);
showPics(ge);
getKMLFromObra()
函数未返回有效的XML:
开口标记中缺少闭合括号
:
sb.append("<kml xmlns='http://www.opengis.net/kml/2.2' ");
sb.append(您有一个额外的
关闭标记和一个浮动的
关闭标记,没有实际的模型
元素
您可以使用XML验证器检查输出,类似于,甚至只是使用TextMate中的XML包。我收到消息“kml未定义!”
我认为这是jsp上的解析问题,我更改了getKMLFromObra()只是为了测试,我插入了以下代码:
PS:我在kml interactive上测试了这个kml,它在那里工作
getKMLFromObra()
你的错误是什么?你能缩小它的范围吗?将方法的kml输出粘贴到一个文本文件中,很好地识别它,你就会看到它被搞错了。我看到的第一个明显的错误是你有一个没有相应starttagman tks的/Model(endtag)。首先,我得到消息“kml未定义”,我减少我的kml只是为了测试,我得到了这个消息,我已经在kml interactive中测试了我在我的应用程序中得到的相同kml,并且它在那里工作了Hi Pointy,你可以在这一点上提出一些建议吗?[链接]感谢响应的家伙,我已经解决了“>”问题,现在我得到了消息“kml未定义”,我已经测试过了[在这里输入链接描述][1][1]:它工作得很好,在测试中显示了我的照片,我快到了,还有什么?Tks a lotHi epoch,你可以在这一点上提出一些建议吗?[链接]我已经修复了它,Mano,现在消息是“kml未定义!”,但是我的kml还可以,因为我已经在kml interective上测试过了,欢迎任何帮助..TKSI你是根据OGC kml模式验证它的吗?我不明白,验证模式是什么意思?我只知道验证Shema是当你使用Web服务时,我该怎么做,我很抱歉缺乏知识!所以,XML模式描述了它描述了什么元素可以在文档中,以什么顺序,使用什么名称空间。如果您使用的是Oxygen,这里有更多的信息:该消息告诉我,无论您试图使用什么,都是说kml没有定义,因为您没有指定模式来定义它。删除每个分号,添加http://be对于每个名称空间,如xmlns=''。您应该了解更多关于XML的信息,请尝试搜索XML教程。
sb.append("<kml xmlns='http://www.opengis.net/kml/2.2' ");
sb.append("<kml xmlns='http://www.opengis.net/kml/2.2'>");
StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
sb.append("<kml xmlns='http://www.opengis.net/kml/2.2' >");
sb.append("<Placemark>");
sb.append("<name>Simple placemark</name>");
sb.append("<description>testing fucking kml</description>");
sb.append("<Point>");
sb.append("<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>");
sb.append("</Point>");
sb.append("</Placemark>");
sb.append("</kml>");
return sb.toString();
var ge;
google.load("earth", "1");
function init() {
google.earth.createInstance('map3d', initCB, failureCB);
window.scroll(0, 10000);
}
function initCB(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
// add a navigation control
ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
// add some layers
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);
showPics(ge);
}
function showPics(ge) {
PainelEarthAjax.geraFotosObra({
callback : function(kmlString) {
var kmlObject = ge.parseKml(kmlString);
ge.getFeatures().appendChild(kmlObject);
}
});
return null;
}
function failureCB(errorCode) {
}
google.setOnLoadCallback(init);