Api Google Maps Version 2
Itineraire
LES OBSERVATEURS D'ÉVÉNEMENTS LIÉS A
GDIRECTIONS - google.maps.DIRECTIONS
load - addoverlay - error

Api Google Maps Version 2  flèche Itineraire  flèche Les observateurs d'événements load - addoverlay - error liés à GDirections - google.maps.Directions.

LES OBSERVATEURS D'ÉVÉNEMENTS LIÉS A
GDIRECTIONS - google.maps.DIRECTIONS
load - addoverlay - error

Attention :

L'API Google Maps Javascript Version 2 a été officiellement déclarée obsolète le 19 mai 2010 par Google. Elle continuera, cependant, à fonctionner durant encore trois ans, à compter de cette date, conformément à la politique de dépréciation de Google.

TouraineVerte.com ne diffusera plus de d'exemples ni de tutoriels sur cette version de l'API.

L'API Google Maps Javascript Version 3 est désormais la version officielle.

  Article créé le : 24/03/2009
Dernière modification le : 03/11/2009  

Présentation

Trois types d'observateurs d'événement, liés à GDirections ou google.maps.Directions, peuvent être interceptés :

L'observateur d'événement : load

Attention : il ne faut pas confondre :

  • l'observateur d'événement load,

avec

  • le load() de monItineraire.load() qui permet d'envoyer une requête aux serveurs de Google afin de calculer l'itinéraire désiré.

Revenons à notre observateur d'événement :

  • load :
    • Cet événement est déclenché lorsque le résultat d'un calcul d'itinéraire, à l'aide de monItineraire.load(), est réussi et disponible.
    • Notez que load() lance une nouvelle requête, qui à son tour déclenche un événement load une fois le chargement du résultat de la requête terminé.
    • L'événement load est déclenché avant que toutes les informations ne viennent s'insérer dans la carte et dans le descriptif détaillé de l'itinéraire.

  GEvent.addListener(monItineraire, "load", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  GEvent.addListener(monItineraire, "load", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

Ou si vous utilisez Google AJAX API loader :


  google.maps.Event.addListener(monItineraire, "load", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  google.maps.Event.addListener(monItineraire, "load", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

L'observateur d'événement : addoverlay

  • addoverlay :
    • Cet événement est déclenché une fois que le tracé/texte de l'itinéraire sont ajoutés à la carte/descriptif détaillé de l'itinéraire.
    • Notez que l'événement addoverlay n'est pas déclenché si aucun de ces éléments n'est attaché à GDirections.

  GEvent.addListener(monItineraire, "addoverlay", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  GEvent.addListener(monItineraire, "addoverlay", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

Ou si vous utilisez Google AJAX API loader :


  google.maps.Event.addListener(monItineraire, "addoverlay", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  google.maps.Event.addListener(monItineraire, "addoverlay", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

L'observateur d'événement : error

  • error :
    • Cet événement est déclenché lorsque l'itinéraire demandé provoque une erreur.

  GEvent.addListener(monItineraire, "error", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  GEvent.addListener(monItineraire, "error", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

Ou si vous utilisez Google AJAX API loader :


  google.maps.Event.addListener(monItineraire, "error", function(){

     ... code à executer ...

  });

Que l'on peut également écrire :


  google.maps.Event.addListener(monItineraire, "error", appelFonction);

  ...

  et ensuite on créé la fonction appelFonction

  ...

  function appelFonction(){

     ... code à executer ...

  }

Vous pouvez employer getStatus() comme ceci monItineraire.getStatus() pour obtenir plus d'informations sur l'erreur.

Quand un événement error se produit, aucun événement load ou addoverlay ne sera déclenché.

Exemple :


GEnevent.addListener(monItineraire, "error", codeRequete);



...



function codeRequete(){

	if (monItineraire.getStatus().code == G_GEO_SUCCESS){

		alert("Aucune erreur ne s'est produite. L'adresse a été analysée avec succés");

	}

	else if (monItineraire.getStatus().code == G_GEO_BAD_REQUEST){

		alert("La demande n'a pu être analysée avec succés.");

	}

	else if (monItineraire.getStatus().code == G_GEO_SERVER_ERROR){

		alert("La demande n'a pu être traitée avec succés. La raison exacte de l'échec est inconnue.");

	}

	else if (monItineraire.getStatus().code == G_GEO_MISSING_QUERY){

		alert("Aucune question n'a été indiquée dans la requète");

	}

	else if (monItineraire.getStatus().code == G_GEO_MISSING_ADDRESS){

		alert("aucune question n'a été indiquée dans la requète");

	}

	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_ADDRESS){

		alert("Aucun lieu géographique correspondant à  l'adresse indiquée n'a pu être trouvé. Cela peut être dû au fait que l'adresse est relativement nouvelle, ou qu'elle est peut être incorrecte.");

	}

	else if (monItineraire.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS){

		alert("Les coordonnées GPS (Latitude, Longitude) pour l'adresse donnée ou l'itinéraire demandé n'ont pu être retournées pour des raisons légales ou contractuelles.");

	}

	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS){

		alert("GDirections n'a pas pu calculer d'itinéraire entre les points mentionnés dans la requète. Soit parce qu'il n'y a aucun itinéraire disponible entre les deux points, soit parce que nous ne disposons pas des données couvrant cette région.");

	}

	else if (monItineraire.getStatus().code == G_GEO_BAD_KEY){

		alert("La clef indiquée est invalide ou n'est pas attribuée au domaine pour lequel elle a été donnée.");

	}

	else if (monItineraire.getStatus().code == G_GEO_TOO_MANY_QUERIES){

		alert("Le nombre de requêtes, pour la clef donnée, a dépassé le quota des demandes autorisées pour une période de 24 heures.");

	}

	else alert("Une erreur inconnue s'est produite.");

}

CODE STATUT REQUETE - enum GGeoStatusCode

Les équivalents numériques pour chaque constante symbolique sont indiqués entre parenthèses..

Code statut de la requête Description
(200) G_GEO_SUCCESS Aucune erreur ne s'est produite. L'adresse a été analysée avec succès et ses coordonnées GPS (Latitude, Longitude) ont été retournées. (Depuis la version 2.55)
(400) G_GEO_BAD_REQUEST La demande n'a pu être analysée avec succès. (Depuis la version 2.81)
(500) G_GEO_SERVER_ERROR La demande n'a pu être traitée avec succès. La raison exacte de l'échec est inconnue. (Depuis la version 2.55)
(601) G_GEO_MISSING_QUERY Le paramétre "q" de la requête HTTP est manquant ou n'a aucune valeur. Pour les demandes de "géocodage", cela signifie qu'une adresse vide a été indiquée dans la requête. Pour les demandes de directions, cela signifie qu'aucune question n'a été indiquée dans la requête. (Depuis la version 2.81)
(601) G_GEO_MISSING_ADDRESS Synonyme de G_GEO_MISSING_QUERY. (Depuis la version 2.55)
(602) G_GEO_UNKNOWN_ADDRESS Aucun lieu géographique correspondant à l'adresse indiquée n'a pu être trouvé. Cela peut être dû au fait que l'adresse est relativement nouvelle, ou qu'elle est peut être incorrecte. (Depuis la version 2.55)
(603) G_GEO_UNAVAILABLE_ADDRESS Les coordonnées GPS (Latitude, Longitude) pour l'adresse donnée ou l'itinéraire demandé n'ont pu être retournées pour des raisons légales ou contractuelles. (Depuis la version 2.55)
(604) G_GEO_UNKNOWN_DIRECTIONS GDirections n'a pas pu calculer d'itinéraire entre les points mentionnés dans la requête. Soit parce qu'il n'y a aucun itinéraire disponible entre les deux points, soit parce que nous ne disposons pas des données couvrant cette région. (Depuis la version 2.81)
(610) G_GEO_BAD_KEY La clef indiquée est invalide ou n'est pas attribuée au domaine pour lequel elle a été donnée. (Depuis la version 2.55)
(620) G_GEO_TOO_MANY_QUERIES Le nombre de requêtes, pour la clef donnée, a dépassé le quota des demandes autorisées pour une période de 24 heures. (Depuis la version 2.55). Si vous envoyez des demandes multiples en parallèle ou dans une boucle, insérez une pause dans votre code afin de ne pas envoyer trop rapidement vos demandes de géocodages.

Carte

Dans cette carte va s'afficher l'itinéraire pour aller de "Tours" à "Pornichet".Différents messages vont apparaître afin de vous informer sur l'évolution du calcul de l'itinéraire.Copiez le code source ci-dessous, et amusez-vous à modifier le from: (ville de départ) et le to: (ville arrivée) en indiquant des villes existantes ou erronées et observez le résultat.

Code

Code : Avec Google Ajax API Loader

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>TouraineVerte ma première carte</title>
<!-- Chargement du script Google AJAX APIs en précisant votre clé -->
<script type="text/javascript" src="http://www.google.com/jsapi?key=Inserez_Votre_Clef_API_Ici"></script><script type="text/javascript">
//<![CDATA[
/* Chargement du module "maps" dans sa version "2.x" */
google.load("maps", "2.x",{"other_params":"sensor=false"});
 
/* Déclaration des variables globales */
var carteItineraire;
var texteItineraire;
var monItineraire;
 
/* Fonction initialize() */
function initialize() {
/* Si le navigateur est compatible avec l'API de Google Maps ... */
if (google.maps.BrowserIsCompatible()) {
/* ... Création d'une nouvelle carte nommée "carteItineraire" qui s'affichera à l'intérieur de la balise <div> ayant pour identifiant id="EmplacementCarteItineraire" ... */
carteItineraire= new google.maps.Map2(document.getElementById("EmplacementCarteItineraire"));
/* ... La carte nommée "carteItineraire" est centrée sur la Latitude 47.341571, la Longitude 0.514233, avec un niveau de zoom égal à 13 ... */
carteItineraire.setCenter(new google.maps.LatLng(47.341571,0.514233), 13);
/* ... texteItineraire : contenu de la balise <div> ayant pour identifiant id="EmplacementTexteItineraire" ... */
texteItineraire = document.getElementById("EmplacementTexteItineraire");
/* ... Création d'un nouvel itinéraire nommé "monItineraire" ... */
/* ... Le résultat s'affichera sous forme de carte dans la carte nommée "carteItineraire" ... */
/* ... Le résultat s'affichera sous forme textuelle dans "texteItineraire" ... */
monItineraire= new google.maps.Directions(carteItineraire, texteItineraire);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "load" ... */
/* ... Si l'événement "load" s'est correctement déroulé alors on appelle la fonction "itineraireCharge" ... */
google.maps.Event.addListener(monItineraire, "load", itineraireCharge);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "addoverlay" ... */
/* ... Si l'événement "addoverlay" s'est correctement déroulé alors on appelle la fonction "itineraireAffiche" ... */
google.maps.Event.addListener(monItineraire, "addoverlay", itineraireAffiche);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "error" ... */
/* ... Si l'événement "error" s'est correctement déroulé alors on appelle la fonction "erreurItineraire" ... */
google.maps.Event.addListener(monItineraire, "error", erreurItineraire);
/* ... Envoi la requête aux serveurs de Google afin d'établir un itinéraire ... */
/* ... entre Tours et Pornichet. Si la requête aboutit, l'itinéraire ... */
/* ... s'affichera sous forme de carte et de texte ... */
/* ... Amusez-vous à modifier les villes ci-dessous (réelles ou fausses) pour      ... */
/* ... observer l'impact sur le déroulement du processus de calcul de l'itinéraire ... */
monItineraire.load("from: Tours,FR to: Pornichet,FR");
/* Si le navigateur n'est pas compatible avec l'API de Google Maps ... */
}else{
/* ... affichage du message "Désolé, mais votre navigateur n'est pas compatible avec Google Maps". */
alert('Désolé, mais votre navigateur n\'est pas compatible avec Google Maps');
}
}
 
/* Fonction itineraireCharge() */
function itineraireCharge(){ 
	alert('Votre itinéraire a été claculé avec succès');
}
 
/* Fonction itineraireAffiche() */
function itineraireAffiche(){ 
	alert('Affichage de votre itinéraire');
}
 
 
/* ... fonction erreurItineraire() */
function erreurItineraire(){
	if (monItineraire.getStatus().code == G_GEO_BAD_REQUEST){
		alert("La demande n'a pu être analysée avec succés.");
	}
	else if (monItineraire.getStatus().code == G_GEO_SERVER_ERROR){
		alert("La demande n'a pu être traitée avec succés. La raison exacte de l'échec est inconnue.");
	}
	else if (monItineraire.getStatus().code == G_GEO_MISSING_QUERY){
		alert("Aucune question n'a été indiquée dans la requète");
	}
	else if (monItineraire.getStatus().code == G_GEO_MISSING_ADDRESS){
		alert("aucune question n'a été indiquée dans la requète");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_ADDRESS){
		alert("Aucun lieu géographique correspondant à  l'adresse indiquée n'a pu être trouvé. Cela peut être dû au fait que l'adresse est relativement nouvelle, ou qu'elle est peut être incorrecte.");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS){
		alert("Les coordonnées GPS (Latitude, Longitude) pour l'adresse donnée ou l'itinéraire demandé n'ont pu être retournées pour des raisons légales ou contractuelles.");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS){
		alert("GDirections n'a pas pu calculer d'itinéraire entre les points mentionnés dans la requète. Soit parce qu'il n'y a aucun itinéraire disponible entre les deux points, soit parce que nous ne disposons pas des données couvrant cette région.");
	}
	else if (monItineraire.getStatus().code == G_GEO_BAD_KEY){
		alert("La clef indiquée est invalide ou n'est pas attribuée au domaine pour lequel elle a été donnée.");
	}
	else if (monItineraire.getStatus().code == G_GEO_TOO_MANY_QUERIES){
		alert("Le nombre de requêtes, pour la clef donnée, a dépassé le quota des demandes autorisées pour une période de 24 heures.");
	}
	else alert("Une erreur inconnue s'est produite.");
}
 
/* Appelle la fonction "initialize" lorsque la page web sera chargée */
google.setOnLoadCallback(initialize);
//]]>
</script>
<style type="text/css">
<!--
#EmplacementTexteItineraire {background-color: #FFFFFF;}
-->
</style>
</head>
 
<body>
<!-- La carte nommée "carteItineraire", va venir s'afficher à l' intérieur de -->
<!-- la balise <div> ayant pour identifiant id="EmplacementCarteItineraire". -->
<!-- Elle fera donc 100% de large et 400 pixels de haut. -->
<div id="EmplacementCarteItineraire" style="width:100%; height:400px;"></div>
<!-- Le descriptif de l'itinéraire "monItineraire", va venir s'afficher à l'intérieur -->
<!-- de la balise <div> ayant pour identifiant id="EmplacementTexteItineraire". -->
<div id="EmplacementTexteItineraire" style="width:740px;"></div>
</body>
</html>

Code : Sans Google Ajax API Loader

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>TouraineVerte ma première carte</title>
<!-- Chargement du script Google Maps, version 2.x, en précisant votre clé -->
<script src="http://maps.google.com/maps?file=api&v=2.x&key=Inserez_Votre_Clef_API_Ici&sensor=false"
type="text/javascript"></script>
//<![CDATA[
 
/* Déclaration des variables globales */
var carteItineraire;
var texteItineraire;
var monItineraire;
 
/* Fonction initialize() */
function initialize() {
/* Si le navigateur est compatible avec l'API de Google Maps ... */
if (GBrowserIsCompatible()) {
/* ... Création d'une nouvelle carte nommée "carteItineraire" qui s'affichera à l'intérieur de la balise <div> ayant pour identifiant id="EmplacementCarteItineraire" ... */
carteItineraire= new GMap2(document.getElementById("EmplacementCarteItineraire"));
/* ... La carte nommée "carteItineraire" est centrée sur la Latitude 47.341571, la Longitude 0.514233, avec un niveau de zoom égal à 13 ... */
carteItineraire.setCenter(new GLatLng(47.341571,0.514233), 13);
/* ... texteItineraire : contenu de la balise <div> ayant pour identifiant id="EmplacementTexteItineraire" ... */
texteItineraire = document.getElementById("EmplacementTexteItineraire");
/* ... Création d'un nouvel itinéraire nommé "monItineraire" ... */
/* ... Le résultat s'affichera sous forme de carte dans la carte nommée "carteItineraire" ... */
/* ... Le résultat s'affichera sous forme textuelle dans "texteItineraire" ... */
monItineraire= new GDirections(carteItineraire, texteItineraire);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "load" ... */
/* ... Si l'événement "load" s'est correctement déroulé alors on appelle la fonction "itineraireCharge" ... */
GEvent.addListener(monItineraire, "load", itineraireCharge);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "addoverlay" ... */
/* ... Si l'événement "addoverlay" s'est correctement déroulé alors on appelle la fonction "itineraireAffiche" ... */
GEvent.addListener(monItineraire, "addoverlay", itineraireAffiche);
/* ... Mise ne place d'un observateur d'événement sur l'itinéraire nommé "monItinéraire" ... */
/* ... L'événement observé est "error" ... */
/* ... Si l'événement "error" s'est correctement déroulé alors on appelle la fonction "erreurItineraire" ... */
GEvent.addListener(monItineraire, "error", erreurItineraire);
/* ... Envoi la requête aux serveurs de Google afin d'établir un itinéraire ... */
/* ... entre Tours et Pornichet. Si la requête aboutit, l'itinéraire ... */
/* ... s'affichera sous forme de carte et de texte ... */
/* ... Amusez-vous à modifier les villes ci-dessous (réelles ou fausses) pour      ... */
/* ... observer l'impact sur le déroulement du processus de calcul de l'itinéraire ... */
monItineraire.load("from: Tours,FR to: Pornichet,FR");
/* Si le navigateur n'est pas compatible avec l'API de Google Maps ... */
}else{
/* ... affichage du message "Désolé, mais votre navigateur n'est pas compatible avec Google Maps". */
alert('Désolé, mais votre navigateur n\'est pas compatible avec Google Maps');
}
}
 
/* Fonction itineraireCharge() */
function itineraireCharge(){ 
	alert('Votre itinéraire a été claculé avec succès');
}
 
/* Fonction itineraireAffiche() */
function itineraireAffiche(){ 
	alert('Affichage de votre itinéraire');
}
 
/* ... fonction erreurItineraire() */
function erreurItineraire(){
	if (monItineraire.getStatus().code == G_GEO_BAD_REQUEST){
		alert("La demande n'a pu être analysée avec succés.");
	}
	else if (monItineraire.getStatus().code == G_GEO_SERVER_ERROR){
		alert("La demande n'a pu être traitée avec succés. La raison exacte de l'échec est inconnue.");
	}
	else if (monItineraire.getStatus().code == G_GEO_MISSING_QUERY){
		alert("Aucune question n'a été indiquée dans la requète");
	}
	else if (monItineraire.getStatus().code == G_GEO_MISSING_ADDRESS){
		alert("aucune question n'a été indiquée dans la requète");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_ADDRESS){
		alert("Aucun lieu géographique correspondant à  l'adresse indiquée n'a pu être trouvé. Cela peut être dû au fait que l'adresse est relativement nouvelle, ou qu'elle est peut être incorrecte.");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS){
		alert("Les coordonnées GPS (Latitude, Longitude) pour l'adresse donnée ou l'itinéraire demandé n'ont pu être retournées pour des raisons légales ou contractuelles.");
	}
	else if (monItineraire.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS){
		alert("GDirections n'a pas pu calculer d'itinéraire entre les points mentionnés dans la requète. Soit parce qu'il n'y a aucun itinéraire disponible entre les deux points, soit parce que nous ne disposons pas des données couvrant cette région.");
	}
	else if (monItineraire.getStatus().code == G_GEO_BAD_KEY){
		alert("La clef indiquée est invalide ou n'est pas attribuée au domaine pour lequel elle a été donnée.");
	}
	else if (monItineraire.getStatus().code == G_GEO_TOO_MANY_QUERIES){
		alert("Le nombre de requêtes, pour la clef donnée, a dépassé le quota des demandes autorisées pour une période de 24 heures.");
	}
	else alert("Une erreur inconnue s'est produite.");
}
//]]>
</script>
<style type="text/css">
<!--
#EmplacementTexteItineraire {background-color: #FFFFFF;}
-->
</style>
</head>
 
<!-- Une fois la page chargée la fonction initialize() est exécutée. -->
<!-- A la fermeture de la page , la fonction GUnload() est exécutée. -->
<body onload="initialize()" onunload="GUnload()">
<!-- La carte nommée "carteItineraire", va venir s'afficher à l' intérieur de -->
<!-- la balise <div> ayant pour identifiant id="EmplacementCarteItineraire". -->
<!-- Elle fera donc 100% de large et 400 pixels de haut. -->
<div id="EmplacementCarteItineraire" style="width:100%; height:400px;"></div>
<!-- Le descriptif de l'itinéraire "monItineraire", va venir s'afficher à l'intérieur -->
<!-- de la balise <div> ayant pour identifiant id="EmplacementTexteItineraire". -->
<div id="EmplacementTexteItineraire" style="width:740px;"></div>
</body>
</html>

 

API Google Maps - API Google Earth - Fichiers KML KMZ - Aide Didacticiel Documentation Exemple Tutoriels Trucs et Astuces en Français sur TouraineVerte.com
Formation et tutoriels sur les cartes API Google Maps | Formation et tutoriels sur les cartes API Google Earth | Formation et tutoriels sur les Fichiers KML KMZ
Développeur freelance auto-entrepreneur carte Google Maps Earth API | http://www.TouraineVerte.com | © 2010 - Plan du site | fadamaps37@touraineverte.com