2010-04-19 5 views
7

Bonjour.Ajouter des kilomètres à un point de la carte

Je voudrais savoir comment ajouter des kilomètres à un point de la carte (latitude/longitude).

Par exemple: La ville de Jaraguá do Sul se trouve à la latitude -26,462049, longitude -49,059448. Je veux ajouter 100 kilomètres en haut, en bas et sur les côtés. Je veux faire un carré et obtenir les nouveaux points.

Comment faire cela?

Je l'ai essayé:

<?php 
$distance = 100; 
$earthRadius = 6371; 
$lat1 = -26.4853239150483; 
$lon1 = -49.075927734375; 
$bearing = 0; 

$lat2 = asin(sin($lat1) * cos($distance/$earthRadius) + cos($lat1) * sin($distance/$earthRadius) * cos($bearing)); 
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance/$earthRadius) * cos($lat1), cos($distance/$earthRadius) - sin($lat1) * sin($lat2)); 

echo 'LAT: ' . $lat2 . '<br >'; 
echo 'LNG: ' . $lon2; 
?> 

Mais il est de retour faux cordinates. Je vous remercie!

Merci beaucoup.

+0

Les 2 réponses jusqu'à présent sont l'approche générale. Mais si la précision n'est pas critique, et si la zone géographique d'intérêt est limitée - en particulier, dans une bande étroite de latitude - alors vous pouvez tromper ces fonctions. Je ne serais pas en mesure de fournir des détails sur «la largeur d'un groupe» et «combien d'imprécision». Puis, si la portée géographique est limitée, vous pouvez simplement faire une table de consultation :-) – Smandoli

+0

Si vous spécifiez plus sur votre application, vos objectifs finaux ou vos outils de travail, vous pouvez obtenir des nouvelles sur une solution spécifique (par exemple, CoreLocation pour iPhone) – Smandoli

+2

Je crée une application PHP et j'ai une table de base de données (villes) avec chaque ville de mon État (Santa Catarina). Dans ce tableau, j'ai des champs de latitude/longitude. L'utilisateur entre dans la ville et j'ai besoin de créer un carré imaginaire de 100km pour trouver des entreprises proches de lui. Désolé pour mon anglais et désolé pour le manque d'informations. Merci les gars! – proveyourselfthom

Répondre

1

MISE À JOUR:

fonctions PHP trigonométriques prennent radians comme Paramters, pas en degrés, vous devez donc utiliser deg2rad() comme paramètre:

sin(deg2rad($lat)) 

http://www.php.net/manual/en/function.deg2rad.php


réponse originale:

Un grand sujet en effet. En fonction de la précision requise (et des distances parcourues), vous devrez peut-être tenir compte du fait que la terre n'est pas une sphère parfaite, mais un géoïde (un ellipsoïde aplati).

http://en.wikipedia.org/wiki/Earth_radius

vous initieront à ce sujet.

cartographie et projection sont deux sujets que vous devriez jeter un oeil à aussi

un autre lien de wikipedia sur le sujet des distances

http://en.wikipedia.org/wiki/Geographical_distance

+1

Où est cette planète 'erath' et comment es-tu arrivée ici? –

+0

Juste obtenir une autre 200 réputation et modifier les fautes de frappe si vous les trouvez;) – sum1stolemyname

0

Sur la base de vos nouvelles informations, j'ai deux alternatives approches. (1) Google "PHP GIS". Vous trouverez des ressources intéressantes. Peut-être que l'on va travailler. (2) Si vos entreprises sont identifiées par lat-longitude, alors vous devrez utiliser (1) je pense. Mais y a-t-il une approche "bête"? Par exemple, si chaque entreprise est liée à une ville, utilisez des coordonnées cartographiques simples («K16») pour identifier les villes. Ou quelque chose d'un peu plus intelligent, mais c'est l'idée.

7

comme cela a déjà été souligné. Les fonctions trigonométriques PHP prennent les radians comme paramètres. Le degré de conversion en radians des paramètres fera l'affaire.vous voulez probablement le résultat en degrés, alors utilisez rad2deg pour le reconvertir:

<?php 
$distance = 100; 
$earthRadius = 6371; 
$lat1 = deg2rad(-26.4853239150483); 
$lon1 = deg2rad(-49.075927734375); 
$bearing = deg2rad(0); 

$lat2 = asin(sin($lat1) * cos($distance/$earthRadius) + cos($lat1) * sin($distance/$earthRadius) * cos($bearing)); 
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance/$earthRadius) * cos($lat1), cos($distance/$earthRadius) - sin($lat1) * sin($lat2)); 

echo 'LAT: ' . rad2deg($lat2) . '<br >'; 
echo 'LNG: ' . rad2deg($lon2); 
?> 
Questions connexes