Atlas 380/iPad/notreavion.net

Ci-dessous le code source à venir de l'appli décrite au § Atlas 380/iPad #notreavion.net :

Il tient en quelques pages html, php et css.

Page d'initialisation

<!DOCTYPE HTML>

<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Convertisseur FAR-KML</title>

<link rel="stylesheet" type="text/css" href="style.css">

<script>
function myFunction() {
    document.getElementById("myForm").submit();
}
</script>
</head>


<body>

<h4>Bienvenue sur la page de conversion en ligne du bloc WAYPOINTS OFP FAR</h4>
<!--Page initiale avec la case de texte dans laquelle coller le bloc WAYPOINTS INFO-->

<hr>

<form id="myForm" action="output.php" method="post">
Collez votre sélection dans le cadre ci dessous, vous pouvez la modifier avant de l'envoyer.<br>
<br><br>

<!--Creation de la case texte-->
<textarea name="name" rows="20" cols="75" placeholder="Votre sélection peut inclure des éléments avant ou aprés les waypoints."></textarea>
<br>

<!-- Input boutons radio customisés-->

    <div class="radio">  
		<br>
        <input class= "css-checkboxr" id="routewaypoint" type="radio" name="typeroute" value="routewaypoint" checked>  
        <label for="routewaypoint" class="css-labelr">Route + noms des waypoints</label>
		<br>
        <input class= "css-checkboxr" id="routeseule" type="radio" name="typeroute" value="routeseule">  
        <label for="routeseule" class="css-labelr">Route seulement</label>  
		<br><br>
    </div>  


	</form>
<div>

<!--Bouton d'envoi des données pour calcul-->

<button type ="button" class="btn" onclick="myFunction()" value="Submit form">En route!!</button><br><br>

<!--Bouton permettant l'accès à la carte interractive sans avoir inséré de route-->
<button type ="button" class="btn"  onclick="window.open('../convert/carteanim.html')">Carte interactive sans route</button>

<!--Bouton d'aide-->
<button type ="button" class="btn" style= "padding: 10px 15px 10px 15px;" onclick="location.href='help.html'">?</button>
</div>
</body>
</html>

Page de calcul et choix d'option de récupération

<!DOCTYPE HTML>
<html lang="fr">

<!--Feuille de calcul du fichier KML et d'affichage des options d'envoi-->

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Résultat FAR-KML</title>
<link rel="stylesheet" type="text/css" href="style.css">
        
</head>

<body>


<?php 
   

   
 if (!$route= $_POST["name"]) 					// récupère la route
	{						 					// la route est vide!!!
		//Message si route vide
		echo "<p class='error'>ERREUR : Vous n'avez rien collé !!!!!!!</p>";
		echo "<hr>";
		echo '<br><br><button type ="button" class="btn" onclick="window.history.back();">Retour</button>&nbsp;&nbsp;&nbsp;';
		echo '<button type ="button" class="btn" style= "padding: 10px 15px 10px 15px;" onclick="location.href=\'help.html\'">?</button>';
		exit;
	}

$mytype=$_POST['typeroute'];

$route;

$fc="(\b[N|S].{6}[W|E].{7}\b)"; 						//format des coordonnées mot entier uniquement
$rempl = "latitudlongitud";								
$routebis=preg_replace($fc,$rempl,$route);			//remplace les coordonnées par texte pour analyse et recherche

$posdeb=strpos($routebis,$rempl);				    //position premières coordonnées



 if (stripos($_SERVER['HTTP_USER_AGENT'],"iPad")){    // si appel depuis IPAD, il faut enlever un caractère supplémentaire?????
 $offset =6;
 }
 else {
 $offset=5;
 }


$route=substr($route,$posdeb-$offset);

	
$posfin=strripos($routebis,$rempl);	
														//position des dernières coordonnées
$route=substr($route,0,$posfin+15-$posdeb+$offset);		//suppression de ce qui est derrière les dernières coordonnées



if (strstr($route,"-"))
	{
	$rdeg= stristr($route,"---");        // crée le dégagement s'il existe
	$rdeg=preg_replace("[-]","",$rdeg);
	$pos=stripos($route,"-");   			
	$rmain=substr($route,0,$pos); 
	}
else
	{
	$rdeg="";								// pas de dégagement
	$rmain=$route;
	}
	
$rmain= filter_var($rmain, FILTER_SANITIZE_ENCODED); 
$rmain=preg_replace("[%(20|0A|0D)]"," ",$rmain);
$rmain=explode(" ",$rmain); 							//met tous les éléments dans un tableau
$rmain= array_values(array_filter($rmain,"testvide"));  //supprime les élements vides et reindexe le tableau


if (count($rmain)<4)
 {
        //Message si route trop courte, pas assez de points
		echo "<p class='error'>ERREUR : Il faut au moins deux point pour définir une route<br>Vérifiez votre insertion ! ! ! ! !</p>";
		echo "<hr>";
		echo '<br><br><button type ="button" class="btn" onclick="window.history.back();">Retour</button>&nbsp;&nbsp;&nbsp;';
		echo '<button type ="button" class="btn" style= "padding: 10px 15px 10px 15px;" onclick="location.href=\'help.html\'">?</button>';
		exit;
}


$rdeg= filter_var($rdeg, FILTER_SANITIZE_ENCODED); 
$rdeg=preg_replace("[%(20|0A|0D)]"," ",$rdeg);
$rdeg=explode(" ",$rdeg); 
$rdeg= array_values(array_filter($rdeg,"testvide"));


$rmain= CreateArrayRoute ($rmain);
$rdeg= CreateArrayRoute ($rdeg);

// Création du nom du fichier

$dep=$rmain[0]['waypoint'];             //Point de départ
$arr=end($rmain)['waypoint'];			//Point d'arrivée				
$deg=end($rdeg)['waypoint'];			//Point de dégagement
$timestp = date("dMY_His");
if ($deg){
$mykml = $dep."-".$arr."_(".$deg.")_".$timestp.".kml";		//Nom du fichier KML
}
else {
$mykml = $dep."-".$arr."_".$timestp.".kml";
}
$mykml = trim($mykml);										//Suppression des caractères bizarres

generatekml ($rmain,$rdeg,$mykml,$mytype);        	//Création du point KML
 // Création de l'image 
$rmain=InvertLat ($rmain);
$rdeg=InvertLat ($rdeg);

 
$deppoint=$rmain[0]['latitude'].",".$rmain[0]['longitude'];             //Point de départ
$arrmain=end($rmain)['latitude'].",".end($rmain)['longitude'];          //Arrivée
$arrdeg=end($rdeg)['latitude'].",".end($rdeg)['longitude'];				//Dégagement

$mainstring= CreateString($rmain);						//Création string route principale et dégagement													
$degstring= CreateString($rdeg);

$upperleftlat=max(array_column($rmain,'latitude'));                 //point gauche et point droit de la carte statique
$upperleftlong=min(array_column($rmain,'longitude'));
$upperleft=$upperleftlat.",".$upperleftlong;
$lowerrightlat= min(array_column($rmain,'latitude'));
$lowerrightlong=max(array_column($rmain,'longitude'));
$lowerright=$lowerrightlat.",".$lowerrightlong;


//Map MapQuest
//A noter que le paramètre key est propriétaire du site et doit être demandé à MapQuest pour utilisation sur un autre site
// Création de l'image MapQuest 
$mapurl= "http://open.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd%7Cluurnu0125%2Cbs%3Do5-9w8lgw&size=1000,1000&margin=10&imagetype=png&pois=red_1,".$deppoint."|purple_1,".$arrdeg."|red_1,".$arrmain."&polyline=color:0xFF0000|width:3|".$mainstring."&polyline=color:0xCCCC00|width:3|".$degstring."";

// Création de l'image MapQuest en plein écran
$imgurl="http://open.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd%7Cluurnu0125%2Cbs%3Do5-9w8lgw&size=300,200&margin=15&scalebar=false&imagetype=png&pois=red_1,".$deppoint."|purple_1,".$arrdeg."|red_1,".$arrmain."&polyline=color:0xFF0000|width:2|".$mainstring."&polyline=color:0xCCCC00|width:2|".$degstring."";
 
 
 //Affichage du résultat
 echo  "<p>Votre fichier ".$mykml." est disponible</p>";
 echo "<a href=$mapurl target='_blank'><img src='$imgurl'></a>";
 echo "<hr>";

 echo "<br>";
 $filename="carteanim.html?file=../convert/KML_outputs/".$mykml;

 echo '<button type ="button" class="btn"  onclick="window.open(\''.$mapurl.'\')"> &nbsp;Carte&nbsp;  statique&nbsp; </button>';
 echo "<br>";
 echo "<br>";

  echo '<button type ="button" class="btn"  onclick="window.open(\''.$filename.'\')">Carte interactive</button>';
 echo "<br>";
 echo "<br>";
 echo  '<button type ="button" class="btn" onclick="location.href=\'../convert/KML_outputs/'.$mykml.'\'">Téléchargement</button>';   //Faire test avec fichiers dans dossier.
 echo "<br>";
 echo "<br>";
 echo "<form action='envoi_mail.php' method='post'>
	<input type='text' name ='email' placeholder='Votre adresse mail' class= 'style_input'>
	<br> <br><input type ='submit' value='Envoyer  le  mail'>
	<input type='hidden' name='fichier'   value='../convert/KML_outputs/".$mykml."'> </form>";
	
 echo '<br><br><button type ="button" class="btn" onclick="window.history.back();">Retour</button>&nbsp;&nbsp;&nbsp;';
 
 echo '<button type ="button" class="btn" style= "padding: 10px 15px 10px 15px;" align="right" onclick="location.href=\'help.html\'">?</button>';
 

 echo "<br>";
 


 
 
//========= Les fonctions utilisées =========

 
//Fonction de test, pour voir si un élément d'un tableau est vide 
function testvide($var)
{
strlen($var)==0;
return($var);
} 


 
 //Fonction de création du fichier .KML
 
 function generatekml($inputm,$inputd,$filename,$type){       
 // $inputm est la route principale, $inputd est la route dégagement,$type est le type de route


$output="<?xml version='1.0' encoding='UTF-8'?>
<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'>
<Document>
<name>";
$output.=substr($filename,0,9)."</name>
<Style id='no_icone'>
			<IconStyle>
			<Icon>
				<href>http://www.notreavion.net/convert/images/no_icon.png</href>
			</Icon>
			
			<hotSpot x='0.5' y='0.0' xunits='fraction' yunits='fraction' />
		</IconStyle>
	</Style>

<Style id='placemark-purple'>
		
		<IconStyle>
			<Icon>
				<href>http://maps.me/placemarks/placemark-purple.png</href>
			</Icon>
			
			<hotSpot x='0.5' y='0.0' xunits='fraction' yunits='fraction' />
		</IconStyle>
	</Style>
	<Style id='placemark-pink'>
		<IconStyle>
			<Icon>
				<href>http://maps.me/placemarks/placemark-pink.png</href >
			</Icon>
			
			<hotSpot x='0.5' y='0.0' xunits='fraction' yunits='fraction' />
		</IconStyle>
	</Style>
	<Style id='rmain'>
		<LineStyle>
			<color>FFDA25A8</color>
			<width>3</width>
		</LineStyle>
		<PolyStyle>
			<color>FFDA25A8</color>
		</PolyStyle>
	</Style>
	<Style id='rdeg'>
		<LineStyle>
		<color>FFFF00FF</color>
			<width>3</width>
		</LineStyle>
		<PolyStyle>
		
			<color>FFFF00FF</color>
		</PolyStyle>
	</Style>
<Folder>
<name>Lignes</name>
		<open>1</open>
		
<Placemark>
<name>Rmain</name>
<styleUrl>#rmain</styleUrl>";
$output.="
<LineString>
<tessellate>1</tessellate>
<coordinates>";
foreach($inputm as $point){
$coordinates=$point['coordinates'];
$output.="$coordinates ";}
$output.="</coordinates>
</LineString>
</Placemark>";
$output.="<Placemark>
<name>Rdeg</name>
<styleUrl>#rdeg</styleUrl>";
$output.="
<LineString>
<tessellate>1</tessellate>
<coordinates>";
foreach($inputd as $point){
$coordinates=$point['coordinates'];
$output.="$coordinates ";}
$output.="</coordinates>
</LineString>
</Placemark>
</Folder><Folder>";

if($type=="routewaypoint"){
foreach($inputm as $point){
$name=$point['waypoint'];
$coordinates=$point['coordinates'];

$output.="
<Placemark>";

$output.="<name>$name</name>";

$output.="
<styleUrl>#placemark-purple</styleUrl>
";	

$output.="<description>$name</description>	
		<Point>      
		<coordinates>$coordinates</coordinates>
		</Point>
		</Placemark>
";
}
foreach($inputd as $point){
$name=$point['waypoint'];
$coordinates=$point['coordinates'];
$output.="<Placemark>";

$output.="<name>$name</name>";


$output.="
<styleUrl>#placemark-pink</styleUrl>
";	

$output.="<description>$name</description>		
		<Point>      
		<coordinates>$coordinates</coordinates>
		</Point>
		</Placemark>
";
}
}
$output.="</Folder></Document>
</kml>
";

//Ecriture du fichier KML dans le dossier KML_outputs sur le serveur
$myfile = fopen("../convert/KML_outputs/".$filename,"w") or die("Unable to open file!");
fwrite($myfile, $output);
fclose($myfile);

/*
 //Création du fichier kmz - non utilisé
$mykmz = substr($filename,0,strlen($filename)-3)."kmz";

$zip = new ZipArchive();

if ($zip->open($mykmz, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$file>\n");
}
$zip->addFromString("doc.kml",$output );
$zip->addEmptyDir ( "files" );
$zip->addFile ('icone_route.png','files/icone_route.png');
$zip->addFile ('icone_route.png','files/icone_deg.png');
$zip->close();
*/
//print $output;
}

//Fonction de création du tableau à deux colonnes waypoints-coordonnées décimales

function CreateArrayRoute ($route){          

$arrlength=count($route);

$newroute=array(); //Nouveau tableau à deux colonnes Nom et Coordonnées

for($x=0;$x<$arrlength;$x++)
	{	
			
			if (strlen($route[$x])<15)                //il s'agit d'un nom de point, on crée les deux lignes du tableau
			{	
			$waypoint=$route[$x];
			$lat = substr($route[$x+1],0,7);
			$long = substr($route[$x+1],7,8);
			$latitude = ConvertDMSToDD ($lat);
			$longitude = ConvertDMSToDD($long);
			$coordinates=$longitude.",".$latitude;
			
			}
			elseif (strlen($route[$x-1])<15)        //si le précédent est un point, on ne traite pas ces coordonées, elle correspondent au point précédent
			{
			
			continue;
			}
			else									//il s'agit de coordonnées seules, donc on crée aussi le nom du point "LATLONG"
			{
			$lat = substr($route[$x],0,7);
			$long = substr($route[$x],7,8);
			$waypoint = substr($lat,0,3).substr($long,0,4); 
			$latitude = ConvertDMSToDD ($lat);
			$longitude = ConvertDMSToDD($long);
			$coordinates=$longitude.",".$latitude;
							
			}
		
	
$point = array('waypoint'=>$waypoint,'coordinates'=>$coordinates); //Création de la ligne du tableau
$newroute[]=$point;												// Insertion dans le tableau
	}
return $newroute;
}

// Fonction de conversion des longitudes et latitudes

function ConvertDMSToDD($input) {

   $hemi = substr($input,0,1);
   if (strlen($input)==7)
   {
        $deg = intval(substr($input,1,2));
		$min = intval(substr($input,3,2));
	   $decim =intval(substr($input,6,1));
	   }
	else 
	{
	 $deg = intval(substr($input,1,3));
		$min = intval(substr($input,4,2));
	   $decim =intval(substr($input,7,1));
	   }
    $result = $deg + $min/60 + $decim/600;
switch ($hemi)                 //inversion du signe pour W et S
{
case ("W") :
 $result = $result*-1;
 break;
 case ("S") :
 $result = $result*-1;
 break;
 case ("N") :
 break;
 case ("E") :
 break;
 }
 return ($result);
 }
 
 
 function InvertLat ($route){          //Inversion longitude,latitude et création tableau
$arrlength=count($route);
$newroute=array(); 
for($x=0;$x<$arrlength;$x++)
	{	
		$coordx=$route [$x]['coordinates'];	 			//Récupère les coordonnées
		$longx=substr($coordx,0,stripos($coordx,","));  
		$latx=substr($coordx,stripos($coordx,",")+1);
		$latx=strtr($latx,",",".");
		$longx=strtr($longx,",",".");
		$point = array('latitude'=>$latx,'longitude'=>$longx); //Création de la ligne du tableau
		$newroute[]=$point;												
			
	}	
	return $newroute;	// Insertion dans le tableau
	}
	
function CreateString($route){

$arrlength=count($route);
$linestring=""; 
for($x=0;$x<$arrlength;$x++)
	{ 
	$linestring.=$route[$x]['latitude'].",".$route[$x]['longitude'].",";
	}
return $linestring;
}

//========= Fin des fonctions utilisées =========

 ?>
 

</body>
</html>

Page 3

Page 4

Page 5