@ ডেভিড জর্জের সামান্য আপগ্রেড উত্তর:
public static double distance(double lat1, double lat2, double lon1,
double lon2, double el1, double el2) {
final int R = 6371;
double latDistance = Math.toRadians(lat2 - lat1);
double lonDistance = Math.toRadians(lon2 - lon1);
double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
+ Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double distance = R * c * 1000;
double height = el1 - el2;
distance = Math.pow(distance, 2) + Math.pow(height, 2);
return Math.sqrt(distance);
}
public static double distanceBetweenLocations(Location l1, Location l2) {
if(l1.hasAltitude() && l2.hasAltitude()) {
return distance(l1.getLatitude(), l2.getLatitude(), l1.getLongitude(), l2.getLongitude(), l1.getAltitude(), l2.getAltitude());
}
return l1.distanceTo(l2);
}
দূরত্ব ফাংশনটি একই, তবে আমি তৈরি করেছি ছোট ছোট র্যাপার ফাংশন, যা 2 অবস্থানের অবজেক্ট নেয় takes এর জন্য ধন্যবাদ, আমি কেবলমাত্র দূরত্ব ফাংশনটি ব্যবহার করি যদি উভয় জায়গাতেই উচ্চতার উচ্চতা থাকে, কারণ কখনও কখনও তারা না থাকে। এবং এটি অদ্ভুত ফলাফলের দিকে নিয়ে যেতে পারে (যদি অবস্থানটি না জানলে এর উচ্চতা 0 ফিরে আসবে)। এই ক্ষেত্রে, আমি ক্লাসিক দূরত্বের ফাংশনে ফিরে যাই ।