1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
| <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 200px; padding: 0px }
#map_canvas { height: 90% ; width:90%;}
</style>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> <!-- Ici on fait appel à l'API de google Maps -->
</head>
<body onload="initialize()">
<div>
<br> Le produit A est a 43.72 kms d'ici <br> <!-- Simple test avec données entrées en dur -->
Le produit B est a 493.563 kms d'ici
</div>
<div id="map_canvas">
<?php
function getXmlCoordsFromAdress($address) // Fonction de conversion de l'adresse postale en longitude et latitude
// Ici il faudrait faire des requêtes pour récupérer l'adresse et la mettre sous la forme "22 rue rambuteau, 75003 PARIS, france" pour ensuite l'enregistrer dans uen variable
{
$coords=array();
$base_url="http://maps.googleapis.com/maps/api/geocode/xml?";
$request_url = $base_url . "address=" . urlencode($address).'&sensor=false';
$xml = simplexml_load_file($request_url) or die("url not loading");
$coords['lat']=$coords['lon']='';
$coords['status'] = $xml->status ;
if($coords['status']=='OK')
{
$coords['lat'] = doubleval($xml->result->geometry->location->lat);
$coords['lon'] = doubleval($xml->result->geometry->location->lng);
}
return $coords;
}
function getPositionObjets($array) {
$res = array();
foreach($array as $val) {
$object = array(
"nom" => $val['nom'],
"adresse" => $val['adresse'],
"position" => getXmlCoordsFromAdress($val['adresse'])
);
array_push($res, $object);
}
return $res;
}
// Résultat
$resBDD[0]['nom'] = "Laura";
$resBDD[0]['adresse'] = "22 rue rambuteau, 75003 PARIS, france";
$resBDD[1]['nom'] = "Damien";
$resBDD[1]['adresse'] = "9 rue du Cananda, 13010 MARSEILLE, france";
$resBDD[2]['nom'] = "Ronan";
$resBDD[2]['adresse'] = "38 avenue Elsa Triolet, 13008 MARSEILLE, france";
$positionObjets = getPositionObjets($resBDD);
// Test
$coords=getXmlCoordsFromAdress("22 rue rambuteau, 75003 PARIS, france"); // Ici adresse en dur mais requêtes sur BD puis enregistrer dans variable devrait le faire!
$lat = $coords['lat'] ;
$long = $coords['lon'] ;
echo $coords['status'] . " " . $coords['lat'] . " " . $coords['lon']; // Là ça ne s'affiche pas... Je capte pas pourquoi (pas très grave c'est juste pour vérifier)
function get_distance_m($lat1, $lng1, $lat2, $lng2) { // Fonction de calcul de la distance en fonction de longitude et latitude
$earth_radius = 6378137; // Terre = sphère de 6378km de rayon
$rlo1 = deg2rad($lng1);
$rla1 = deg2rad($lat1);
$rlo2 = deg2rad($lng2);
$rla2 = deg2rad($lat2);
$dlo = ($rlo2 - $rlo1) / 2;
$dla = ($rla2 - $rla1) / 2;
$a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo
));
$d = 2 * atan2(sqrt($a), sqrt(1 - $a));
return ($earth_radius * $d);
}
echo (round(get_distance_m($lat, $long, 45.767299, 4.834329) / 1000, 3)). ' km'; // ça ne s'affiche pas non plus. Il doit y avoir un conflit HTML PHP sur echo et print
// Ici si je mets $coords['lat'] et $coords['lon'] ça ne fonctionne pas :/
// Ni $lat = $coords['lat'] ...
// En gros pour $lat1 et $long1 coordonnées de NOUS et $lat2 et $long2 coordonnées de OBJET
// affiche 391.613 km
?>
<script type="text/javascript">
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"), {
zoom: 13,
center: new google.maps.LatLng(48.858565, 2.347198),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
}
var maVar1 = '<?php echo $coords['lat']; ?>'; // On récupère la latitude et on la met dans une variable
var maVar2 = '<?php echo $coords['lon']; ?>'; // On récupère la longitude et on la met dans une variable
if (navigator.geolocation)
var watchId = navigator.geolocation.watchPosition(successCallback, null, {enableHighAccuracy:true});
else
alert("Votre navigateur ne prend pas en compte la géolocalisation HTML5");
function successCallback(position){
map.panTo(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
var marker = new google.maps.Marker({ // Marker avec notre position via @IP
position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
// 43.2476341 5.3917355
map: map
});
// Postion utilisateur
var longit = marker.position.bk;
var latit = marker.position.lk;
var marker2 = new google.maps.Marker({ // Marker chez Maman pour test (Chateauroux)
position: new google.maps.LatLng(46.80634, 1.63546),
map: map
});
var marker3 = new google.maps.Marker({ // Marker prenant en argument les variables de latitude et longitude précédents (Paris)
position: new google.maps.LatLng(maVar1, maVar2),
map: map
});
// Marqueur Objets
<?php
$j = 10;
if(isset($positionObjets) && !empty($positionObjets)) {
for($i=0; $i<count($positionObjets); $i++) {
//echo '<pre>'; print_r($positionObjets[$i]); echo '</pre>';
print "var marker" . $j . " = new google.maps.Marker({"
. "position: new google.maps.LatLng(" . $positionObjets[$i]['position']['lat'] . ", " . $positionObjets[$i]['position']['lon'] . "),"
. "map: map
});";
$j++;
}
}
?>
var iw = new google.maps.InfoWindow({
content: "Vous êtes ici"
});
var iw2 = new google.maps.InfoWindow({
content: "Le produit A"
});
google.maps.event.addListener(marker, "click", function (e) { iw.open(map, marker); });
google.maps.event.addListener(marker2, "click", function (e) { iw2.open(map, marker2); });
};
// Distance entre marker et marker 3 : 43.72 kms
// Distance entre marker et marker 2 : 493.563 kms
//http://www.lexilogos.com/calcul_distances.htm
// <a href="http://stevemorse.org/jcal/latlon.php" target="_blank">http://stevemorse.org/jcal/latlon.php</a>
</script>
</div>
</body>
</html> |
Partager