Bi Bikaranîna Formula Haversine (Nimûneyên PHP, Python, MySQL, MSSQL) Di Navbera Xalên Latahî û Dirêjahîyê de Dûrahiya Derdora Mezin hesab bikin an bipirsin

Formula Haversine - Dûrahiya Derdora Mezin - PHP, Python, MySQL

Vê mehê min di PHP û MySQL de bi rêzdarî ji GIS re bername bername kir. Li dora nêtê digerim, min rastî zehmetiyek hat 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 bi Erdnîgariyê re derbas nabe ji ber ku mesafeya di navbera xetên firehî û dirêjahî de ne ne dûrên wekhev taybet. Her ku hûn nêzîkê ekwatorê dibin, hêlên firehiyê ji hev dûrtir dibin. Heke hûn celebek hevkêşeya sêgoşeya sade bikar bînin, dibe ku ew li cîhek bi duristî û li ya din jî bi şaşî bipîve, ji ber kerbbûna Erdê.

Dûrra Mezin a Mezin

Rêyên ku li dora Erdê mesafeyên dirêj têne rêve kirin wekî têne zanîn Dûrra Mezin a Mezin. Ango… dûrahiya herî kurt a di navbera du xalên li ser qadekê de, ji xalên li ser nexşeyek zevî cûda ye. 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 karanîna Erdê bikar tîne di nav de Formula Haversine, ku trîgonometriyê bikar tîne da ku destûrê bide dorpêçkirina erdê. Gava ku hûn mesafeya di navbera 2 deverên li ser rûyê erdê de dibînin (wekî caw difire), xetek rastîn bi rastî kevanek e.

Ev di firîna hewayî de derbasdar e - we qet li nexşeya balafirên rastîn mêze kiriye û bala wan kişandiye? Ji ber ku firîna di kevane de di navbera du xalan de kurtir e ji rasterast ber bi cîh.

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.

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 hûn SQL bikar bînin da ku hesabek bikin da ku hemî tomaran di nav dûriyek taybetî de bibînin. Di vê mînakê de, ez ê di MySQL de MyTable bipirsim ku hemî tomarên ku ji $ dûr (li Miles) ên guhêrbar kêmtir in an jî wekhev in li cîhê min li $ latitude û $ longitude bibînin:

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.

77 Comments

  1. 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. 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. 4
  4. 5

    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

  5. 8

    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.

  6. 10
  7. 11
  8. 12

    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.

  9. 14
  10. 15
  11. 16

    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.

  12. 17
  13. 18

    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 ^_^

  14. 19
  15. 20

    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 (xam) 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 li wir dirêjahiya di navbera lat1 û lat2 û dirêjahiya di navbera lon1 û lon2 de ye". 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 piçek 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 bavêjin 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 pejiran -90 heta +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.

    • 21
      • 22

        Şî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 bi lez û bez 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!

        • 23

          Doug,

          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 ka meriv çawa vê peywirê çawa pêk tîne nimûneyek weşand. An jî hûn mînakên baş dizanin. Me evîn peyda kir.

  16. 24

    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…

  17. 26

    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.

  18. 27
  19. 28

    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.

  20. 29
  21. 30
  22. 31
  23. 32
  24. 36

    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

  25. 37
  26. 39

    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!

  27. 40

    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!

  28. 41
  29. 42
  30. 43
  31. 45
  32. 46
  33. 47

    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?

  34. 49
  35. 50
  36. 52
  37. 53
  38. 55
  39. 56
  40. 58

    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

  41. 60

    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

  42. 61
  43. 62

    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.

  44. 64
  45. 65

    Li vir dema ku bi fonksiyonê re bikar tînin em celebek dûrbûnê digirin.. dema ku pirsê bikar tînin cûreyek dûrbûna wê ya din tê

  46. 66
  47. 67
  48. 68
  49. 69
  50. 70

    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;

  51. 71
  52. 72

    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.

  53. 73

    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` “;

  54. 75
  55. 76

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

    Min ji servera xweya webê re daxwazek wergirt http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    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::select(DB::raw("Helbet *, (((acos(sin((".$latitude."*pi()/180)) * sin((lat*pi()/180 ))+cos((".$latitude."*pi()/180)) * cos((lat*pi()/180)) * cos(((."$dirêj.”- lng)*pi( )/180))))*180/pi())*60*1.1515*1.609344) wek dûrbûn JI nîşankeran HAVING dûr >= “.$distan ));

    [{“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

  56. 77

    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.