ትንታኔዎች እና ሙከራCRM እና የውሂብ መድረኮችግብይት መሣሪያዎች

የ Haversine ፎርሙላ (PHP፣ JavaScript፣ Java፣ Python፣ MySQL፣ MSSQL ምሳሌዎች) በመጠቀም በኬክሮስ እና ኬንትሮስ መካከል ያለውን ታላቅ የክበብ ርቀት አስላ ወይም ጠይቅ

በዚህ ወር፣ በPHP እና MySQL ለጂአይኤስ ፕሮግራሜን እያወጣሁ ነው። በርዕሱ ላይ ምርምር ሳደርግ, ለማግኘት ተቸግሬ ነበር ጂኦግራፊያዊ ስሌቶች በሁለት ቦታዎች መካከል ያለውን ርቀት ለማግኘት, ስለዚህ እዚህ ላካፍላቸው ፈለግሁ.

የበረራ ካርታ አውሮፓ በታላቅ የክበብ ርቀት

በሁለት ነጥቦች መካከል ያለውን ርቀት ለማስላት ቀላሉ መንገድ የሦስት ማዕዘንን መላምት (A² + B² = C the) ለማስላት የፓይታጎሪያን ቀመር በመጠቀም ነው ፡፡ ይህ በመባል ይታወቃል የዩክሊዳን ርቀት.

ያ አስደሳች ጅምር ነው፣ ግን በኬክሮስ እና ኬንትሮስ መካከል ያለው ርቀት በጂኦግራፊ ላይ አይተገበርም እኩል ርቀት አይደለም. ወደ ወገብ አካባቢ ሲቃረቡ፣ የኬክሮስ መስመሮች የበለጠ ይለያሉ። ቀላል የሶስት ጎንዮሽ እኩልታ ከተጠቀሙ፣ በመሬት ጠመዝማዛ ምክንያት ርቀቱን በአንድ ቦታ እና በሌላኛው ቦታ ላይ በትክክል ሊለካ ይችላል።

ታላቁ የክበብ ርቀት

በምድር ዙሪያ ረጅም ርቀት የተጓዙት መንገዶች ታላቁ የክበብ ርቀት በመባል ይታወቃሉ። ያም ማለት… በአንድ ሉል ላይ በሁለት ነጥቦች መካከል ያለው አጭር ርቀት በጠፍጣፋ ካርታ ላይ ካሉት ነጥቦች ይለያል። የኬክሮስ እና የኬንትሮስ መስመሮች እኩል አለመሆኑ እውነታ ጋር ያዋህዱት… እና አስቸጋሪ ስሌት አለዎት።

ታላላቅ ክበቦች እንዴት እንደሚሠሩ አስደናቂ የቪዲዮ ማብራሪያ ይኸውልዎት።

ሀቨርሲን ፎርሙላ

የምድርን ኩርባ በመጠቀም ያለው ርቀት በሃቨርሲን ፎርሙላ ውስጥ የተካተተ ነው፣ እሱም ትሪጎኖሜትሪ በመጠቀም የምድርን ጥምዝ ለማድረግ። በምድር ላይ በ2 ቦታዎች መካከል ያለውን ርቀት (ቁራው ሲበር) መካከል ያለውን ርቀት ሲያገኙ፣ ቀጥተኛ መስመር ቅስት ነው።

ይህ በአየር በረራ ላይ ተፈፃሚነት ይኖረዋል - ትክክለኛውን የበረራ ካርታ ተመልክተው ቅስት መያዛቸውን አስተውለዋል? ምክንያቱም በሁለት ነጥቦች መካከል ባለው ቅስት ውስጥ መብረር በቀጥታ ከቦታው አጭር ስለሆነ ነው።

ፒኤችፒ-በ 2 ኬክሮስ እና ኬንትሮስ መካከል ያለውን ርቀት አስላ

በሁለት አስርዮሽ ቦታዎች (ከሚል vs. ኪሎሜትር ልወጣ ጋር) በሁለት ነጥቦች መካከል ያለውን ርቀት ለማስላት የ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)); 
}

ተለዋዋጮቹ፡-

  • $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 - ለሁለተኛው አካባቢዎ ኬንትሮስ ተለዋዋጭ።
  • መለኪያ - ነባሪው ማንነት ማይሎች. ይህ እንደ ሊዘመን ወይም ሊታለፍ ይችላል። ኪ.ሜ..

Python፡ በ 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 - ለመጀመሪያው ቦታዎ ተለዋዋጭ ኬክሮስ.
  • ኬንትሮስ1 - ለመጀመሪያው ቦታዎ ተለዋዋጭ ኬንትሮስ
  • ኬክሮስ 2 - ለሁለተኛ ቦታዎ ተለዋዋጭ ኬክሮስ.
  • ኬንትሮስ2 - ለሁለተኛ ቦታዎ ተለዋዋጭ ኬንትሮስ.
  • መለኪያ - ነባሪው ማንነት ማይሎች. ይህ እንደ ሊዘመን ወይም ሊታለፍ ይችላል። ኪ.ሜ..

MySQL፡ ኬክሮስ እና ኬንትሮስን በመጠቀም ማይልስ ያለውን ርቀት በማስላት ሁሉንም መዝገቦች በክልል ውስጥ ሰርስሮ ማውጣት

በ MySQL ውስጥ የመገኛ ቦታ ውሂብ ዓይነቶችን መጠቀም በነጥቦች መካከል ያለውን ርቀት ማስላትን ጨምሮ ከጂኦግራፊያዊ መረጃ ጋር ለመስራት የበለጠ ቀልጣፋ እና ምቹ መንገድ ነው። MySQL እንደ የመገኛ ቦታ ውሂብ አይነቶችን ይደግፋል POINT, LINESTRING, እና POLYGONእንደ የቦታ ተግባራት ጋር ST_Distance.

ሲጠቀሙ ST_Distance ተግባር በ MySQL ውስጥ እንደ መልክዓ ምድራዊ ውሂብ ይወከላል POINT ያስተባብራል, የምድርን ገጽ መዞር ግምት ውስጥ ያስገባል. ጥቅም ላይ የዋለው ሉላዊ ሞዴል ST_Distance የሃቨርሲን ቀመር ይጠቀማል። ይህ ግምታዊ አቀራረብ ለአብዛኛዎቹ ተግባራዊ ዓላማዎች ተስማሚ ነው ነገር ግን በጣም ረጅም ርቀት ትንሽ ስህተቶችን ሊያስተዋውቅ ይችላል።

የመገኛ ቦታ ውሂብ አይነቶችን በመጠቀም በሁለት ነጥቦች መካከል ያለውን ርቀት እንዴት ማስላት እንደሚችሉ እነሆ፡-

  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;

ተካ 12 በሁለቱ ነጥቦች መታወቂያዎች መካከል ያለውን ርቀት ለማስላት በሚፈልጉት.

  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;

የማይክሮሶፍት SQL አገልጋይ ጂኦግራፊያዊ ርቀት፡ STDistance

የማይክሮሶፍት 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 CMO ነው። ግንዛቤዎችን ይክፈቱ እና መስራች Martech Zone. ዳግላስ በደርዘኖች የሚቆጠሩ ስኬታማ የማርቴክ ጅምሮችን ረድቷል፣ በማርቴክ ግዥዎች እና ኢንቨስትመንቶች ከ$5 ቢሊዮን በላይ ተገቢውን ትጋት በማግኘቱ እና ኩባንያዎች የሽያጭ እና የግብይት ስልቶቻቸውን እንዲተገብሩ እና በራስ ሰር እንዲሰሩ ማገዙን ቀጥሏል። ዳግላስ በአለም አቀፍ ደረጃ እውቅና ያለው ዲጂታል ለውጥ እና የማርቴክ ባለሙያ እና ተናጋሪ ነው። ዳግላስ የዱሚ መመሪያ እና የንግድ ሥራ አመራር መጽሐፍ የታተመ ደራሲ ነው።

ተዛማጅ ርዕሶች

ወደ ላይኛው አዝራር ተመለስ
ገጠመ

ማስታወቂያ እገዳ ተገኝቷል

Martech Zone ይህንን ይዘት ያለ ምንም ወጪ ሊያቀርብልዎ ይችላል ምክንያቱም ገጻችንን በማስታወቂያ ገቢ፣ በተዛማጅ ማገናኛ እና በስፖንሰርነት ገቢ ስለምንፈጥር ነው። ጣቢያችንን ሲመለከቱ የማስታወቂያ ማገጃውን ቢያነሱት እናደንቃለን።