تجزیات اور جانچCRM اور ڈیٹا پلیٹ فارمزمارکیٹنگ کے اوزار

Haversine فارمولہ (PHP, JavaScript, Java, Python, MySQL, MSSQL مثالیں) کا استعمال کرتے ہوئے عرض بلد اور طول البلد کے درمیان عظیم دائرے کے فاصلے کا حساب لگائیں یا پوچھیں

اس مہینے، میں GIS کے لیے PHP اور MySQL میں پروگرامنگ کر رہا ہوں۔ موضوع پر تحقیق کرتے ہوئے، مجھے تلاش کرنے میں دشواری ہوئی۔ جغرافیائی حسابات دو مقامات کے درمیان فاصلہ معلوم کرنے کے لیے، اس لیے میں انہیں یہاں شیئر کرنا چاہتا تھا۔

فلائٹ میپ یورپ جس میں سرکل کا فاصلہ ہے

مثلث (A² + B² = C²) کا تخمینہ لگانے کے لئے پائیتاگورین فارمولے کا استعمال کرتے ہوئے دو نکات کے درمیان فاصلے کا حساب لگانے کا آسان طریقہ ہے۔ یہ کے طور پر جانا جاتا ہے یکلیڈیائی دوری.

یہ ایک دلچسپ آغاز ہے، لیکن یہ جغرافیہ پر لاگو نہیں ہوتا ہے کیونکہ عرض البلد اور عرض البلد کی لائنوں کے درمیان فاصلہ ہے مساوی فاصلے کے علاوہ نہیں۔. جیسے جیسے آپ خط استوا کے قریب آتے ہیں، عرض البلد کی لکیریں مزید الگ ہوتی جاتی ہیں۔ اگر آپ ایک سادہ مثلث مساوات کا استعمال کرتے ہیں، تو یہ زمین کے گھماؤ کی وجہ سے ایک جگہ پر فاصلے کی درستگی اور دوسری جگہ غلط ہو سکتی ہے۔

زبردست سرکل کا فاصلہ

زمین کے گرد طویل فاصلہ طے کرنے والے راستوں کو عظیم دائرہ فاصلہ کہا جاتا ہے۔ یعنی… ایک کرہ پر دو پوائنٹس کے درمیان کم ترین فاصلہ فلیٹ نقشے کے پوائنٹس سے مختلف ہے۔ اسے اس حقیقت کے ساتھ جوڑیں کہ عرض البلد اور طول البلد کی لکیریں مساوی نہیں ہیں… اور آپ کو ایک مشکل حساب ملا ہے۔

یہاں ایک عمدہ ویڈیو وضاحت ہے کہ عظیم حلقے کیسے کام کرتے ہیں۔

ہیورسین فارمولا

زمین کے گھماؤ کا استعمال کرتے ہوئے فاصلہ Haversine فارمولے میں شامل کیا گیا ہے، جو کہ زمین کے گھماؤ کی اجازت دینے کے لیے مثلثیات کا استعمال کرتا ہے۔ جب آپ زمین پر 2 مقامات کے درمیان فاصلہ تلاش کر رہے ہیں (جیسے کوا اڑتا ہے)، ایک سیدھی لکیر دراصل ایک قوس ہے۔

یہ ہوائی پرواز میں لاگو ہوتا ہے - کیا آپ نے کبھی پروازوں کے اصل نقشے کو دیکھا ہے اور دیکھا ہے کہ وہ محراب والے ہیں؟ اس کی وجہ یہ ہے کہ دو پوائنٹس کے درمیان محراب میں اڑنا براہ راست مقام سے کم ہے۔

پی ایچ پی: طول بلد اور عرض البلد کے 2 پوائنٹس کے درمیان فاصلے کا حساب لگائیں

یہاں دو پوائنٹس کے درمیان فاصلہ شمار کرنے کا پی ایچ پی فارمولا ہے (مائل بمقابلہ کلومیٹر کی تبدیلی کے ساتھ) دو اعشاریہ جگہوں پر گول کیا گیا ہے۔

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)); 
}

متغیرات یہ ہیں:

  • $Latitude1 - آپ کے پہلے مقام کے عرض بلد کے لیے ایک متغیر۔
  • $Longitude1 - آپ کے پہلے مقام کے طول البلد کے لیے ایک متغیر
  • $Latitude2 - آپ کے دوسرے مقام کے عرض بلد کے لیے ایک متغیر۔
  • $Longitude2 - آپ کے دوسرے مقام کے طول البلد کے لیے ایک متغیر۔
  • $یونٹ - پہلے سے طے شدہ وجود میل. اس کو اپ ڈیٹ یا پاس کیا جا سکتا ہے۔ کلومیٹر.

جاوا: عرض البلد اور عرض البلد کے 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۔ - آپ کے پہلے مقام کے عرض بلد کے لیے ایک متغیر۔
  • طول البلد 1 - آپ کے پہلے مقام کے طول البلد کے لیے ایک متغیر
  • عرض البلد 2۔ - آپ کے دوسرے مقام کے عرض بلد کے لیے ایک متغیر۔
  • طول البلد 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۔ - آپ کے پہلے مقام کے عرض بلد کے لیے ایک متغیر۔
  • طول البلد 1 - آپ کے پہلے مقام کے طول البلد کے لیے ایک متغیر
  • عرض البلد 2۔ - آپ کے دوسرے مقام کے عرض بلد کے لیے ایک متغیر۔
  • طول البلد 2 - آپ کے دوسرے مقام کے طول البلد کے لیے ایک متغیر۔
  • یونٹ - پہلے سے طے شدہ وجود میل. اس کو اپ ڈیٹ یا پاس کیا جا سکتا ہے۔ کلومیٹر.

ازگر: عرض البلد اور طول البلد کے 2 پوائنٹس کے درمیان فاصلے کا حساب لگائیں۔

دو پوائنٹس کے درمیان فاصلہ (مائل بمقابلہ کلومیٹر کی تبدیلی کے ساتھ) کو دو اعشاریہ جگہوں پر گول کرنے کے لیے Python فارمولہ یہ ہے۔ میرے بیٹے بل کر کو کریڈٹ، جو کہ ڈیٹا سائنسدان ہے۔ OpenINSIGHTS، کوڈ کے لیے۔

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۔ - آپ کے پہلے مقام کے لیے ایک متغیر طول بلد.
  • طول البلد 1 - آپ کے پہلے مقام کے لیے ایک متغیر طول البلد
  • عرض البلد 2۔ - آپ کے دوسرے مقام کے لیے ایک متغیر طول بلد.
  • طول البلد 2 - آپ کے دوسرے مقام کے لیے ایک متغیر طول البلد.
  • یونٹ - پہلے سے طے شدہ وجود میل. اس کو اپ ڈیٹ یا پاس کیا جا سکتا ہے۔ کلومیٹر.

MySQL: عرض البلد اور طول البلد کا استعمال کرتے ہوئے میلوں میں فاصلے کا حساب لگا کر ایک رینج کے اندر تمام ریکارڈز کو بازیافت کرنا

MySQL میں Spatial Data Types کا استعمال جغرافیائی ڈیٹا کے ساتھ کام کرنے کا ایک زیادہ موثر اور آسان طریقہ ہے، بشمول پوائنٹس کے درمیان فاصلے کا حساب لگانا۔ MySQL مقامی ڈیٹا کی اقسام کو سپورٹ کرتا ہے جیسے POINT, LINESTRING، اور POLYGON، جیسے مقامی افعال کے ساتھ ST_Distance.

جب آپ استعمال کرتے ہیں ST_Distance MySQL میں فنکشن جس کی نمائندگی جغرافیائی ڈیٹا کے طور پر کی گئی ہے۔ POINT کوآرڈینیٹ، یہ زمین کی سطح کے گھماؤ کو مدنظر رکھتا ہے۔ کروی ماڈل جس کے ذریعے استعمال کیا جاتا ہے۔ ST_Distance Haversine فارمولہ استعمال کرتا ہے۔ یہ تخمینہ زیادہ تر عملی مقاصد کے لیے موزوں ہے لیکن بہت لمبی دوری کے لیے معمولی غلطیاں پیش کر سکتا ہے۔

یہاں یہ ہے کہ آپ مقامی ڈیٹا کی اقسام کا استعمال کرتے ہوئے دو پوائنٹس کے درمیان فاصلے کا حساب کیسے لگا سکتے ہیں:

  1. مقامی ڈیٹا کی قسم کے ساتھ ایک ٹیبل بنائیں: سب سے پہلے، ایک کے ساتھ ایک میز بنائیں 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 ان دو پوائنٹس کی IDs کے ساتھ جن کے درمیان آپ فاصلے کا حساب لگانا چاہتے ہیں۔

  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

اگر آپ مائیکروسافٹ ایس کیو ایل سرور استعمال کر رہے ہیں، تو وہ اپنا فنکشن پیش کرتے ہیں، STD فاصلہ جغرافیہ ڈیٹا کی قسم کا استعمال کرتے ہوئے دو پوائنٹس کے درمیان فاصلے کا حساب لگانے کے لیے۔

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 کا سی ایم او ہے۔ OpenINSIGHTS اور کے بانی Martech Zone. Douglas نے درجنوں کامیاب MarTech اسٹارٹ اپس کی مدد کی ہے، Martech کے حصول اور سرمایہ کاری میں $5 بلین سے زیادہ کی مستعدی میں مدد کی ہے، اور کمپنیوں کو ان کی سیلز اور مارکیٹنگ کی حکمت عملیوں کو نافذ کرنے اور خودکار کرنے میں مدد کرنا جاری رکھے ہوئے ہے۔ ڈگلس ایک بین الاقوامی سطح پر تسلیم شدہ ڈیجیٹل تبدیلی اور MarTech ماہر اور اسپیکر ہے۔ ڈگلس ڈمی کی گائیڈ اور بزنس لیڈر شپ کی کتاب کے شائع شدہ مصنف بھی ہیں۔

متعلقہ مضامین

واپس اوپر بٹن
کلوز

ایڈ بلاک کا پتہ چلا

Martech Zone آپ کو یہ مواد بغیر کسی قیمت کے فراہم کرنے کے قابل ہے کیونکہ ہم اپنی سائٹ کو اشتھاراتی آمدنی، ملحقہ لنکس اور اسپانسرشپ کے ذریعے منیٹائز کرتے ہیں۔ اگر آپ ہماری سائٹ کو دیکھتے ہی اپنے ایڈ بلاکر کو ہٹا دیں تو ہم اس کی تعریف کریں گے۔