Não consigo parsear KML na jsp?

Pessoal,

Não consigo fazer o parse de um arquivo kml, o que esta de errado no meu código?

Já tentei várias outras coisas e nada

QQ sugestão será bemvinda,

Abrcs,

google_earth.jsp

[code]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);

}
// dwr function that brings the kml with his values
// for now it is in hard coded, just for tests!!
function showPics() {
PainelEarthAjax.geraFotosObra({
callback : function(kmlString) {
// I put a alert function in here, and it has openned a window
// with the entire kmlString brought from the java method geraFotosObra().
return kmlString;
}
});
}

function failureCB(errorCode) {

}  
google.setOnLoadCallback(init);

[/code]

geraFotosObra.java

public String geraFotosObra () throws Exception { try { return new KMLGenerator().getKMLFromObra(); } catch (Exception e) { log.error(e.getLocalizedMessage(), e); return null; } }

KMLGenerator.java

[code]public static String getKMLFromObra (/List obraFotos/) {
StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='UTF-8'?>");
sb.append(" “);
// Placemark
sb.append(”");
sb.append(“ConstruMobil”);

	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();
}[/code]

Iae galerinha, nadinha?

Eu fui no fórum do Google e eles mandaram pro Stack Overflow,

Alguém ai já passou por isso ou pode dar um help?

Obrigado!!!

o que está acontecendo?
não carrega, da erro?

O Earth aparece com o LookAt que tenho definida na jsp, mas a photo no lugar que tenho definido no kml nem tchum,

Quando eu dou um alert dentro da funtion showPics() ele mostra o kml, mas quando eu dou um alert aqui ele mostra null

var kmlString = showPics();

Ou seja, é algum erro de parse ou algo, mas está de acordo com vários tutos que eu peguei no google earth api segue links:

http://code.google.com/apis/ajax/playground/?exp=earth#entering_a_photo_overlay

Obrigado!

Outra coisa aqui http://kml-samples.googlecode.com/svn/trunk/interactive/index.html eu posso testar meu kml e ele vai até a foto que esta em meu projeto…

Alguma dica?

Tks

vc consegue chegar no java com essa chamada no javascript? PainelEarthAjax.geraFotosObra…
se consegue chegar eh provável que o retorno no javascript não astá chegando, já que chega null
a variavel kmlString não está como global, de repente pode ser isso…

aproveitando, talvez vc saiba, eu tenho gx:balloonVisibility1</gx:balloonVisibility> no kml,
vc sabe como setar no javascript?

Cara desculpe a demora,

Então eu perguntei para o fórum do Google e me mandaram pro StackOverflow,

O erro era o param ge que deveria ser passado para a function, como segue abaixo:

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

E era só chama-lo no initCB(instance):

exibeFotos(ge)

Mas agora o prolema é “kml is undefined!”, eu deixei meu kml bem básico e testei aqui http://kml-samples.googlecode.com/svn/trunk/interactive/index.html#./Point_Placemarks/Point_Placemarks.Simple.kml o mesmo kml que tenho na aplicação rodou certinho ai…Não sei mais o que fazer cara, já estou a dias e não saio disso…

Cara olha esse link aqui pra ver se da uma clareda pra ti http://code.google.com/apis/ajax/playground/#javascript_in_balloons

já tinha encontrado de manhã, mas brigadão pela ajuda de qq forma.
nessa parte do seu código:
var kmlString = showPics();
um alert do kmlString mostra o kml?
se mostra eu te passo um de exemplo que funciona. Quando eu começei nisso tmb teve um pouco de dificuldade nessa parte…

Cara eu diminui só para testes o meu kml conforme abaixo,

Do jeito que eu fiz var kmlString = showPics(); não mostrava o kml pq, o result estava dentro da function somente,

Por isso que eu passei por parametro o ge, ai sim ele retorna se eu der um alert, mas quando eu rodo a aplicação mostra a mensagem “kml is undefined”,

Eu falei com um cara do StackOverflow ele disse que pode ser por eu não estar usando um xml Schema segue link http://stackoverflow.com/questions/9260781/whats-wrong-with-my-code-parsing-the-kml-to-google-earth

Mas eu validei o mesmo, identico kml que tenho em minha app no kml interactive http://kml-samples.googlecode.com/svn/trunk/interactive/index.html

Ele até mostrou a foto que tenho em minha app e foi direto nas cordenadas que tenho declaradas,

Alguma dica, estou preocupado pois tomara que seja erro de código e não de plugin ou versão do GE, ou sei lá…

Meu código alterado só para testes esta assim:

google_earth.jsp

[code]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);

    // 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); 

	exibeFotos(ge);
}

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

function failureCB(errorCode) {

}
google.setOnLoadCallback(init);[/code]

O meu KmlGenerator que retorna a String com o kml (diminui para testes):

StringBuffer sb = new StringBuffer(); sb.append("<?xml version='1.0' encoding='UTF-8'?>"); // aqui tentei colocar todos esses que estão comentados tbm, mas não adiantou 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'> "); 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();

tal vez seja o navegador, faz testes em diferentes do jeito que está, depois troca o init por este:

function init() {
    if(navigator.appName == "Microsoft Internet Explorer"){
        setTimeout(function() {
            google.earth.createInstance('map3d', initCB, failureCB);
        }, 1000);
    }else{
        google.earth.createInstance('map3d', initCB, failureCB);
    }
}

Cara obrigado pela força mas não é isso não, eu testei no Google, IE e Firefox e a mensagem é a mesma “kml is not defined”.

Eu nem sei o que fazer mais, até palestra do gordão do Google que fez o KML eu vi mas não adiantou muito, pois não encontrei uma solução lá…

O que eu não consigo acreditar é que eu testo o mesmo kml no kml interactive e lá ele mostra o que eu quero, mas rodar na minha aplicação nada…

Se souber de algo avise-me, obrigado