Mon problème est un peu délicat, apologyze si ma question n'est pas claire du tout.conversion latitude/longitude en distance
J'utilise l'API googleMap v3. l'utilisateur peut clique sur la carte pour créer une marque, s'il clique sur la marque, je donne la latitude & informations de longitude dans une infoWindow (ceci est fait et c'est OK)
Les choses que l'on essaie de faire: l'utilisateur peut donne une dimension (km/miles) et je dois dessiner un rectangle de la taille donnée (la marque de création doit être au milieu de la zone). Le problème vient des latlng ou des limites qui prennent seulement la longitude &. donc j'essaye de le convertir.
Voici la partie principale du code.
//latitude
// 1°lat = 111,11 km
//for me: 1km = 0.00900 .
//longitude
//1°lat = 111,11 km * cos latitude
// for me : 1 km = ((1/Math.cos(latitude)) /111.11)
var myBounds = new Array();
var longkm = 5;
var largkm = 2;
myBounds[0] = new google.maps.LatLngBounds(
new google.maps.LatLng(positionmarqueur.lat()-(0.009*longkm), positionmarqueur.lng()-(Math.abs(((1/Math.cos(positionmarqueur.lat()-(0.009*longkm))) /111.11))*largkm)),
new google.maps.LatLng(positionmarqueur.lat()+(0.009*longkm), positionmarqueur.lng()+(Math.abs(((1/Math.cos(positionmarqueur.lat()+(0.009*longkm))) /111.11))*largkm))
);
var overlay1 = new google.maps.Rectangle({
map: map,
bounds: myBounds[0],
strokeColor: "green",
strokeWeight: 1
});
var longkm = 10;
var largkm = 10;
myBounds[1] = new google.maps.LatLngBounds(
new google.maps.LatLng(positionmarqueur.lat()-(0.009*longkm), positionmarqueur.lng()-(Math.abs(((1/Math.cos(positionmarqueur.lat()-(0.009*longkm))) /111.11))*largkm)),
new google.maps.LatLng(positionmarqueur.lat()+(0.009*longkm), positionmarqueur.lng()+(Math.abs(((1/Math.cos(positionmarqueur.lat()+(0.009*longkm))) /111.11))*largkm))
);
var overlay2 = new google.maps.Rectangle({
map: map,
bounds: myBounds[1],
strokeColor: "blue",
strokeWeight: 1
});
Ce shoud dessiner un rectanle et un 5,2 rectangle 10,10 (bien, un carré 10 km) (pour info: var = positionmarqueur latlng, ci-dessus dans le code)
si je prends un coup d'oeil au résultat: le premier rectangle a l'air de plus de 50/20 km. (Ai-je fait une erreur quand je divise? avec un facteur 10? Je ne suis pas très bon en mathématique, mais il semble correct).
Le .... il suffit de regarder seconde comme un rectangle de 200 * 40 km ....
So. Où est le problème? La formule est-elle fausse? Ou je suis juste idiot et il me manque quelque chose?
Thinqs.
il y a un truc si vous utilisez la position Clermont-ferrand (45.7581263,3.1317803). Je vais éditer le jsfiddle et la réponse valide – ssbb
Êtes-vous sûr de la formule? Je veux dire, si vous dessinez un 100/100km, ce n'est pas vraiment un carré, c'est un rectangle, ça vient d'une approximation javascript? Ou je le vois comme ça sur googlemap à cause de l'inclinaison de la terre? – ssbb
@ssbb mise à jour réponse avec une solution plus précise (* qui utilise des méthodes google pour effectuer la transformation *) –