110
modifications
(→Images) |
|||
Ligne 92 : | Ligne 92 : | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
<!DOCTYPE HTML> | <!DOCTYPE HTML> | ||
<!-- | <html lang="fr"> | ||
<!--Feuille de calcul du fichier KML et d'affichage des options d'envoi--> | |||
<head> | <head> | ||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | ||
<title> | <title>Résultat FAR-KML</title> | ||
<link rel="stylesheet" type="text/css" href="style.css"/> | <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> '; | |||
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> '; | |||
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.'\')"> Carte statique </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> '; | |||
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://www.notreavion.net/convert/images/icone_route.png</href> | |||
</Icon> | |||
<hotSpot x='0.5' y='0.0' xunits='fraction' yunits='fraction' /> | |||
</IconStyle> | |||
</Style> | |||
<Style id='placemark-pink'> | |||
<IconStyle> | |||
<Icon> | |||
<href>http://www.notreavion.net/convert/images/icone_deg.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 | 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> | </html> | ||
</syntaxhighlight> | </syntaxhighlight> |
modifications