एक अनुमानित समाधान (एक समभुज प्रक्षेपण पर आधारित), बहुत तेज़ी से (इसमें केवल 1 ट्रिगर और 1 वर्गमूल की आवश्यकता होती है)।
यदि आपके बिंदु बहुत अलग नहीं हैं, तो यह अनुमान प्रासंगिक है। यह हमेशा वास्तविक हैवरसिन दूरी की तुलना में अधिक-अनुमान लगाएगा। उदाहरण के लिए, यह वास्तविक दूरी से 0.05382% से अधिक नहीं जोड़ेगा यदि आपके दो बिंदुओं के बीच डेल्टा अक्षांश या देशांतर 4 दशमलव डिग्री से अधिक नहीं है ।
मानक सूत्र (हैवरसाइन) सटीक एक है (अर्थात, यह पृथ्वी पर देशांतर / अक्षांश के किसी भी जोड़े के लिए काम करता है) लेकिन बहुत धीमा है क्योंकि इसे 7 त्रिकोणमितीय और 2 वर्गमूल की जरूरत है। यदि आपके दो अंकों में बहुत अधिक अंतर नहीं है, और पूर्ण सटीकता सर्वोपरि नहीं है, तो आप इस अनुमानित संस्करण (इक्विटेन्गुलर) का उपयोग कर सकते हैं, जो कि बहुत तेज है क्योंकि यह केवल एक त्रिकोणमितीय और एक वर्गमूल का उपयोग करता है।
// Approximate Equirectangular -- works if (lat1,lon1) ~ (lat2,lon2)
int R = 6371; // km
double x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
double y = (lat2 - lat1);
double distance = Math.sqrt(x * x + y * y) * R;
आप इसे आगे भी अनुकूलित कर सकते हैं:
- वर्गमूल निकालना यदि आप बस दूरी की तुलना दूसरे से करते हैं (उस स्थिति में दोनों वर्ग दूरी की तुलना करें);
- यदि आप एक मास्टर बिंदु से कई अन्य लोगों की दूरी की गणना करते हैं, तो कोसाइन-फैक्टरिंग (उस स्थिति में आप मास्टर बिंदु पर केंद्रित समकालिक अप्रत्यक्ष प्रक्षेपण करते हैं, इसलिए आप सभी तुलनाओं के लिए एक बार कॉशन की गणना कर सकते हैं)।
अधिक जानकारी के लिए देखें: http://www.movable-type.co.uk/scripts/latlong.html
कई भाषाओं में हैवरसाइन सूत्र का एक अच्छा संदर्भ कार्यान्वयन है: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe