Izibalo nokuhlolaIzingxenyekazi zeCRM kanye nezeDathaAmathuluzi Okukhangisa

Bala noma Buza Ibanga Lombuthano Omkhulu Phakathi Kwamaphuzu E-Latitude kanye ne-Longitude usebenzisa i-Haversine Formula (PHP, JavaScript, Java, Python, MySQL, MSSQL Examples)

Kule nyanga, bengihlela ku-PHP kanye ne-MySQL ye-GIS. Ngesikhathi ngicwaninga ngesihloko, ngaba nobunzima bokuthola izibalo zendawo ukuthola ibanga phakathi kwezindawo ezimbili, ngakho bengifuna ukwabelana ngazo lapha.

Izindiza ZaseYurophu Ngebanga Elikhulu Lombuthano

Indlela elula yokubala ibanga phakathi kwamaphoyinti amabili usebenzisa ifomula yePythagorean ukubala i-hypotenuse kanxantathu (A² + B² = C²). Lokhu kwaziwa njenge Ibanga le-Euclidean.

Leso isiqalo esithakazelisayo, kodwa asisebenzi ku-geography njengoba ibanga eliphakathi kwemigqa ye-latitude nobude amabanga alinganayo ngokwehlukana. Njengoba usondela eduze nenkabazwe, imigqa ye-latitude ihlukana kakhulu. Uma usebenzisa i-equation kanxantathu elula, ingase ilinganise ibanga ngokunembile endaweni eyodwa futhi ingalungile kwenye ngenxa yokugoba komhlaba.

Ibanga Lomjikelezo Omkhulu

Izindlela ezihamba amabanga amade emhlabeni zaziwa ngokuthi yiGreat Circle Distance. Okungukuthi… ibanga elifushane kakhulu phakathi kwamaphoyinti amabili kwindilinga liyahluka kumaphuzu akumephu eyisicaba. Hlanganisa lokho nokuthi imigqa ye-latitude ne-longitude ayilingani… futhi unesibalo esinzima.

Nayi incazelo yevidiyo emnandi yokuthi amaGreat Circles asebenza kanjani.

I-Haversine Formula

Ibanga elisebenzisa ukugoba komhlaba lifakwe kufomula ye-Haversine, esebenzisa i-trigonometry ukuze ivumele ukugoba komhlaba. Uma uthola ibanga phakathi kwezindawo ezi-2 eMhlabeni (njengoba igwababa lindiza), umugqa oqondile empeleni uyi-arc.

Lokhu kuyasebenza endizeni yendiza - ingabe uke wabheka imephu yangempela yezindiza futhi waqaphela ukuthi i-arched? Lokho kungenxa yokuthi ukundiza emgwaqeni phakathi kwamaphoyinti amabili kufushane kunokuya ngqo endaweni.

I-PHP: Bala Ibanga Phakathi kwamaphoyinti ama-2 weLatitude ne-Longitude

Nansi ifomula ye-PHP yokubala ibanga phakathi kwamaphoyinti amabili (kanye nokuguqulwa kwe-Mile vs. Kilometer) okuzungezwe ezindaweni ezimbili zedesimali.

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

Okuguquguqukayo yizi:

  • $Latitude1 – okuguquguqukayo kwelathithudi yendawo yakho yokuqala.
  • $Longitude1 – okuguquguqukayo kwe-longitude yendawo yakho yokuqala
  • $Latitude2 – okuguquguqukayo kwelathithudi yendawo yakho yesibili.
  • $Longitude2 – okuguquguqukayo kwe-longitude yendawo yakho yesibili.
  • Iyunithi ye-$ – okuzenzakalelayo miles. Lokhu kungabuyekezwa noma kudluliswe njenge amakhilomitha.

I-Java: Bala Ibanga Phakathi Kwamaphuzu angu-2 we-Latitude kanye ne-Longitude

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

Okuguquguqukayo yizi:

  • i-latitude1 – okuguquguqukayo kwelathithudi yendawo yakho yokuqala.
  • ubude1 – okuguquguqukayo kwe-longitude yendawo yakho yokuqala
  • i-latitude2 – okuguquguqukayo kwelathithudi yendawo yakho yesibili.
  • ubude2 – okuguquguqukayo kwe-longitude yendawo yakho yesibili.
  • Iyunithi – okuzenzakalelayo miles. Lokhu kungabuyekezwa noma kudluliswe njenge amakhilomitha.

I-JavaScript: Bala Ibanga Phakathi Kwamaphuzu angu-2 we-Latitude kanye ne-Longitude

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

Okuguquguqukayo yizi:

  • i-latitude1 – okuguquguqukayo kwelathithudi yendawo yakho yokuqala.
  • ubude1 – okuguquguqukayo kwe-longitude yendawo yakho yokuqala
  • i-latitude2 – okuguquguqukayo kwelathithudi yendawo yakho yesibili.
  • ubude2 – okuguquguqukayo kwe-longitude yendawo yakho yesibili.
  • Iyunithi – okuzenzakalelayo miles. Lokhu kungabuyekezwa noma kudluliswe njenge amakhilomitha.

I-Python: Bala Ibanga Phakathi Kwamaphuzu angu-2 we-Latitude kanye ne-Longitude

Nansi ifomula yePython yokubala ibanga phakathi kwamaphoyinti amabili (kanye nokuguqulwa kwe-Mile vs. Kilometer) okuzungezwe ezindaweni ezimbili zedesimali. Ikhredithi endodaneni yami, uBill Karr, i-Data Scientist VulaINSIGHTS, ngekhodi.

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)

Okuguquguqukayo yizi:

  • i-latitude1 – okuguquguqukayo kwendawo yakho yokuqala i-latitude.
  • ubude1 – okuguquguqukayo kwendawo yakho yokuqala ubude
  • i-latitude2 – okuguquguqukayo kwendawo yakho yesibili i-latitude.
  • ubude2 – okuguquguqukayo kwendawo yakho yesibili ubude.
  • Iyunithi – okuzenzakalelayo miles. Lokhu kungabuyekezwa noma kudluliswe njenge amakhilomitha.

I-MySQL: Ukubuyisa Wonke Amarekhodi Ngaphakathi Kwebanga Ngokubala Ibanga Ngamamayela Usebenzisa I-Latitude ne-Longitude

Ukusebenzisa Izinhlobo Zedatha Yendawo ku-MySQL kuyindlela esebenza kahle futhi elula yokusebenza ngedatha yendawo, okuhlanganisa ukubala amabanga phakathi kwamaphoyinti. I-MySQL isekela Izinhlobo Zedatha Yendawo njenge POINT, LINESTRING, Futhi POLYGON, kanye nemisebenzi yendawo efana ST_Distance.

Lapho usebenzisa ST_Distance sebenza ku-MySQL ngedatha yendawo emelwe njenge POINT izixhumanisi, kucabangela ukugoba kobuso boMhlaba. Imodeli eyindilinga esetshenziswa ngu ST_Distance isebenzisa ifomula ye-Haversine. Lokhu kulinganisa kulungele izinjongo ezingokoqobo kodwa kungase kuthule okunganembile okuncane kumabanga amade kakhulu.

Nansi indlela yokubala amabanga phakathi kwamaphoyinti amabili usebenzisa Izinhlobo Zedatha Yendawo:

  1. Dala Ithebula Ngohlobo Lwedatha Yendawo: Okokuqala, yakha itafula nge POINT ikholomu yokugcina amaphuzu ezindawo. Ngokwesibonelo:
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    coordinates POINT
);

Faka amaphuzu akho ezindawo kuleli thebula usebenzisa i- POINT umakhi:

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. Bala Ibanga Usebenzisa ST_Distance: Ungakwazi ukubala ibanga phakathi amaphuzu amabili usebenzisa ST_Distance umsebenzi. Nasi isibonelo sombuzo wokubala ibanga phakathi kwamaphoyinti amabili:
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;

Faka esikhundleni 1 futhi 2 ngomazisi bamaphuzu amabili ofuna ukubala ibanga eliphakathi kwawo.

  1. Result: Umbuzo uzobuyisela ibanga phakathi kwamaphoyinti amabili ngamamayela.

Ukusebenzisa Izinhlobo Zedatha Yendawo kanye ne ST_Distance umsebenzi uhlinzeka ngendlela esebenza kahle futhi enembe kakhulu yokusebenza ngedatha yendawo ku-MySQL. Iphinde yenze kube lula ukubala amabanga phakathi kwamaphoyinti, okwenza kube lula ukuphatha kanye nokubuza idatha yakho.

I-MySQL: Ukubuyisa Wonke Amarekhodi Ngaphakathi Kwebanga Ngokubala Ibanga Ngamakhilomitha Usebenzisa I-Latitude kanye ne-Longitude

Ngephutha ST_Distance ibuyisela ibanga ngamamitha, ngakho-ke udinga nje ukubuyekeza umbuzo wamakhilomitha:

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;

I-Microsoft SQL Server Geographic Distance: STDistance

Uma usebenzisa iMicrosoft SQL Server, banikela ngomsebenzi wabo, I-STDistance ngokubala ibanga phakathi kwamaphoyinti amabili kusetshenziswa uhlobo lwedatha yeJografi.

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

Ithiphu yesigqoko esiya ku-Manash Sahoo, umsunguli kanye nomakhi omkhulu wezakhiwo Ion Three.

Douglas Karr

Douglas Karr i-CMO ye VulaINSIGHTS kanye nomsunguli we Martech Zone. UDouglas usize inqwaba yeziqalo eziphumelelayo ze-MarTech, uye wasiza ekukhuthaleni okungaphezu kuka-$5 bil ekuthengeni nasekutshalweni kwe-Martech, futhi uyaqhubeka nokusiza izinkampani ekusebenziseni nasekuzenzeleni amasu azo okuthengisa nokumaketha. UDouglas uyingcweti yokuguqula idijithali eyaziwa emhlabeni wonke kanye nesikhulumi se-MarTech. UDouglas futhi ungumbhali oshicilelwe wencwadi kaDummie kanye nencwadi yobuholi bebhizinisi.

Izihloko ezihlobene Nalesi

Buyela emuva kunkinobho phezulu
Close

I-Adblock itholiwe

Martech Zone iyakwazi ukukunikeza lokhu okuqukethwe ngaphandle kwenkokhiso ngoba senza imali ngesayithi yethu ngemali engenayo yezikhangiso, izixhumanisi ezingaphansi, noxhaso. Singajabula uma ungasusa i-ad blocker yakho njengoba ubuka isayithi lethu.