विश्लेषण और परीक्षणसीआरएम और डेटा प्लेटफार्मविपणन के साधन

हैवरसाइन फॉर्मूला (PHP, JavaScript, Java, Python, MySQL, MSSQL उदाहरण) का उपयोग करके अक्षांश और देशांतर के बिंदुओं के बीच ग्रेट सर्किल दूरी की गणना या क्वेरी करें।

इस महीने, मैं जीआईएस के लिए PHP और MySQL में प्रोग्रामिंग कर रहा हूं। विषय पर शोध करते समय, मुझे खोजने में कठिनाई हुई भौगोलिक गणना दो स्थानों के बीच की दूरी जानने के लिए, इसलिए मैं उन्हें यहां साझा करना चाहता था।

फ्लाइट मैप यूरोप ग्रेट सर्कल दूरी के साथ

दो बिंदुओं के बीच की दूरी की गणना करने का सरल तरीका पाइथागोरसियन सूत्र का उपयोग करके त्रिकोण (ए of + बी² = सी²) के कर्ण की गणना करना है। इस के रूप में जाना जाता है यूक्लिडियन दूरी.

यह एक दिलचस्प शुरुआत है, लेकिन यह भूगोल पर लागू नहीं होता क्योंकि अक्षांश और देशांतर रेखाओं के बीच की दूरी होती है एक दूसरे से समान दूरी नहीं. जैसे-जैसे आप भूमध्य रेखा के करीब आते हैं, अक्षांश रेखाएँ और दूर होती जाती हैं। यदि आप एक साधारण त्रिभुज समीकरण का उपयोग करते हैं, तो यह पृथ्वी की वक्रता के कारण एक स्थान पर दूरी को सटीक और दूसरे में गलत माप सकता है।

महान सर्कल दूरी

पृथ्वी के चारों ओर लंबी दूरी तय करने वाले मार्गों को ग्रेट सर्कल डिस्टेंस के रूप में जाना जाता है। अर्थात... एक गोले पर दो बिंदुओं के बीच की सबसे छोटी दूरी समतल मानचित्र के बिंदुओं से भिन्न होती है। इसे इस तथ्य के साथ जोड़ लें कि अक्षांश और देशांतर रेखाएँ समान दूरी पर नहीं हैं... और आपके पास एक कठिन गणना है।

यहाँ एक शानदार वीडियो विवरण है कि ग्रेट सर्किल कैसे काम करते हैं।

द हॅवरसाइन फॉर्मूला

पृथ्वी की वक्रता का उपयोग करते हुए दूरी को हैवरसाइन सूत्र में शामिल किया गया है, जो पृथ्वी की वक्रता की अनुमति देने के लिए त्रिकोणमिति का उपयोग करता है। जब आप पृथ्वी पर दो स्थानों के बीच की दूरी ज्ञात कर रहे हैं (जैसे कौवा उड़ता है), तो एक सीधी रेखा वास्तव में एक चाप होती है।

यह हवाई उड़ान में लागू होता है - क्या आपने कभी उड़ानों के वास्तविक मानचित्र को देखा है और ध्यान दिया है कि वे धनुषाकार हैं? ऐसा इसलिए है क्योंकि दो बिंदुओं के बीच एक आर्च में उड़ना सीधे स्थान से छोटा होता है।

PHP: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें

दो दशमलव स्थानों तक पूर्णांकित दो बिंदुओं (माइल बनाम किलोमीटर रूपांतरण के साथ) के बीच की दूरी की गणना के लिए यहां PHP सूत्र है।

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

चर हैं:

  • $अक्षांश1 - आपके पहले स्थान के अक्षांश के लिए एक चर।
  • $देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
  • $अक्षांश2 - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
  • $देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
  • $यूनिट - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.

जावा: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें

public static double getDistanceBetweenPointsNew(double latitude1, double longitude1, double latitude2, double longitude2, String unit) {
    double theta = longitude1 - longitude2;
    double distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit.equals("miles")) {
        return Math.round(distance, 2);
    } else if (unit.equals("kilometers")) {
        return Math.round(distance * 1.609344, 2);
    } else {
        return 0;
    }
}

चर हैं:

  • अक्षांश २३ - आपके पहले स्थान के अक्षांश के लिए एक चर।
  • देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
  • अक्षांश २३ - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
  • देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
  • इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.

जावास्क्रिप्ट: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें

function getDistanceBetweenPoints(latitude1, longitude1, latitude2, longitude2, unit = 'miles') {
    let theta = longitude1 - longitude2;
    let distance = 60 * 1.1515 * (180/Math.PI) * Math.acos(
        Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + 
        Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180))
    );
    if (unit == 'miles') {
        return Math.round(distance, 2);
    } else if (unit == 'kilometers') {
        return Math.round(distance * 1.609344, 2);
    }
}

चर हैं:

  • अक्षांश २३ - आपके पहले स्थान के अक्षांश के लिए एक चर।
  • देशांतर1 - आपके पहले स्थान के देशांतर के लिए एक चर
  • अक्षांश २३ - आपके दूसरे स्थान के अक्षांश के लिए एक चर।
  • देशांतर2 - आपके दूसरे स्थान के देशांतर के लिए एक चर।
  • इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.

पायथन: अक्षांश और देशांतर के 2 बिंदुओं के बीच की दूरी की गणना करें

यहां दो बिंदुओं के बीच की दूरी (माइल बनाम किलोमीटर रूपांतरण के साथ) को दो दशमलव स्थानों तक गणना करने के लिए पायथन फॉर्मूला दिया गया है। इसका श्रेय मेरे बेटे बिल कैर को जाता है, जो एक डेटा वैज्ञानिक है खुली अंतर्दृष्टि, कोड के लिए।

from numpy import sin, cos, arccos, pi, round

def rad2deg(radians):
    degrees = radians * 180 / pi
    return degrees

def deg2rad(degrees):
    radians = degrees * pi / 180
    return radians

def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
    
    theta = longitude1 - longitude2
    
    distance = 60 * 1.1515 * rad2deg(
        arccos(
            (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + 
            (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
        )
    )
    
    if unit == 'miles':
        return round(distance, 2)
    if unit == 'kilometers':
        return round(distance * 1.609344, 2)

चर हैं:

  • अक्षांश २३ - आपके पहले स्थान के लिए एक चर अक्षांश.
  • देशांतर1 - आपके पहले स्थान के लिए एक चर देशान्तर
  • अक्षांश २३ - आपके दूसरे स्थान के लिए एक चर अक्षांश.
  • देशांतर2 - आपके दूसरे स्थान के लिए एक चर देशान्तर.
  • इकाई - डिफ़ॉल्ट जा रहा है मील. इसे अपडेट या पास किया जा सकता है किलोमीटर की दूरी पर.

MySQL: अक्षांश और देशांतर का उपयोग करके मीलों में दूरी की गणना करके एक सीमा के भीतर सभी रिकॉर्ड प्राप्त करना

MySQL में स्थानिक डेटा प्रकारों का उपयोग भौगोलिक डेटा के साथ काम करने का एक अधिक कुशल और सुविधाजनक तरीका है, जिसमें बिंदुओं के बीच की दूरी की गणना भी शामिल है। MySQL स्थानिक डेटा प्रकारों का समर्थन करता है जैसे POINT, LINESTRING, तथा POLYGON, जैसे स्थानिक कार्यों के साथ ST_Distance.

जब आप उपयोग करते हैं ST_Distance भौगोलिक डेटा के साथ MySQL में फ़ंक्शन को इस रूप में दर्शाया गया है POINT निर्देशांक, यह पृथ्वी की सतह की वक्रता को ध्यान में रखता है। द्वारा प्रयुक्त गोलाकार मॉडल ST_Distance हैवरसाइन सूत्र का उपयोग करता है। यह सन्निकटन अधिकांश व्यावहारिक उद्देश्यों के लिए उपयुक्त है, लेकिन बहुत लंबी दूरी के लिए इसमें थोड़ी अशुद्धियाँ हो सकती हैं।

यहां बताया गया है कि आप स्थानिक डेटा प्रकारों का उपयोग करके दो बिंदुओं के बीच की दूरी की गणना कैसे कर सकते हैं:

  1. स्थानिक डेटा प्रकार के साथ एक तालिका बनाएं: सबसे पहले, a के साथ एक तालिका बनाएं POINT भौगोलिक बिंदुओं को संग्रहीत करने के लिए कॉलम। उदाहरण के लिए:
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    coordinates POINT
);

का उपयोग करके इस तालिका में अपने भौगोलिक बिंदु डालें POINT निर्माता:

INSERT INTO locations (name, coordinates)
VALUES
    ('Point A', POINT(40.7128, -74.0060)), -- New York City
    ('Point B', POINT(34.0522, -118.2437)); -- Los Angeles
  1. ST_Distance का उपयोग करके दूरी की गणना करें: आप इसका उपयोग करके दो बिंदुओं के बीच की दूरी की गणना कर सकते हैं ST_Distance समारोह। यहां दो बिंदुओं के बीच की दूरी की गणना करने के लिए एक उदाहरण क्वेरी दी गई है:
SELECT
    id1,
    id2,
    (ST_Distance(coordinates1, coordinates2) / 1609.344) AS distance_in_miles
FROM (
    SELECT
        l1.id AS id1,
        l2.id AS id2,
        l1.coordinates AS coordinates1,
        l2.coordinates AS coordinates2
    FROM
        locations l1,
        locations l2
    WHERE
        l1.id = 1 AND l2.id = 2
) AS distances;

बदलें 1 और 2 उन दो बिंदुओं की आईडी के साथ जिनके बीच की दूरी की गणना आप करना चाहते हैं।

  1. परिणाम: क्वेरी दो बिंदुओं के बीच की दूरी मील में बताएगी।

स्थानिक डेटा प्रकार और का उपयोग करना ST_Distance फ़ंक्शन MySQL में भौगोलिक डेटा के साथ काम करने का अधिक कुशल और सटीक तरीका प्रदान करता है। यह बिंदुओं के बीच की दूरी की गणना को भी सरल बनाता है, जिससे आपके डेटा को प्रबंधित करना और क्वेरी करना आसान हो जाता है।

MySQL: अक्षांश और देशांतर का उपयोग करके किलोमीटर में दूरी की गणना करके एक सीमा के भीतर सभी रिकॉर्ड प्राप्त करना

डिफ़ॉल्ट रूप से ST_Distance दूरी को मीटर में लौटाता है, इसलिए आपको बस किलोमीटर के लिए क्वेरी को अपडेट करना होगा:

SELECT
    id1,
    id2,
    (ST_Distance(coordinates1, coordinates2) / 1000) AS distance_in_kilometers
FROM (
    SELECT
        l1.id AS id1,
        l2.id AS id2,
        l1.coordinates AS coordinates1,
        l2.coordinates AS coordinates2
    FROM
        locations l1,
        locations l2
    WHERE
        l1.id = 1 AND l2.id = 2
) AS distances;

Microsoft SQL सर्वर भौगोलिक दूरी: STDistance

यदि आप Microsoft SQL सर्वर का उपयोग कर रहे हैं, तो वे अपना स्वयं का कार्य प्रदान करते हैं, एसटीडीडिस्टेंस भूगोल डेटा प्रकार का उपयोग करके दो बिंदुओं के बीच की दूरी की गणना के लिए।

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);  
SELECT @g.STDistance(@h);  

के संस्थापक और वरिष्ठ वास्तुकार मानश साहू को शुभकामनाएँ आयन तीन.

Douglas Karr

Douglas Karr के सीएमओ हैं खुली अंतर्दृष्टि और के संस्थापक Martech Zone. डगलस ने दर्जनों सफल मार्टेक स्टार्टअप्स की मदद की है, मार्टेक अधिग्रहणों और निवेशों में $5 बिलियन से अधिक की उचित परिश्रम में सहायता की है, और कंपनियों को उनकी बिक्री और विपणन रणनीतियों को लागू करने और स्वचालित करने में सहायता करना जारी रखा है। डगलस एक अंतरराष्ट्रीय स्तर पर मान्यता प्राप्त डिजिटल परिवर्तन और मार्टेक विशेषज्ञ और वक्ता हैं। डगलस डमी गाइड और बिजनेस लीडरशिप पुस्तक के प्रकाशित लेखक भी हैं।

संबंधित आलेख

शीर्ष पर वापस करने के लिए बटन
समापन

पता लगाया गया

Martech Zone आपको यह सामग्री बिना किसी लागत के प्रदान करने में सक्षम है क्योंकि हम विज्ञापन राजस्व, संबद्ध लिंक और प्रायोजन के माध्यम से अपनी साइट से कमाई करते हैं। यदि आप हमारी साइट देखते समय अपना विज्ञापन अवरोधक हटा देंगे तो हम आभारी होंगे।