Cela ressemble à C#.
D'abord, vous devez définir toRadians
et toDegrees
:
double toRadians(double degrees) {
double sign = Math.Sign(degrees);
while(Math.Abs(degrees) > 360) {
degrees -= sign * 360;
}
return Math.PI * degrees/180;
}
double toDegrees(double radians) {
double sign = Math.Sign(radians);
while(Math.Abs(radians) > 2 * Math.PI) {
radians -= sign * 2 * Math.PI;
}
return 180 * radians/Math.PI;
}
Ensuite, pour utiliser les fonctions trigonométriques, vous devez utiliser Math.Sin
, Math.Cos
, etc.
double dist = Math.Sin(lat1) * Math.Sin(lat2)
+ Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(theta);
et
dist = toDegrees(Math.Acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;
Commentaires:
public static double distance (double lat1, double lon1, double lat2, double lon2) {
double lat1 = Convert.ToDouble(latitude);
double lon1 = Convert.ToDouble(longitude);
double lat2 = Convert.ToDouble(destlat);
double lon2 = Convert.ToDouble(destlon);
Qu'est ce que c'est? Où sont latitude
, longitude
, destlat
et destlon
définis? En outre, il semble que vous ayez lat1
, lon1
lat2
et lon2
en tant que paramètres de cette méthode, de sorte que vous ne pouvez pas définir ici des locals avec le même nom.
double theta = toRadians(lon1-lon2);
lat1 = toRadians(lat1);
lon1 = toRadians(lon1);
lat2 = toRadians(lat2);
lon2 = toRadians(lon2);
Ceci est de mauvais style. Si lat1
représente une latitude en degrés, il est préférable de calculer une valeur de lat1
comme radians équivalent ceci:
double lat1Radians = toRadians(lat1);
Par conséquent, remplacez ci-dessus avec:
double theta = toRadians(lon1-lon2);
double lat1Radians = toRadians(lat1);
double lon1Radians = toRadians(lon1);
double lat2Radians = toRadians(lat2);
double lon2Radians = toRadians(lon2);
Enfin:
double dist = sin(lat1) * sin(lat2)
+ cos(lat1) * cos(lat2) * cos(theta);
dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;
C'est aussi un mauvais style. La première formule et la deuxième formule ne peuvent pas représenter la distance que vous essayez de calculer. Vous devez affecter le résultat de la première formule à une variable avec un nom plus significatif.Dans le pire des cas, au moins procédez comme suit:
double temp = Math.Sin(lat1) * Math.Sin(lat2)
+ Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(theta);
double dist = toDegrees(Math.Acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;
return dist;
Il utilise probablement C#. – SLaks
Pourquoi appelez-vous 'Convert.ToDouble' sur un' double'? – SLaks
@SLaks: D'accord, j'ai juste remarqué le 'Convert.ToDouble'. – jason