banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 05 March 2009 13:46

Atelier3DCité
Juste Inscrit !
Lieu: La Chapelle Basse Mer
Date d'inscription: 15 Jul 2008
Messages: 7
Site web

Google Earth API - Objets 3D (kmz) et affichage distincts

Bonjour, smile à toutes et à tous, et d'abord merci pour votre site que je parcours depuis quelque temps sans y avoir encore participé. Je ne suis pas directement de la partie "géomatique". Mon activité concerne plus la modélisation 3D se référant à l'architecture et à l'urbanisme mais le développement de la géomatique en général me passionne. Ce site professionnel m'a ouvert d'autres horizons qui rejoignent fortement ceux sur lesquels je travaille actuellement.

J'étudie en ce moment les nouvelles applications possibles avec google earth, l'intégration des données 3D d'architecture et d'urbanisme, et plus récemment la mise en place de l'API Google dans les pages web.

Plus concrétement, j'essaie à ce jour de créer une page web avec l'API Google incluant deux boutons permettant de rendre visible ou invisible un objet 3D, tout en conservant un autre objet 3D visible....

Extrait résumé de la page en cours qui donnera ceci à l'ouverture :
(j'ai supprimé toutes les mises en page et déco css...)

vue à l'initialisation de la page (sans l'objet "projet")

[img]http://www.3dcite.fr/forums/images/EssaiGeProjet01.jpg[/img]

avec la déclaration de la clé (à obtenir auprès de Google) :

Code:

<script src="http://www.google.com/jsapi?key=ABQIxxxxxxxxxxxxxxxx"></script>

la déclaration de la carte :

Code:

<script type="text/javascript">
google.load("earth", "1"); 


var ge; 


function onLoad() { 
  google.earth.createInstance("map3d", initCB, failureCB); 
}

l'initialisation des différents layers (terrain, routes, bâtiments3D initiaux, limites, contrôles de navigation...etc) :

Code:

function initCB(object) { 
  ge = object; 
  ge.getWindow().setVisibility(true);
  ge.getOptions().setMouseNavigationEnabled(true);
  
  var layerRoot = ge.getLayerRoot();
  layerRoot.enableLayerById(ge.LAYER_TERRAIN, true);
  layerRoot.enableLayerById(ge.LAYER_ROADS, false);
  layerRoot.enableLayerById(ge.LAYER_BUILDINGS, false);
  layerRoot.enableLayerById(ge.LAYER_BORDERS, true);
  ge.getOptions().setFlyToSpeed(.50); 

  ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
  
  ge.getOptions().setStatusBarVisibility(false);
  ge.getOptions().setOverviewMapVisibility(false);
  ge.getOptions().setScaleLegendVisibility(false);
  ge.getOptions().setGridVisibility(false);

le positionnement de la vue sur le site par :

Code:

 var la = ge.createLookAt('');
  la.set(47.272237,-1.338813, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 
         -90, 30, 250); //180, 60, 500);
  ge.getView().setAbstractView(la);

ce peut être aussi par "Camera"

l'activation du fichier kmz du bâti conservé :

Code:

function finished(object) 
  {
         if (!object) {
           alert('KML mal formé');
           return;
         }
         ge.getFeatures().appendChild(object);
       }
 
       var kmlCons = 'http://3dcite.fr/google_earth/kmz/projbourg01/BourgCons.kmz';
       google.earth.fetchKml(ge, kmlCons, finished);

et ensuite ce qui m'intéresse, la fonction pour le bouton "voir le projet" :

Code:

function addKmlProj() { 
  var urlProj = "http://3dcite.fr/google_earth/kmz/projbourg01/BourgProj.kmz"; 
  google.earth.fetchKml(ge, urlProj, function(kmlObject) { 
    ge.getFeatures().appendChild(kmlObject); 
  }); 
}

lié au bouton :

Code:

 <input type="button" value="Voir projet" onclick="addKmlProj();"/>

celui-ci fonctionne correctement et fait apparaitre l'objet "projet"

[img]http://www.3dcite.fr/forums/images/EssaiGeProjet02.jpg[/img]

Et là je cale pour le second bouton

<input type="button" value="Effacer projet" onclick="supKmlProj();"/>


auquel je souhaiterais affecter la fonction :

Code:

function supKmlProj() { 
  var ??????????????????????????????
  google.earth.fetchKml(ge, urlProj, function(kmlObject) { 
    ge.getFeatures().removeChild(kmlObject);
     ????????????????????????????????
  }); 
}

ou quelquechose qui y ressemblerait...
pour faire disparaitre l'objet "projet". !

La page donne ceci à ce jour :

page en cours

Je fouille sur les pages de googles Earth API (reference, Examples, interactive sampler...)

Google Earth API

j'ai bien avancé avec l'indispensable Geotribu de Fabien

Geotribu - Google Earth

Mais là je cale. roll

Si quelqu'un avait une petite idée pour ce bout de code javascript
Merci à l'avance

Dernière modification par Atelier3DCité (Thu 05 March 2009 13:54)


Bruno Redureau

Hors ligne

 

#2 Fri 29 May 2009 09:44

smilles
Participant actif
Lieu: valbonne
Date d'inscription: 13 Feb 2007
Messages: 59
Site web

Re: Google Earth API - Objets 3D (kmz) et affichage distincts

Bonjour,

je tente aussi d'afficher un kml dans une page web, j'ai trouvé ceci qui semble très performant :
http://earth-api-samples.googlecode.com … index.html

mais je ne comprends rien à ce code..

Comment l'adapter à mon cas, lorsque je copie-colle cela ne fonctionne pas.
merci de votre aide

Hors ligne

 

#3 Wed 03 June 2009 09:27

Atelier3DCité
Juste Inscrit !
Lieu: La Chapelle Basse Mer
Date d'inscription: 15 Jul 2008
Messages: 7
Site web

Re: Google Earth API - Objets 3D (kmz) et affichage distincts

Bonjour smilles !

je ne comprends pas trop bien vos questions quand vous dites :

"je tente aussi d'afficher un kml dans une page web" ...qu'entendez-vous par là ?

L'affichage d'un objet kml se fait simplement par quelques lignes de code que vous trouvez dans ce sujet juste au dessus.
Ma question était alors de pouvoir afficher ou effacer un objet par un simple bouton dans une page web. Me manque l'expérience du code en javascript .....
L'exemple de Google que vous mettez en lien aborde le "framework Dojo" qui permet de retrouver l'arborescence de GoogleEarth, mais ce type d'interface rebute souvent le grand public et c'est pourquoi je cherche à simplifier mes pages avec par exemple l'affichage possible ou non d'un ou de plusieurs objets par de simples boutons... C'est toujours compliqué de faire simple smile

Sinon quand vous dites "Comment l'adapter à mon cas, lorsque je copie-colle cela ne fonctionne pas.", quel est votre cas ? Parlez-vous de la page exemple de l'API google, d'une page personnelle ? On ne pourra vous aider (dans la mesure des possibilités de chacun) que si votre question est précise. Avez-vous regarder du coté de GéoTribu site trés didactique, très explicite et facile pour une approche du code javascript dans Google Earth :
http://geotribu.net/node/23
On ne peut pas faire de copier/coller sans quelques notions de programmation. Personnellement j'y vais doucement avec des cas concrets.

Bien cordialement


Bruno Redureau

Hors ligne

 

#4 Wed 03 June 2009 10:06

smilles
Participant actif
Lieu: valbonne
Date d'inscription: 13 Feb 2007
Messages: 59
Site web

Re: Google Earth API - Objets 3D (kmz) et affichage distincts

bonjour et merci de votre réponse. Je vais essayer de détailler
je tente de faire afficher un fichier kml ou kmz directement avec l'API google earth. J'y suis arrivé depuis en copiant les quelques lignes de code que vous citez. voir éventuellement le résultat dans mon site : http://serge.milles.free.fr
Mais je voulais ajouter le framework dojo dont vous parlez pour donner la possibilité de lire l'arborescence du kml / kmz et de sélectionner les éléments à afficher ou non. J'ai tenté un copier-coller du code de la page citée vers une page de mon site (en adpatant la ligne de l'API google earth) mais cela ne fonctionne pas et je ne trouve pas pourquoi.
J'ia trouvé le site geotribu et j'y lis pas mal de choses mais j'avance lentement, j'ai aussi mon boulot de prof en parallèle !
merci de m'avoir consacré du temps.

Hors ligne

 

Pied de page des forums

Powered by FluxBB