Muchas gracias polifemo!!!
No había visto este ejemplo. Esto hace precisamente lo que quiero, cargar y descargar varios ficheros en la misma instancia
La verdad es que no entiendo demasiado bien como lo hace. Ahora me estoy peleando con que meta los ficheros que yo quiero porque en el ejemplo utiliza las variables red yellow y green para construir el nombre del kml que carga y parece sencillo pensar que cambiando el nombre funcione pero no es así ya que esas palabras las pasa como parámetros o variables en algunas funciones y no cojo el funcionamiento.
Por ejemplo si utilizo un if para ver la variable que me pasa y en función de eso construir el fichero, algo que luego podría cambiar para poner el que yo quiero, no consigo que funcione
En la función
function loadKml(file) {
var kmlUrl = 'http://earth-api-samples.googlecode.com/svn/trunk/' + 'examples/static/' + file + '.kml';
Se ve que construye el nombre con la variable file que recibe como parámetro (que por cierto, se la cambio por otro nombre para que funcionara el siguiente if ya que file es una palabra reservada)
Si trato de hacer un if como este, creo que debería de funcionar ya que la palabra que le pasa como parámetro a la función es red o yellow o green y en el condicional si que lo detecta pero no carga el fichero y me da un error diciendo que red no está definido.
If (file=="red")
{
window.alert(file);
var kmlUrl = 'http://earth-api-samples.googlecode.com/svn/trunk/' + 'examples/static/' + red + '.kml';
}
Else if (file=="yellow")
{
window.alert(file);
var kmlUrl = 'http://earth-api-samples.googlecode.com/svn/trunk/' + 'examples/static/' + yellow + '.kml';
}
Else
{
window.alert(file);
var kmlUrl = 'http://earth-api-samples.googlecode.com/svn/trunk/' + 'examples/static/' + green + '.kml';
}
Mis conocimientos de javascript son bastante limitados e igual estoy haciendo una barbaridad
Sigo peleándome
Bueno, ya lo he conseguido. Estaba considerando las palabras red, yellow y green como variables en mi if. Menudo fallo!
Este es el código. Permite cargar tres ficheros que le indiquemos y verlos o no según seleccionamos. Es decir como si fuesen capas.
Polifemo, te agradezco mucho la ayuda que me has prestado. Llevaba tiempo detrás de esto y anda que no he dado palos de ciego hasta ahora!!
Un saludo
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META HTTP-EQUIV="CHARSET" CONTENT="ISO-8859-1">
<title>Capas en Google Earth</title>
<!--SUSTITUYE POR TU KEY API-->
<script src="http://www.google.com/jsapi?key=ABQIAAAArCZgeQ8ddm8YbeJQqqHN5BTYrZjdppbykE52CdH9dtH9wJ0VsBQSgm6ZbaTJsaMARyyYkz_JttmHMQ"></script>
<script type="text/javascript">
function addSampleButton(caption, clickHandler) {
var btn = document.createElement('input');
btn.type = 'button';
btn.value = caption;
if (btn.attachEvent)
btn.attachEvent('onclick', clickHandler);
else
btn.addEventListener('click', clickHandler, false);
function addSampleUIHtml(html) {
document.getElementById('sample-ui').innerHTML += html;
}
</script>
<script type="text/javascript">
var ge;
// store the object loaded for the given fichero... Initially none of the objects
// are loaded, so initialize these to null
var currentKmlObjects = {
'red': null,
'yellow': null,
'green': null
};
google.load("earth", "1");
function init() {
google.earth.createInstance('map3d', initCallback, failureCallback);
addSampleUIHtml(
'<h2>Como cargar varios ficheros kml en Google Earth y visualizarlos a modo de capas independientes</h2>' +
'<input type="checkbox" id="kml-red-check" checked onclick="toggleKml(\'red\');"/><label for="kml-red-check">Recorrido del descenso</label><br/>' +
'<input type="checkbox" id="kml-yellow-check" checked onclick="toggleKml(\'yellow\');"/><label for="kml-yellow-check">Situación</label><br/>' +
'<input type="checkbox" id="kml-green-check" checked onclick="toggleKml(\'green\');"/><label for="kml-green-check">Acceso y retorno</label><br/>'
);
}
function initCallback(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
// se añade control de navegación
ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
// se añaden capas
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
// nos situamos en el mapa
var la = ge.createLookAt('');
la.set(42.7052, -0.3295,
0, // altitude
ge.ALTITUDE_RELATIVE_TO_GROUND,
0, // heading
0, // straight-down tilt
1000 // range (inverse of zoom)
);
ge.getView().setAbstractView(la);
//carga el fichero que seleccionemos en el checkbox
if (document.getElementById('kml-red-check').checked)
loadKml('red');
if (document.getElementById('kml-yellow-check').checked)
loadKml('yellow');
if (document.getElementById('kml-green-check').checked)
loadKml('green');
}
function failureCallback(errorCode) {
}
function toggleKml(fichero) {
// borra los kml que pudieran existir anteriormente
if (currentKmlObjects[fichero]) {
ge.getFeatures().removeChild(currentKmlObjects[fichero]);
currentKmlObject = null;
}
// Si se selecciona el checkbox carga el fichero y lo muestra
var kmlCheckbox = document.getElementById('kml-' + fichero + '-check');
if (kmlCheckbox.checked)
loadKml(fichero);
}
function loadKml(fichero) {
if (fichero=="red")
{
var kmlUrl = 'http://www.topocanyons.info/pruebas_php/capa_recorrido.kml';
}
else if (fichero=="yellow")
{
var kmlUrl = 'http://www.topocanyons.info/pruebas_php/capa_situacion.kml';
}
else
{
var kmlUrl = 'http://www.topocanyons.info/pruebas_php/capa_track.kml';
}
// fetch the KML
google.earth.fetchKml(ge, kmlUrl, function(kmlObject) {
if (kmlObject) {
// se muestra en Google Earth
currentKmlObjects[fichero] = kmlObject;
ge.getFeatures().appendChild(kmlObject);
} else {
// en caso de que no exista el fichero kml o sea corrupto
currentKmlObjects[fichero] = null;
//Alerta en devolución de la llamada a la API y los controladores de eventos
//para evitar estancamiento en algunos navegadores
setTimeout(function() {
alert('Bad or null KML.');
}, 0);
// elimina la marca del checkbox
document.getElementById('kml-' + fichero + '-check').checked = '';
}
});
}
MORTA, UNA PREGUNTA, HAZ INTENTADO HACER ESTO COMBINANDOLOS CON EL API DE GOOGLE MAP? OSEA QUE TENGA LAS DOS OPCIONES, YA SEA PARA VERLO EN EL GOOGLE EARTH API O GOOGLE MAP API, EN UNA MISMA PAGINA? ES LO QUE ESTOY TRATANDO DE HACER....
TE LO DIGO PORQUE TARDA MUCHO EL API DEL EARTH EN COMPARACION DEL API DEL MAPS
POR CIERTO, LE DISTE AL CLAVO CON LO QUE NECESITABA
MORTA, UNA PREGUNTA, HAZ INTENTADO HACER ESTO COMBINANDOLOS CON EL API DE GOOGLE MAP? OSEA QUE TENGA LAS DOS OPCIONES, YA SEA PARA VERLO EN EL GOOGLE EARTH API O GOOGLE MAP API, EN UNA MISMA PAGINA? ES LO QUE ESTOY TRATANDO DE HACER....
TE LO DIGO PORQUE TARDA MUCHO EL API DEL EARTH EN COMPARACION DEL API DEL MAPS
POR CIERTO, LE DISTE AL CLAVO CON LO QUE NECESITABA
Hola Fercanez (no se por qué, tu nick me resulta familiar)
No, no lo he intentado. Supongo que se pueda hacer pero no lo se realmente. Ya nos contarás tus progresos
Saludos
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro No Puedes adjuntar archivos en este foro Tu puedes descargar archivos en este foro