Analytics & TestingCRM û Platformên DaneyêAmûrên Kirrûbirrê

Bi Bikaranîna Formula Haversine (Nimûneyên PHP, JavaScript, Java, Python, MySQL, MSSQL) Dûrahiya çembera Mezin di navbera Xalên Latahî û Drêjiyê de Bihejmêre an Bipirse

Di vê mehê de ez pir hindik bername dimeşînim PHP û MySQL bi rêzgirtina ji GIS. Li dora torê digeriyam, bi rastî min zehmetî kişand ku ez hin ji wan bibînim Hesabên erdnigarî ji bo dîtina mesafeya navbera du cihan lewma min xwest ez wan li vir parve bikim.

Nexşeya Firînê Ewrûpa Bi Dûr Çerxa Mezin

Awayê hêsan ê hesabkirina mesafeya di navbera du xalan de karanîna formula Pythagorean e ku hîpotenûsa sêgoşeyê (A² + B² = C²) hesab dike. Ev wekî tê zanîn Mesafeya Euklîdiyan.

Ew destpêkek balkêş e lê ew ji bo Erdnîgariyê derbas nabe ji ber ku dûrahiya di navbera xêzên firehî û dirêjahî de ji hev dûr ne wekhev in. Her ku hûn nêzikî ekvatorê dibin, xêzên firehiyê ji hev dûr dikevin. Ger hûn hevokek sêgoşeya sade bikar bînin, dibe ku ew ji ber kulbûna Dinyayê dûrbûnê li cihekî rast û li cîhek din xelet bipîve.

Dûrra Mezin a Mezin

Rêyên ku dûr û dirêj li dora Erdê geriyan wekî Dûrahiya Çerkerê Mezin têne zanîn. Yanî… dûrahiya herî kurt a di navbera du xalên li ser qadekê de ji xalên li ser nexşeyek davî cûda dibe. Vê yekê bi rastiya ku xêzên dirêjahî û dirêjahî ji hev dûr nagirin re bikin yek… û we hesabek dijwar heye.

Li vir vegotinek vîdyoyek fantastîk a karanîna Çerxên Mezin heye.

Formula Haversine

Dûrahiya ku kêşeya Dinyayê bi kar tîne di formula Haversine de cih digire, ku trîgonometryê bikar tîne da ku rê li ber ziravbûna Erdê bide. Dema ku hûn dûrahiya di navbera 2 cihên li ser rûyê erdê de bibînin (wek qijik difire), xetek rast bi rastî kevanek e.

Ev di firîna hewayê de derbasdar e - we qet li nexşeya rastîn a firînan nihêrî û ferq kir ku ew kemer in? Ji ber vê yekê ye ku firîna di kemerek di navbera du xalan de ji rasterast ji cîhê kurttir e.

PHP: Dûrahiya Di Navbera 2 Pûanên Latitude û Dirêjbûnê de hesab bikin

Li vir formula PHP-ê ye ji bo hesabkirina dûrahiya di navbera du xalan de (ligel veguheztina Mile beramberî Kîlometerê) ku bi du deh dehsalan ve hatî dorpêç kirin.

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

Guherbar ev in:

  • $Latitude1 - guherbarek ji bo firehiya cîhê weya yekem.
  • $Longitude1 - guherbarek ji bo dirêjahiya cîhê weya yekem
  • $Latitude2 - guherbarek ji bo firehiya cîhê weya duyemîn.
  • $Longitude2 - guherbarek ji bo dirêjahiya cîhê weya duyemîn.
  • $ unit - hebûna xwerû hezaran. Ev dikare were nûve kirin an wekî derbas bibe kîlometre.

Java: Dûrahiya Di Navbera 2 Xalên Dirêjahî û Dirêjiyê Bihesibîne

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

Guherbar ev in:

  • latitude1 - guherbarek ji bo firehiya cîhê weya yekem.
  • dirêjahî1 - guherbarek ji bo dirêjahiya cîhê weya yekem
  • latitude2 - guherbarek ji bo firehiya cîhê weya duyemîn.
  • dirêjahî2 - guherbarek ji bo dirêjahiya cîhê weya duyemîn.
  • yekbûn - hebûna xwerû hezaran. Ev dikare were nûve kirin an wekî derbas bibe kîlometre.

Javascript: Dûrahiya Di Navbera 2 Xalên Latahî û Drêjiyê de Bihejmêre

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

Guherbar ev in:

  • latitude1 - guherbarek ji bo firehiya cîhê weya yekem.
  • dirêjahî1 - guherbarek ji bo dirêjahiya cîhê weya yekem
  • latitude2 - guherbarek ji bo firehiya cîhê weya duyemîn.
  • dirêjahî2 - guherbarek ji bo dirêjahiya cîhê weya duyemîn.
  • yekbûn - hebûna xwerû hezaran. Ev dikare were nûve kirin an wekî derbas bibe kîlometre.

Python: Dûrahiya Di Navbera 2 Xalên Dirêjahî û Dirêjiyê Bihesibîne

Lêbelê, li vir formula Python-ê ye ji bo hesabkirina dûrahiya di navbera du xalan de (ligel veguheztina Mile û Kîlometre) ku bi du deh dehsalan ve hatî dorpêç kirin. Krediya kurê min, Bill Karr ku ji bo Zanyarê Daneyê ye OpenINSIGHTS, ji bo kodê.

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)

Guherbar ev in:

  • latitude1 - guherbarek ji bo cîhê weya yekem firehî.
  • dirêjahî1 - guherbarek ji bo cîhê weya yekem dirêjî
  • latitude2 - guherbarek ji bo cîhê weya duyemîn firehî.
  • dirêjahî2 - guherbarek ji bo cîhê weya duyemîn dirêjî.
  • yekbûn - hebûna xwerû hezaran. Ev dikare were nûve kirin an wekî derbas bibe kîlometre.

MySQL: Bi Hesabkirina Dûrahiya Di Mîlan de Bi Bikaranîna Latahî û Drêjahî ve Hemî Qeydên Di nav Rêzeyekê de Vedigire

Di heman demê de gengaz e ku meriv SQL bikar bîne da ku hemî tomar di nav dûrek taybetî de hesab bike. Di vê nimûneyê de, ez ê li MyTable li MySQL bipirsim da ku hemî tomarên ku ji guhêrbar $distance (bi Miles) kêmtir an wekhev in ji cîhê min re li $lititude û $longitude bibînim:

Pirsa ji bo vegerandina hemî tomarên di nav taybetî de dûrî bi hesibandina mesafeya bi mîlî di navbera du xalên firehî û dirêjahî de ev in:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

Hûn ê hewce bikin ku vê yekê xwerû bikin:

  • $ dirêjî - ev guhêrbar a PHP-ê ye ku ez dirêjiya xalê derbas dikim.
  • $ latitude - ev guhêrbar a PHP-ê ye ku ez dirêjiya xalê derbas dikim.
  • $ dûr - ev dûrahiya ku hûn dixwazin bibînin ku hemî tomar kêmtir an jî wekhev dibînin.
  • table - ev tablo ye… hûn ê bixwazin wê bi navê masa xwe veguherînin.
  • firehî - ev qada firehiya we ye.
  • dirêjî - ev qada dirêjiya we ye.

MySQL: Bi Hesabkirina Dûrahiya Bi Kîlometeran Bi Bikaranîna Drav û Drêjahî ve Hemî Qeydên Di nav Rêzeyekê de Vedigire

Here li vir pirsa SQL bi karanîna kîlometran di MySQL de heye:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

Hûn ê hewce bikin ku vê yekê xwerû bikin:

  • $ dirêjî - ev guhêrbar a PHP-ê ye ku ez dirêjiya xalê derbas dikim.
  • $ latitude - ev guhêrbar a PHP-ê ye ku ez dirêjiya xalê derbas dikim.
  • $ dûr - ev dûrahiya ku hûn dixwazin bibînin ku hemî tomar kêmtir an jî wekhev dibînin.
  • table - ev tablo ye… hûn ê bixwazin wê bi navê masa xwe veguherînin.
  • firehî - ev qada firehiya we ye.
  • dirêjî - ev qada dirêjiya we ye.

Min vê kodê di platforma nexşeya pargîdanî de bikar anî ku me li seranserê Amerîkaya Bakur bi ser 1,000 cîh re ji bo firoşgehek firotanê bikar anî û ew xweş xebitî.

Dûrahiya erdnîgarî ya Microsoft SQL Server: STDistance

Heke hûn Microsoft SQL Server bikar tînin, ew fonksiyona xwe pêşkêş dikin, STDistance ji bo hesabkirina dûrahiya di navbera du xalan de bi karanîna tîpa daneya Erdnîgariyê.

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

Hat tip ji Manash Sahoo, VP û Mîmarê Highbridge.

Douglas Karr

Douglas Karr damezrênerê Martech Zone û pisporek naskirî ya li ser veguherîna dîjîtal. Douglas alîkariya destpêkirina çend destpêkek serfiraz a MarTech kir, di kirîn û veberhênanên Martech de zêdetirî 5 mîlyar dolar alîkarî kir, û berdewam dike ku platform û karûbarên xwe bide destpêkirin. Ew hev-damezrîner e Highbridge, fîrmayek şêwirmendiya veguherîna dîjîtal. Douglas di heman demê de nivîskarek çapkirî ya rêberê Dummie û pirtûkek serokatiya karsaziyê ye.

Zimanî babet Related

78 Comments

  1. Gelek spas ji bo parvekirinê. Ev karekî kopî û pêvek hêsan bû û pir baş dixebite. We gelek wext ji min xilas kir.
    FYI ji bo her kesê ku li C vediguhezîne:
    ducar deg2rad(du qat) {deg vegere*(3.14159265358979323846/180.0); }

  2. Parçeyek pir xweş a şandinê - pir xweş xebitî - min tenê neçar ma ku navê maseya ku lat-dirêj digire biguherim. Ew pir zû dixebitî.. Min hejmareke hindik maqûl ya lat-dirêj hene (< 400) lê ez difikirim ku ev ê bi rengek xweş mezin bibe. Malpera xweş jî - min ew nû li hesabê xwe yê del.icio.us zêde kir û dê bi rêkûpêk vegere.

  3. Min tevahiya rojê li hesabên dûrbûnê geriya û algorîtmaya harversine dît, spas ji we re ku we mînak da ka meriv wê çawa di danezanek sql de datîne. Spas û silavan, Daniel

    1. Ji bo alîkariyê kêfxweş im, hevalê rails!

      Naha ez li fonksiyonek PHP-ê ya 'di Polygon' de digerim ku dê rêzek hevrêzên dirêjahî û dirêjahiya rêzkirî bigire û fêhm bike ka xalek din li hundur an derveyî pirgoşe ye.

  4. Ez difikirim ku SQL-ya we hewceyê daxuyaniyek hebe.
    li şûna WHERE dûrbûn <= $distan dibe ku hûn hewce bikin
    dûrahiya HAVING <= $distan bikar bînin

    wekî din spas ji bo ku min komek dem û enerjiyê xilas kir.

  5. Gelek spas ji bo parvekirina vê kodê. Ew ji min re gelek wextê pêşveçûnê xilas kir. Di heman demê de, spas ji xwendevanên we re ku destnîşan kirin ku daxuyaniyek HAVING ji bo MySQL 5.x hewce ye. Pir alîkar.

  6. Min jî dît ku WHERE ji min re nexebitî. Ew li HAVING guhert û her tişt bêkêmasî dixebite. Di destpêkê de min şîrove nexwend û wê bi karanîna hilbijarkek hêlînek ji nû ve nivîsand. Her du jî dê baş bixebitin.

  7. Pir arîkar, gelek spas! Min bi "HAVING"-a nû re ji "WHERE" re hin pirsgirêk hebûn, lê gava ku min şîroveyên li vir xwend (piştî bi qasî nîv saetê ku diranên xwe ji dilşikestî xwar =P), min ew bi rengek xweş xebitand. Spas dikim ^_^

  8. Bînin bîra xwe ku gotinek bijartî ya mîna wê dê ji hêla hesabkirinê ve pir zehf û ji ber vê yekê hêdî be. Ger we pir ji wan pirsan hebin, ew dikare bi lez tiştan bişewitîne.

    Nêzîkbûnek pir hindiktir ew e ku meriv hilbijarkek yekem (xav) bi karanîna deverek SQUARE ku ji hêla dûrahiyek hesabkirî ve hatî destnîşan kirin bimeşîne, ango "* ji navê tabloyê hilbijêrin ku lê dirêjahiya di navbera lat1 û lat2 û dirêjahiya di navbera lon1 û lon2 de". lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff, mîna lon. latdiff ~= dûr / 111 (ji bo km), an dûr / 69 ji bo mîlan ji ber ku 1 dereceya firehiyê ~ 111 km ye (guherînek hindik ji ber ku erd hinekî ovalî ye, lê ji bo vê armancê bes e). londiff = dûr / (abs (cos (deg2rad (fireh)) * 111)) - an 69 ji bo mîl (hûn dikarin bi rastî çarçoveyek piçûktir bigirin da ku guheztinan bihesibînin). Dûv re encama wê bistînin û wê bixin nav hilbijarka radial. Tenê ji bîr nekin koordînatên der-sînor hesab bikin – ango rêza dirêjahiya pejirandî -180 heta +180 e û rêjeya firehiya pejirandî -90 heya +90 e – heke latdiff an londiff we li derveyî vê rêzê be. . Bala xwe bidinê ku di pir rewşan de dibe ku ev neyê sepandin ji ber ku ew tenê bandorê li hesabên li ser xetek di nav Okyanûsa Pasîfîkê de ji stûnek ber bi stûnê dike, her çend ew beşek ji chukotka û beşek ji Alaskayê diqetîne.

    Ya ku em bi vê yekê pêk tînin kêmbûnek girîng e di hejmara xalên ku hûn li hember wan vê hesabkirinê dikin. Heke di databasê de mîlyonek gerdûnî ya ku bi qasî 100 km digere, paşê lêgerîna weya yekem (zû) li qadek 10000 sq km e û dê li ser 20 encaman (li ser bingeha belavkirinê jî li ser a rûbera bi qasî 500M km çargoşe), ku tê vê wateyê ku hûn ji bo vê pirsê li şûna mîlyon carî 20 carî hesabê dûrahiya tevlihev dimeşînin.

      1. Şîreta fantastîk! Ez bi rastî bi pêşdebirek re xebitîm ku fonksiyonek ku çargoşeya hundur dikişand û dûv re fonksiyonek vegerî ya ku li dora perimeterê 'çargoşeyan' dinivîsî da ku xalên mayî tê de bigire û derxe. Encam encamek pir bilez bû - wî dikaribû bi mîlyonan xalan di mîkroçirkeyan de binirxîne.

        Nêzîkatiya min a li jor bê guman 'xav' e lê jêhatî ye. Dîsa spas!

        1. dog,

          Ez hewl didim ku mysql û php-ê bikar bînim da ku binirxînim ka xalek dirêj a lat di nav polîgonek de ye. Ma hûn dizanin ka hevalê weya pêşdebir li ser çawaniya pêkanîna vî karî mînakek weşand. An jî hûn mînakên baş dizanin. Me evîn peyda kir.

  9. Silav her kes ev daxuyaniya min a testa SQL ye:

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    û Mysql ji min re dibêje ku dûrbûn, wekî stûnek tune, ez dikarim rêzê bikar bînim, ez dikarim bêyî WHERE bikim, û ew dixebite, lê ne bi wê re…

  10. Ev pir xweş e, di heman demê de ew mîna ku çûk difirin. Dê pir baş be ku hûn API-ya nexşeyên google-ê bi vî rengî bi hev re tevbigerin (dibe ku riyan bikar bînin û hwd.) Tenê ku hûn bi karanîna celebek veguheztinê ramanek bidin. Hîn jî min neçar e ku di PHP-ê de fonksiyonek annealkirina simulasyonê çêkim ku dê bikaribe ji pirsgirêka firoşkarê gerok re çareseriyek bikêr pêşkêşî bike. Lê ez difikirim ku ez dikarim hin kodên we ji nû ve bikar bînim da ku wiya bikim.

  11. Gotara baş! Min gelek gotar dîtin ku rave dikin ka meriv çawa dûrahiya di navbera du xalan de hesab dike lê ez bi rastî li pişka SQL digeriyam.

    1. Rast vir! Pirsgirêk çi ye :-/? meriv çawa "dûr" - Pirsgirêka stûnê çareser dike? Ji kerema xwe alîkariya me bikin!! 🙂

  12. 2 rojên lêkolînê ku di dawiyê de vê rûpelê ku pirsgirêka min çareser dike bibînim. Wusa dixuye ku ez çêtir e ku ez WolframAlpha-ya xwe derxim û matematîkê xwe firçe bikim. Guhertina ji WHERE bo HAVING nivîsara min di rêza xebatê de ye. SIPAS JI WERE

  13. Xwezî ev rûpela yekem bûya ku min li ser vê dîtibû. Piştî ceribandina gelek fermanên cihêreng, ev yek tenê bû ku bi rêkûpêk xebitî, û bi guheztinên hindiktirîn re hewce bû ku databasa min bicîh bîne.
    Gelek sipas!

  14. Xwezî ev rûpela yekem bûya ku min li ser vê dîtibû. Piştî ceribandina gelek fermanên cihêreng, ev yek tenê bû ku bi rêkûpêk xebitî, û bi guheztinên hindiktirîn re hewce bû ku databasa min bicîh bîne.
    Gelek sipas!

  15. Ez dizanim ku ev formula kar dike, lê ez nikarim bibînim ku tîrêjê erdê li ku tê hesibandin. Kes dikare min ronî bike, ji kerema xwe?

  16. spas ji bo şandina vê gotara alîkar,  
    lê ji ber hin sedeman ez dixwazim bipirsim
    meriv çawa dûrahiya di navbera hevrêzên hundurê mysql db û hevrêzên ku ji hêla bikarhêner ve di php-ê de têne danîn bistînin?
    ji bo zelaltir diyar bike:
    1.bikarhêner ji bo hilbijartina daneyên diyarkirî ji db û hevrêzên bikarhêner bixwe divê [id] têxe
    2.Pelê php bi karanîna [id] daneya armancê (koordan) digire û dûv re dûrahiya di navbera bikarhêner û xala armanc de hesab dike

    an jî hûn dikarin tenê ji koda jêrîn dûr bigirin?

    $qry = "BIJÊRE *,(((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+cos((“. $fireh."*pi()/180)) * cos((`Pi () )))*180/pi())*180*180*60) wek dûrbûna ji `MyTable` WHERE dûrahî >= ".$distan." >>>>Ez dikarim dûrahiya ji vir "derxim"?
    dîsa spas,
    Timmy S

  17. ok, her tiştê ku min ceriband nexebite. Yanî tiştê ku min heye dixebite, lê dûr dûr in.

    Ma kes dikare bibîne ka vê kodê çi xelet e?

    if(isset($_POST['submitted'])){ $z = $_POST['zipcode']; $r = $_POST['radyus']; echo "Encamên ji bo ".$z; $sql = mysql_query(“Helbet DISTINCT m.zipcode, m.MktName,m.LocAddSt,m.LocAddCity,m.LocAddState,m.x1,m.y1,m.verified,z1.lat,z2.lon,z1. bajar,z1.state JI mrk m, zip z1, zip z2 WHERE m.zipcode = z1.zipcode Û z2.zipcode = $z Û (3963 * acos( truncate( guneh( z2.lat / 57.2958 ) * guneh( m. y1 / 57.2958) + cos( z2.lat / 57.2958) * cos( m.y1 / 57.2958) * cos( m.x1 / 57.2958 – z2.lon / 57.2958), 8) ") an jî die (mysql_error()); while($row = mysql_fetch_array($sql)) {$store1 = $row['MktName'].""; $store = $row['LocAddSt']."; $store .= $row['LocAddCity'].", ".$row['LocAddState']." “.$row['zipcode']; $latitude1 = $row['lat']; $longitude1 = $row['lon']; $latitude2 = $row['y1']; $longitude2 = $row['x1']; $city = $row['bajar']; $state = $row['state']; $dis = getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi'); // $dis = dûr ($lat1, $lon1, $lat2, $lon2); $verified = $row['verastkirî']; if($verified == '1'){ echo ""; echo "".$store.""; echo $dis . "mile(yên) dûr"; echo ""; } else { echo "".$store.""; echo $dis . "mile(yên) dûr"; echo ""; } }}

    koda min fonksiyonên.php
    fonksiyona getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { $theta = $longitude1 – $longitude2; $dûr = (guneh(deg2rad($latitude1)) * guneh(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)) ); $dûr = acos($dûr); $dûr = rad2deg($dûr); $distan = $dûr * 60 * 1.1515; switch($unit) { case 'Mi': break; case 'Km' : $distance = $distance * 1.609344; } vegere (dor($dûr,2)); }

    Berî pêşî spas

  18. Hey Douglas, gotara mezin. Min ravekirina te ya têgehên erdnîgarî û kodê bi rastî balkêş dît. Pêşniyara min tenê ew e ku cîh û kodê ji bo pêşandanê veqetînin (wek mînak Stackoverflow). Ez fêm dikim ku hûn dixwazin cîhê biparêzin, lê cîhê koda kevneşopî / vekêşana kevneşopî dê ji min re, wekî bernamenûs, xwendin û veqetandinê pir hêsantir bike. Herçi jî, ew tiştek piçûk e. Karê mezin berdewam bikin.

  19. Zûtir xuya dike (mysql 5.9) ku di hilbijartinê de du caran formula bikar bîne û li ku derê:
    $formula = "(((acos(sin((".$latitude."*pi()/180)) * sin((`Pergalî"*pi()/180))+cos((".$latitude. ”*pi()/180)) * cos((`Gerahî`*pi()/180)) * cos(((“.$dirêjahî.”-`Dengî`)*pi()/180)))) *180/pi())*60*1.1515*1.609344)”;
    $sql = 'HILBIJARTIN *, '.$formula.' wek dûrbûna JI tabloya WHERE '..$formula.' <= '.$distance;

  20. Gelek spas ji bo parvekirina vê gotarê. ew pir alîkar e.
    PHP di destpêkê de wekî platformek nivîsandinê ya hêsan a bi navê "Rûpela Mala Kesane" hate afirandin. Naha PHP (kurteya Pêşkêşkera Hypertext) alternatîfek teknolojiya Rûpelên Pêşkêşkara Çalak (ASP) ya Microsoft-ê ye.

    PHP zimanek çavkaniya vekirî ya serverê ye ku ji bo afirandina rûpelên malperê yên dînamîkî tê bikar anîn. Ew dikare di nav HTML-ê de were bicîh kirin. PHP bi gelemperî bi databasek MySQL re li ser serverên malperê Linux/UNIX tê bikar anîn. Dibe ku ew zimanê nivîsandinê yê herî populer e.

  21. Min dît ku çareseriya jorîn bi rêkûpêk naxebite.
    Divê ez biguherim:

    $qqq = "BIJÊRE *,(((acos(sin((".$latitude."*pi()/180)) * sin((`latt`*pi()/180))+cos((" . $latitude . "*pi()/180)) * cos((`latt`*pi()/180)) * cos(((" . $longitude. "- `dirêj`)*pi()/180) )))*180/pi())*60*1.1515) wek dûrbûna FROM `qeyd` “;

  22. Silav, ji kerema xwe ez ê bi rastî li ser vê yekê hewceyê alîkariya we bikim.

    Min ji servera xweya webê re daxwazek wergirt
    53.47792 = $latitude
    -2.23389 = dirêjahiya $
    û 20 = dûrahiya ku ez dixwazim bigirim

    Lêbelê bi karanîna formula we, ew hemî rêzikên di db-ya min de vedigire

    $results = DB::hilbijêre(DB::raw("HILBIJARTIN *, (((acos(sin((".$latitude."pi()/180)) * guneh((latpi()/180))+cos((."$latitude."pi()/180)) * cos((latpi()/180)) * cos(((".$dirêj."- lng)pi()/180))))180/pi())601.1515*1.609344) wek dûrbûna nîşankeran HAVING dûr >= “.$distance ));

    [{“id”:1,”nav”:”Frankie Johnnie & Luigo Too”,”navnîşan”:”939 W El Camino Real, Mountain View, CA”,”lat”:37.386337280273,”lng”:-122.08582305908, "dûr":16079.294719663},{"id":2,"nav":"Pîzzeryaya Amici's East Coast","navnîşan":"790 Castro St, Mountain View, CA","lat":37.387138366699,"lng": -122.08323669434,"dûr":16079.175940152},{"id":3,"nav":"Kapp's Pizza Bar & Grill","navnîşan":"191 Castro St, Mountain View, CA","lat":37.393886566162, "lng":-122.07891845703,"dûr":16078.381373826},{"id":4,"nav":"Pîzza Maseya Dor: Çiyayê View","navnîşan":"570 N Shoreline Blvd, Mountain View, CA", ”lat”:37.402652740479,”lng”:-122.07935333252,”dûr”:16077.420540582},{“id”:5,”nav”:”Tony & Alba's Pizza & Pasta”,”navnîşana Çiyayê619,Escu”: Nêrîn, CA","lat":37.394012451172,"lng":-122.09552764893,"dûr":16078.563225154},{"id":6,"nav":"Pîzza 4546-ê ya oreganoyê:"37.401725769043adresa Pîzayê bi dara Oregano:"122.11464691162 El Camino Real, Los Altos, CA","lat":16077.937560795,"lng":-7,"dûr":24},{" id":53.485118865967,""nav":"Bar û grill","navnîşan":"2.1828699111938 Whiteley Street, Manchester","lat":8038.7620112314,"lng":-XNUMX,"dûr":XNUMX]]

    Ez dixwazim tenê rêzên bi 20 mîlî vegerînim lê ew hemî rêzan tîne. Ji kerema xwe ez çi xelet dikim

  23. Ez li pirseke bi heman rengî digerim lê piçekî pêş de çûm - bi kurtî ev e ku meriv hemî koordînatan di nav 2 mîl ji her koordînatekê de kom bike û dûv re di her komê de çend koordînatan bijmêre û tenê komeke ku xwediyê herî zêde koordînatan e - derxe. di nav komên ku herî zêde koordînatên wan hene de ji yek komê zêdetir hene - bi tenê koma tesadufî ji komên bi heman hejmara herî mezin derdixin -

Hûn çi difikirin?

Ev malpera Akismet bikar tîne ku ji bo kêmkirina spam. Zêdetir agahdariya danûstandinên we çawa pêvajoy kirin.