PHP a SQL: Cyfrifwch neu Ymholi Pellter Cylch Mawr rhwng Pwyntiau Lledred a Hydred Gyda'r Fformiwla Haversine

Fformiwla Haversine - Cyfrifwch Pellter Cylch Mawr gyda PHP neu MySQL

Y mis hwn rydw i wedi bod yn rhaglennu cryn dipyn yn PHP a MySQL mewn perthynas â GIS. Wrth grwydro o amgylch y rhwyd, cefais amser caled yn darganfod rhai o'r Cyfrifiadau daearyddol i ddod o hyd i'r pellter rhwng dau leoliad felly roeddwn i eisiau eu rhannu yma.

Map Hedfan Ewrop Gyda Phellter Cylch Mawr

Y ffordd syml o gyfrifo pellter rhwng dau bwynt yw defnyddio fformiwla Pythagorean i gyfrifo hypotenws triongl (A² + B² = C²). Gelwir hyn yn Pellter Ewclidaidd.

Mae hynny'n ddechrau diddorol ond nid yw'n berthnasol gyda Daearyddiaeth gan fod y pellter rhwng llinellau lledred a hydred nid pellter cyfartal ar wahân. Wrth ichi agosáu at y cyhydedd, mae llinellau lledred yn mynd ymhellach oddi wrth ei gilydd. Os ydych chi'n defnyddio rhyw fath o hafaliad triongli syml, fe allai fesur pellter yn gywir mewn un lleoliad ac yn ofnadwy o anghywir yn y llall, oherwydd crymedd y Ddaear.

Pellter Cylch Mawr

Gelwir y llwybrau sy'n cael eu teithio'n bell o amgylch y Ddaear yn Pellter Cylch Mawr. Hynny yw ... mae'r pellter byrraf rhwng dau bwynt ar sffêr yn wahanol na'r pwyntiau mewn map gwastad. Cyfunwch hynny â'r ffaith nad yw'r llinellau lledred a hydred yn gyfochrog ... ac mae gennych gyfrifiad anodd.

Dyma esboniad fideo gwych o sut mae Great Circles yn gweithio.

Fformiwla Haversine

Mae'r pellter sy'n defnyddio crymedd y Ddaear wedi'i ymgorffori yn y Fformiwla Haversine, sy'n defnyddio trigonometreg i ganiatáu ar gyfer crymedd y ddaear. Pan rydych chi'n dod o hyd i'r pellter rhwng 2 le ar y ddaear (wrth i'r frân hedfan), arc yw llinell syth mewn gwirionedd.

Mae hyn yn berthnasol wrth hedfan awyr - a ydych erioed wedi edrych ar y map gwirioneddol o hediadau a sylwi eu bod yn fwaog? Mae hynny oherwydd ei bod yn fyrrach hedfan mewn bwa rhwng dau bwynt nag yn uniongyrchol i'r lleoliad.

PHP: Cyfrifwch y Pellter Rhwng 2 Bwynt Lledred a Hydred

Beth bynnag, dyma fformiwla PHP ar gyfer cyfrifo'r pellter rhwng dau bwynt (ynghyd â throsi Milltir yn erbyn Cilomedr) wedi'i dalgrynnu i ddau le degol.

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

SQL: Adalw Pob Cofnod O fewn Ystod Trwy Gyfrifo Pellter Mewn Milltiroedd gan ddefnyddio Lledred a Hydred

Mae hefyd yn bosibl defnyddio SQL i wneud cyfrifiad i ddod o hyd i'r holl gofnodion o fewn pellter penodol. Yn yr enghraifft hon, rydw i'n mynd i ymholi MyTable yn MySQL i ddod o hyd i'r holl gofnodion sy'n llai na neu'n hafal i bellter $ amrywiol (mewn Milltiroedd) i'm lleoliad ar $ lledred a $ hydred:

Yr ymholiad ar gyfer adfer yr holl gofnodion o fewn penodol pellter trwy gyfrifo'r pellter mewn milltiroedd rhwng dau bwynt lledred a hydred yw:

$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."

Bydd angen i chi addasu hyn:

  • $ hydred - newidyn PHP yw hwn lle rydw i'n pasio hydred y pwynt.
  • $ lledred - newidyn PHP yw hwn lle rydw i'n pasio hydred y pwynt.
  • $ pellter - dyma'r pellter yr hoffech chi ddod o hyd i'r holl gofnodion yn llai neu'n hafal iddo.
  • tabl - dyma'r tabl ... byddwch chi am roi enw eich bwrdd yn lle hynny.
  • lledred - dyma faes eich lledred.
  • hydred - dyma faes eich hydred.

SQL: Adalw Pob Cofnod O fewn Ystod Trwy Gyfrifo Pellter Mewn Cilomedrau gan Ddefnyddio Lledred a Hydred

A dyma ymholiad SQL gan ddefnyddio cilometrau yn MySQL:

$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."

Bydd angen i chi addasu hyn:

  • $ hydred - newidyn PHP yw hwn lle rydw i'n pasio hydred y pwynt.
  • $ lledred - newidyn PHP yw hwn lle rydw i'n pasio hydred y pwynt.
  • $ pellter - dyma'r pellter yr hoffech chi ddod o hyd i'r holl gofnodion yn llai neu'n hafal iddo.
  • tabl - dyma'r tabl ... byddwch chi am roi enw eich bwrdd yn lle hynny.
  • lledred - dyma faes eich lledred.
  • hydred - dyma faes eich hydred.

Defnyddiais y cod hwn mewn platfform mapio menter a ddefnyddiwyd gennym ar gyfer siop adwerthu gyda dros 1,000 o leoliadau ledled Gogledd America ac roedd yn gweithio'n hyfryd.

76 Sylwadau

  1. 1

    Diolch yn fawr am rannu. Roedd hon yn swydd hawdd ei chopïo a'i gludo ac mae'n gweithio'n wych. Rydych chi wedi arbed llawer o amser i mi.
    FYI i unrhyw un sy'n porthi i C:
    deg2rad dwbl (deg dwbl) {dychwelyd deg * (3.14159265358979323846 / 180.0); }

  2. 2

    Darn postio braf iawn - wedi gweithio'n neis iawn - dim ond enw'r bwrdd oedd yn dal y lat-hir oedd yn rhaid i mi ei newid. Mae'n gweithio'n eithaf cyflym i .. Mae gen i nifer rhesymol fach o lat-longs (<400) ond rwy'n credu y byddai hyn yn graddio'n braf. Safle neis hefyd - dwi newydd ei ychwanegu at fy nghyfrif del.icio.us a byddaf yn edrych yn ôl yn rheolaidd.

  3. 4
  4. 5

    Fe wnes i chwilio’r diwrnod cyfan am gyfrifiadau pellter a dod o hyd i’r algorithm harversine, diolch i chi am roi’r enghraifft ar sut i’w roi mewn datganiad sgwâr. Diolch a chyfarchion, Daniel

  5. 8

    Rwy'n credu bod angen datganiad ar eich SQL.
    yn lle BLE pellter <= $ pellter y gallai fod angen i chi ei wneud
    defnyddio pellter CAEL <= $ pellter

    fel arall diolch am arbed criw o amser ac egni i mi.

  6. 10
  7. 11
  8. 12

    Diolch gymaint am rannu'r cod hwn. Fe arbedodd lawer o amser datblygu i mi. Hefyd, diolch i'ch darllenwyr am dynnu sylw at y ffaith bod angen datganiad WEDI ar gyfer MySQL 5.x. Cymwynasgar iawn.

  9. 14
  10. 15

    Helo,

    Cwestiwn arall. A oes fformiwla ar gyfer llinynnau NMEA fel yr un isod?

    1342.7500, N, 10052.2287, E.

    $GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B

    Diolch,
    Harry

  11. 16

    Fe wnes i hefyd ddarganfod nad oedd BLE yn gweithio i mi. Ei newid i CAEL ac mae popeth yn gweithio'n berffaith. Ar y dechrau, wnes i ddim darllen y sylwadau a'i ailysgrifennu gan ddefnyddio dewis nythu. Bydd y ddau yn gweithio'n iawn.

  12. 17
  13. 18

    Yn anhygoel o ddefnyddiol, diolch yn fawr iawn! Roeddwn yn cael rhai problemau gyda’r “HAVING” newydd, yn hytrach na “BLE”, ond unwaith i mi ddarllen y sylwadau yma (ar ôl tua hanner awr o falu fy nannedd mewn rhwystredigaeth = P), cefais iddo weithio’n braf. Diolch ^ _ ^

  14. 19
  15. 20

    Cadwch mewn cof y bydd datganiad dethol fel hwnnw yn ddwys yn gyfrifiadurol ac felly'n araf. Os oes gennych lawer o'r ymholiadau hynny, gall symud pethau i lawr yn eithaf cyflym.

    Dull llawer llai dwys yw rhedeg dewis cyntaf (amrwd) gan ddefnyddio ardal SQUARE wedi'i diffinio gan bellter wedi'i gyfrifo hy “dewiswch * o enw tablen lle mae lledred rhwng lat1 a lat2 a hydred rhwng lon1 a lon2”. lat1 = targed - latdiff, lat2 = targetlatitude + latdiff, tebyg i lon. latdiff ~ = pellter / 111 (ar gyfer km), neu bellter / 69 am filltiroedd gan mai 1 gradd o lledred yw ~ 111 km (amrywiad bach gan fod y ddaear ychydig yn hirgrwn, ond yn ddigonol at y diben hwn). londiff = pellter / (abs (cos (deg2rad (lledred)) * 111)) - neu 69 am filltiroedd (gallwch chi gymryd sgwâr ychydig yn fwy er mwyn cyfrif am amrywiadau). Yna cymerwch ganlyniad hynny a'i fwydo i'r dewis rheiddiol. Peidiwch ag anghofio rhoi cyfrif am gyfesurynnau y tu allan i ffiniau - hy yr ystod hydred derbyniol yw -180 i +180 a'r ystod lledred derbyniol yw -90 i +90 - rhag ofn bod eich latdiff neu londiff yn rhedeg y tu allan i'r amrediad hwn. . Sylwch, yn y rhan fwyaf o achosion, efallai na fydd hyn yn berthnasol gan ei fod yn effeithio ar gyfrifiadau dros linell trwy'r cefnfor tawel yn unig o bolyn i bolyn, er ei fod yn croestorri rhan o chukotka a rhan o alaska.

    Yr hyn a gyflawnwn gan hyn yw gostyngiad sylweddol yn nifer y pwyntiau yr ydych yn gwneud y cyfrifiad hwn yn eu herbyn. Os oes gennych filiwn o bwyntiau byd-eang yn y gronfa ddata wedi'u dosbarthu'n fras yn gyfartal a'ch bod am chwilio o fewn 100 km, yna mae eich chwiliad cyntaf (cyflym) o ardal 10000 km sgwâr ac mae'n debyg y bydd yn esgor ar oddeutu 20 canlyniad (yn seiliedig ar ddosbarthiad cyfartal dros a arwynebedd arwyneb o tua 500M km sgwâr), sy'n golygu eich bod yn rhedeg y cyfrifiad pellter cymhleth 20 gwaith ar gyfer yr ymholiad hwn yn lle miliwn o weithiau.

    • 21

      Mân gamgymeriad yn yr enghraifft ... byddai hynny o fewn 50 km (nid 100) gan ein bod yn edrych ar “radiws” ein… sgwâr.

      • 22

        Cyngor gwych! Mewn gwirionedd gweithiais gyda datblygwr a ysgrifennodd swyddogaeth a dynnodd y sgwâr y tu mewn ac yna swyddogaeth ailadroddus a wnaeth 'sgwariau' o amgylch y perimedr i gynnwys ac eithrio'r pwyntiau sy'n weddill. Roedd y canlyniad yn ganlyniad anhygoel o gyflym - gallai werthuso miliynau o bwyntiau mewn microsecondau.

        Mae fy null uchod yn bendant yn 'amrwd' ond yn alluog. Diolch eto!

        • 23

          Doug,

          Rwyf wedi bod yn ceisio defnyddio mysql a php i werthuso a yw pwynt lat hir o fewn polygon. Ydych chi'n gwybod a gyhoeddodd eich ffrind datblygwr unrhyw enghreifftiau ar sut i gyflawni'r dasg hon. Neu a ydych chi'n gwybod am unrhyw enghreifftiau da. Diolch ymlaen llaw.

  16. 24

    Helo bawb, dyma fy natganiad SQL prawf:

    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

    ac mae Mysql yn dweud wrthyf nad yw'r pellter hwnnw'n bodoli fel colofn, gallaf ddefnyddio trefn trwy, gallaf ei wneud heb BLE, ac mae'n gweithio, ond nid gydag ef ...

  17. 26

    Mae hyn yn wych, fodd bynnag mae'n union fel mae'r adar yn hedfan. Byddai'n wych ceisio ymgorffori'r API mapiau google i hyn rywsut (gan ddefnyddio ffyrdd ac ati efallai.) Dim ond i roi syniad gan ddefnyddio math gwahanol o gludiant. Nid wyf eto wedi gwneud swyddogaeth anelio efelychiedig yn PHP a fyddai’n gallu cynnig datrysiad effeithlon i broblem y gwerthwr teithiol. Ond credaf efallai y byddaf yn gallu ailddefnyddio peth o'ch cod i wneud hynny.

  18. 27
  19. 28

    Erthygl dda! Fe wnes i ddod o hyd i lawer o erthyglau yn disgrifio sut i gyfrifo pellter rhwng dau bwynt ond roeddwn i wir yn edrych am y pyt SQL.

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

    2 ddiwrnod o ymchwil i ddod o hyd i'r dudalen hon o'r diwedd sy'n datrys fy mhroblem. Yn edrych fel fy mod yn well chwalu fy WolframAlpha a gwella fy mathemateg. Mae'r newid o BLE i WEDI cael fy sgript yn gweithio'n iawn. DIOLCH

  25. 37
    • 38

      Diolch Georgi. Daliais i heb ddod o hyd i 'bellter' colofn. Unwaith i mi newid y BLE i CAEL roedd yn gweithio fel swyn!

  26. 39

    Rwy'n dymuno mai hon oedd y dudalen gyntaf i mi ddod o hyd iddi ar hon. Ar ôl rhoi cynnig ar lawer o wahanol orchmynion, hwn oedd yr unig un i weithio'n iawn, a chyda'r newidiadau lleiaf posibl i ffitio fy nghronfa ddata fy hun.
    Diolch yn fawr!

  27. 40

    Rwy'n dymuno mai hon oedd y dudalen gyntaf i mi ddod o hyd iddi ar hon. Ar ôl rhoi cynnig ar lawer o wahanol orchmynion, hwn oedd yr unig un i weithio'n iawn, a chyda'r newidiadau lleiaf posibl i ffitio fy nghronfa ddata fy hun.
    Diolch yn fawr!

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

    Rwy'n gwybod bod y fformiwla hon yn gweithio, ond ni allaf weld lle mae radiws y ddaear yn cael ei ystyried. A all unrhyw un fy ngoleuo, os gwelwch yn dda?

  34. 49
  35. 50
  36. 52

    Diolch Douglas, yr Ymholiad SQL yw'r union beth yr oeddwn ei angen, ac roeddwn i'n meddwl y byddai'n rhaid i mi ei ysgrifennu fy hun. Rydych chi wedi fy achub rhag oriau o gromlin ddysgu hydred lledred o bosib!

  37. 53
  38. 55
  39. 56
  40. 58

    diolch am bostio'r erthygl ddefnyddiol hon,  
    ond am ryw reswm hoffwn ofyn
    sut i gael y pellter rhwng cordiau y tu mewn i mysql db a chordiau wedi'u mewnosod ar php gan ddefnyddiwr?
    disgrifiwch yn gliriach:
    Rhaid i 1.user fewnosod [id] ar gyfer dewis data penodedig o db a chordiau'r defnyddiwr ei hun
    2. mae'r ffeil php yn cael y data targed (coords) gan ddefnyddio [id] ac yna'n cyfrifo'r pellter rhwng y defnyddiwr a'r pwynt targed

    neu a all gael pellter o'r cod isod yn unig?

    $ qry = “SELECT *, (((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` Lledred` * pi () / 180)) + cos ((“. $ lledred. "* pi () / 180)) * cos ((` Lledred` * pi () / 180)) * cos (((“. $ hydred.” - `Hydred`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) fel pellter O `MyTable` LLE pellter> =". $ Pellter. " >>>> a gaf i “dynnu allan” y pellter oddi yma?
    Diolch eto,
    Timmy S.

    • 59

      peidiwch â meddwl, rydw i wedi darganfod sut mae'r “swyddogaeth” yn gweithio yn php
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      Diolch yn fawr!! 

  41. 60

    iawn, nid yw popeth rydw i wedi rhoi cynnig arno yn gweithio. Hynny yw, mae'r hyn sydd gen i yn gweithio, ond mae'r pellteroedd yn bell i ffwrdd.

    A allai unrhyw un o bosibl weld beth sydd o'i le ar y cod hwn?

    os (isset ($ _ POST ['cyflwynwyd'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['radiws']; adleisio “Canlyniadau ar gyfer“. $ z; $ sql = mysql_query (“SELECT DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. dinas, z1.state O mrk m, zip z1, zip z2 LLE m.zipcode = z1.zipcode A z2.zipcode = $ z A (3963 * acos (truncate (sin (z2.lat / 57.2958) * sin (m. y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 - z2.lon / 57.2958), 8)) <= $ r ") neu farw (mysql_error ()); tra ($ rhes = mysql_fetch_array ($ sql)) {$ store1 = $ rhes ['MktName']. ""; $ store = $ rhes ['LocAddSt']. ""; $ store. = $ rhes ['LocAddCity']. ",". $ rhes ['LocAddState']. " “. $ Rhes ['zipcode']; $ lledred1 = $ rhes ['lat']; $ hydred1 = $ rhes ['lon']; $ lledred2 = $ rhes ['y1']; $ hydred2 = $ rhes ['x1']; $ dinas = $ rhes ['dinas']; $ state = $ rhes ['state']; $ dis = getnew ($ lledred1, $ hydred1, $ lledred2, $ hydred2, $ uned = 'Mi'); // $ dis = pellter ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ rhes ['wedi'i wirio']; os ($ verified == '1') {adleisio ""; adleisio “”. $ storfa. ””; adleisio $ dis. ”Milltir (au) i ffwrdd”; adleisio “”; } arall {adleisio "". $ storfa. ""; adleisio $ dis. ”Milltir (au) i ffwrdd”; adleisio “”; }}}

    fy nghod functions.php
    getnew swyddogaeth ($ lledred1, $ hydred1, $ lledred2, $ hydred2, $ uned = 'Mi') {$ theta = $ hydred1 - $ hydred2; $ pellter = (sin (deg2rad ($ lledred1)) * sin (deg2rad ($ lledred2))) + (cos (deg2rad ($ lledred1)) * cos (deg2rad ($ lledred2)) * cos (deg2rad ($ theta)) ); $ pellter = acos ($ pellter); $ pellter = rad2deg ($ pellter); $ pellter = $ pellter * 60 * 1.1515; switsh ($ uned) {achos 'Mi': torri; achos 'Km': $ pellter = $ pellter * 1.609344; } dychwelyd (rownd ($ pellter, 2)); }

    Diolch ymlaen llaw

  42. 61
  43. 62

    Hei Douglas, erthygl wych. Roedd eich esboniad o'r cysyniadau daearyddol a'r cod yn ddiddorol iawn. Fy unig awgrym fyddai gofod a mewnoli'r cod i'w arddangos (fel Stackoverflow, er enghraifft). Rwy'n deall eich bod chi eisiau gwarchod lle, ond byddai bylchau / mewnoliad cod confensiynol yn ei gwneud hi'n llawer haws i mi, fel rhaglennydd, ddarllen a dyrannu. Beth bynnag, peth bach yw hynny. Daliwch ati gyda'r gwaith gwych.

  44. 64
  45. 65

    yma wrth ddefnyddio gyda swyddogaeth rydym yn cael un math o bellter ... gan ddefnyddio ymholiad ynghylch y math arall o bellter sydd i ddod

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

    mae'n ymddangos yn gyflymach (mysql 5.9) i ddefnyddio dwywaith y fformiwla yn y dewis a lle:
    $ fformiwla = “(((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` Lledred` * pi () / 180)) + cos ((“. $ lledred." ”* Pi () / 180)) * cos ((` Lledred` * pi () / 180)) * cos (((“. $ Hydred.” - `Hydred`) * pi () / 180))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SELECT *,'. $ fformiwla. ' fel pellter O dabl LLE '.. $ fformiwla.' <= '. $ pellter;

  51. 71
  52. 72

    Diolch yn fawr am gneifio'r erthygl hon. Mae'n ddefnyddiol iawn.
    Ar y dechrau, crëwyd PHP fel platfform sgriptio syml o'r enw “Tudalen Gartref Bersonol”. Y dyddiau hyn mae PHP (y byr ar gyfer Rhagflaenydd Hypertestun) yn ddewis arall o dechnoleg Tudalennau Gweinydd Gweithredol (ASP) Microsoft.

    Mae PHP yn iaith ffynhonnell agored ar ochr y gweinydd a ddefnyddir ar gyfer creu tudalennau gwe deinamig. Gellir ei ymgorffori yn HTML. Defnyddir PHP fel arfer ar y cyd â chronfa ddata MySQL ar weinyddion gwe Linux / UNIX. Mae'n debyg mai hon yw'r iaith sgriptio fwyaf poblogaidd.

  53. 73

    Canfûm uchod nad oedd yr ateb yn gweithio'n iawn.
    Mae angen i mi newid i:

    $ qqq = “SELECT *, (((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((”. $ lledred. "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ hydred." - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) fel pellter O `register`“;

  54. 75
  55. 76

    Helo, os gwelwch yn dda, bydd gwir angen eich help arnaf ar hyn.

    Gwneuthum gais cael gafael ar fy ngweinydd-we http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ lledred
    -2.23389 = $ hydred
    a 20 = y pellter rydw i am ei adfer

    Fodd bynnag, gan ddefnyddio'ch fformiwla, mae'n adfer pob rhes yn fy db

    $ results = DB :: dewis (DB :: amrwd (“SELECT *, (((acos (sin ((“. $ lledred. ”* pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((“. $ lledred.” * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((“. $ hydred.” - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) fel pellter O farcwyr YN CAEL pellter> = “. $ Pellter));

    [{“Id”: 1, ”enw”: “Frankie Johnnie & Luigo Too”, “cyfeiriad”: ”939 W El Camino Real, Mountain View, CA”, ”lat”: 37.386337280273, ”lng”: - 122.08582305908, “Pellter”: 16079.294719663}, {“id”: 2, ”enw”: “Pizzeria Arfordir Dwyrain Amici”, “cyfeiriad”: ”790 Castro St, Mountain View, CA”, “lat”: 37.387138366699, “lng”: -122.08323669434, “pellter”: 16079.175940152}, {“id”: 3, ”enw”: “Bar a Gril Pizza Kapp”, “cyfeiriad”: ”191 Castro St, Mountain View, CA”, “lat”: 37.393886566162, ”Lng”: - 122.07891845703, “pellter”: 16078.381373826}, {“id”: 4, ”enw”: “Pizza Bord Gron: Mountain View”, “cyfeiriad”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, “pellter”: 16077.420540582}, {“id”: 5, ”enw”: “Pizza & Pasta Tony & Alba”, “cyfeiriad”: ”619 Escuela Ave, Mountain View, CA ”,“ lat ”: 37.394012451172,” lng ”: - 122.09552764893,” pellter ”: 16078.563225154}, {“ id ”: 6,” enw ”:“ Pizza Pren-Fired Oregano ”,“ cyfeiriad ”:” 4546 El Camino Real, Los Altos, CA ”,“ lat ”: 37.401725769043,” lng ”: - 122.11464691162,” pellter ”: 16077.937560795}, {“ id ”: 7,” enw ”:“ Y bariau a’r griliau ”,“ cyfeiriad ”:” 24 Whiteley Street, Manceinion ”,” lat ”: 53.485118865967,” lng ”: - 2.1828699111938,“ pellter ”: 8038.7620112314}]

    Rwyf am adfer rhesi yn unig gydag 20 milltir ond mae'n dod â phob rhes. Os gwelwch yn dda beth ydw i'n ei wneud yn anghywir

Beth ydych chi'n feddwl?

Mae'r wefan hon yn defnyddio Akismet i leihau sbam. Dysgwch sut mae eich data sylwadau yn cael ei brosesu.