PHP жана SQL: Гаверсин формуласы менен кеңдик жана узундук чекиттеринин ортосундагы чоң айлананын аралыгын эсептөө же суроо

Гаверсин формуласы - PHP же MySQL менен чоң айлананын аралыгын эсептөө

Ушул айда мен PHP жана MySQL программаларында ГИС боюнча бир аз программаладым. Торду аңдып отуруп, чындыгында, айрымдарын таба албай кыйналдым Географиялык эсептөөлөр эки жердин ортосундагы аралыкты табуу үчүн, аларды ушул жерде бөлүшкүм келди.

Учуунун узактыгы менен Европанын учуу картасы

Эки чекиттин ортосундагы аралыкты эсептөөнүн жөнөкөй жолу - үч бурчтуктун гипотенузасын эсептөө үчүн Пифагор формуласы (A² + B² = C²). Бул белгилүү Евклид аралык.

Бул кызыктуу башталыш, бирок географияга туура келбейт, анткени кеңдик жана узундук сызыктарынын ортосундагы аралык ушул бирдей аралык эмес бөлөк. Экваторго жакындаган сайын, кеңдик сызыктары бири-биринен алыстай берет. Эгерде сиз кандайдыр бир жөнөкөй триангуляция теңдемесин колдонгон болсоңуз, анда ал Жердин кыйшайып кетишинен улам бир жерде аралыкты так өлчөп, экинчисинде өтө туура эмес болушу мүмкүн.

Чоң тегерек аралык

Жерди айланып өткөн узак аралыктарга чыккан маршруттар катары белгилүү Чоң тегерек аралык. Башкача айтканда ... сферанын эки чекитинин ортосундагы эң кыска аралык жалпак картадагы чекиттерден айырмаланат. Муну кеңдик менен узундук сызыктары бирдей аралыкта эмес деп айкалыштырыңыз ... жана сиз кыйын эсептеп чыктыңыз.

Бул жерде Great Circles кандайча иштей тургандыгы жөнүндө фантастикалык видео түшүндүрмө бар.

Гаверсин формуласы

Жердин ийрилигин колдонгон аралык аралык Гаверсин формуласы, жердин кыйшайышына мүмкүнчүлүк берүүчү тригонометрияны колдонот. Жердеги 2 жердин ортосундагы аралыкты (карга учуп баратканда) тапканыңызда, түз сызык - бул жаа.

Бул аба каттамында колдонулат - сиз учуулардын чыныгы картасын карап көрдүңүз беле? Себеби аркада учуп учкан жериңизге караганда кыска.

PHP: Кеңдик менен Узундуктун 2 пунктунун ортосундагы аралыкты эсептөө

Эмнеси болсо дагы, эки чекиттин ортосундагы аралыкты эсептөөнүн 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)); 
}

SQL: Кеңдиктин жана Узундуктун жардамы менен милдеги аралыкты эсептөө менен бир катар чектердеги бардык жазууларды алуу

Бардык жазууларды белгилүү аралыкта табуу үчүн эсептөө үчүн SQL колдонсо болот. Бул мисалда, MyTable'ден сураныч, My $ Табулатура жана $ Longitude боюнча жайгашкан жериме чейинки аралыктын өзгөрүшү $ (Майлс) аз же барабар болгон бардык жазууларды табуу үчүн:

Белгилүү бир жазуунун бардыгын алуу суроосу аралык узундуктун жана узундуктун эки чекитинин ортосундагы чакырым аралыкты эсептөө менен:

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

Сиз муну жөндөшүңүз керек болот:

  • $ узундук - бул PHP өзгөрмөсү, мен чекиттин узунунан өтүп жатам.
  • $ туурасы - бул PHP өзгөрмөсү, мен чекиттин узунунан өтүп жатам.
  • $ аралык - бул бардык жазууларды азыраак же барабар тапкыңыз келген аралык.
  • стол - бул таблица ... аны таблицанын аты менен алмаштыргың келет.
  • тууралык - бул сенин кеңдигиңдин талаасы.
  • узактык - бул сенин узун талааң.

SQL: Кеңдиктин жана Узундуктун жардамы менен аралыктагы километрди эсептөө менен бардык жазууларды алуу

Бул жерде SQL сурамы 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."

Сиз муну жөндөшүңүз керек болот:

  • $ узундук - бул PHP өзгөрмөсү, мен чекиттин узунунан өтүп жатам.
  • $ туурасы - бул PHP өзгөрмөсү, мен чекиттин узунунан өтүп жатам.
  • $ аралык - бул бардык жазууларды азыраак же барабар тапкыңыз келген аралык.
  • стол - бул таблица ... аны таблицанын аты менен алмаштыргың келет.
  • тууралык - бул сенин кеңдигиңдин талаасы.
  • узактык - бул сенин узун талааң.

Мен бул кодду Түндүк Америка боюнча 1,000ден ашуун жайгашкан чекене дүкөн үчүн пайдаланган ишкана картасын түзүүчү платформада колдондум жана ал сонун иштеди.

76 Comments

  1. 1

    Бөлүшкөнүңүз үчүн чоң рахмат. Бул оңой эле көчүрүп алып чапташтырылган жумуш болчу жана сонун иштейт. Сиз мени көп убакыттан сактап калдыңыз.
    С портуна көчүргөндөр үчүн маалымат:
    кош deg2rad (кош градус) {кайтуу градус * (3.14159265358979323846 / 180.0); }

  2. 2

    Абдан жакшы жарыялоо - абдан жакшы иштеди - столдун атын lat-long кармап туруп гана өзгөртүү керек болчу. Бул абдан тез иштейт .. Менде лат-лонгдордун саны аз (<400), бирок менимче, бул жакшы масштабга жетет. Жакшы сайт - мен аны del.icio.us аккаунтума жаңы эле кошуп койдум жана ар дайым текшерип турам.

  3. 4
  4. 5

    Күнү бою аралыкты эсептөө амалдарын издеп, харвервиндин алгоритмин таптым, аны sql операторуна кантип коюуга мисал келтиргениңиз үчүн. Рахмат жана салам, Даниел

  5. 8

    Менимче, сиздин SQL сөзгө ээ болушу керек.
    WHERE аралыктын ордуна <= $ аралык керек болушу мүмкүн
    колдонуу HAVING аралыгы = = аралык

    Болбосо мага бир топ убакытты жана энергияны үнөмдөгөнүңүз үчүн рахмат.

    • 9

      Салам Давид,

      Эгерде сиз кандайдыр бир GROUP BY билдирүүсүн жасап жатсаңыз, анда сизге HAVING керек. Мен жогоруда келтирилген мисалда мындай кылып жаткан жокмун.

      Даг

  6. 10
  7. 11
  8. 12

    Бул кодду бөлүшкөнүңүз үчүн чоң рахмат. Бул өнүгүү убактымды бир топ үнөмдөп койду. Ошондой эле, MySQL 5.x үчүн HAVING билдирүүсү зарыл экендигин көрсөткөн окурмандарыңызга рахмат. Абдан пайдалуу.

  9. 14

    Жогорудагы формула менин убактымды үнөмдөп жатат. Чоң рахмат.
    Ошондой эле NMEA форматы менен Degrees ортосунда которуштурушум керек. Мен баракчанын ылдый жагындагы ушул даректен формула таптым. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    Муну кантип текшерүүнү билгендер барбы?

    Рахмат сага!
    Гарри

  10. 15
  11. 16

    Ошондой эле КАЙДА мен үчүн иштебегенин байкадым. Аны HAVING деп өзгөрттү жана бардыгы сонун иштейт. Алгач мен комментарийлерди окубаптырмын жана аны уяланган тандоо аркылуу кайра жаздым. Экөө тең жакшы иштешет.

  12. 17

    Mysql тилинде жазылган сценарий үчүн чоң рахмат, анча-мынча түзөтүүлөрдү киргизүү керек болчу (HAVING) 🙂
    Gret job

  13. 18

    Укмуштай пайдалуу, чоң рахмат! Менде "WHERE" эмес, жаңы "HAVING" менен көйгөйлөр бар болчу, бирок бир жолу ушул жердеги комментарийлерди окудум (жарым сааттай тишимди кыжаалаткан = P), аны жакшы иштеп баштадым. Рахмат ^ _ ^

  14. 19
  15. 20

    Ушуга окшогон тандалган билдирүү эсептөө жагынан өтө курч жана ошондуктан жай болоорун унутпаңыз. Эгерде сизде ошол суроолор көп болсо, анда ал тез эле ишти оңунан чыгарып жибериши мүмкүн.

    Эсептелген аралык менен аныкталган SQUARE аянтын колдонуп, биринчи (чийки) тандоону жүргүзүү бир кыйла азыраак интенсивдүү ыкма болуп саналат, башкача айтканда, "тандап * таблицадан lat1 жана lat2 жана узундук lon1 менен lon2". lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, лонго окшош. latdiff ~ = аралык / 111 (км үчүн), же аралык / 69 кеңдиктин 1 градусунан тартып ~ 111 км (жер бир аз овал болгондуктан, бир аз өзгөрүү, бирок бул максат үчүн жетиштүү). londiff = алыстык / (abs (cos (deg2rad (кеңдик)) * 111)) - же 69 чакырымга (вариацияларды эсепке алуу үчүн бир аз чоңураак чарчы алсаңыз болот). Андан кийин анын натыйжасын алып, аны радиалдык тандоого өткөрүңүз. Сиздин латиф же лондифф ушул диапазондон чыкса, чектен тышкары координаттарды эсепке алууну унутпаңыз - башкача айтканда алгылыктуу узундуктун диапазону -180 ден +180 ге чейин жана алгылыктуу кеңдиктин диапазону -90 дан +90 га чейин. . Көбүнчө, бул колдонулбашы мүмкүн экендигин эске алыңыз, анткени ал тынчтык океаны аркылуу уюлдан уюлга чейинки сызык боюнча эсептөөлөргө гана таасир этет, бирок ал чукотканын бир бөлүгү менен Аляска бөлүгүн кесилишет.

    Биздин жетишкендигибиз - ушул эсептөөнү жүргүзгөн упайлардын саны бир кыйла кыскаргандыгы. Эгерде сизде бир миллион глобалдык упайлар бар болсо, алар болжол менен бирдей бөлүштүрүлүп, 100 км аралыкта издеп көргүңүз келсе, анда биринчи (тез) издөөңүз 10000 чарчы / чакырым аянтты түзүп, болжол менен 20 натыйжа берет (бирдей бөлүштүрүүнүн негизинде) Бул 500 миллион чарчы км жер бетинин аянты), демек, сиз бул суроо үчүн миллион жолу эмес, 20 жолу татаал аралыкты эсептөөнү жүргүзөсүз.

    • 21

      Мисалдагы анча-мынча ката ... бул биздин 50 чарчы метр аралыкта болот (100 эмес), анткени биз… чарчыбыздын “радиусун” карап жатабыз.

      • 22

        Фантастикалык кеңеш! Мен чындыгында ички чарчы тартылган функцияны жазган персонал менен иштеп чыктым, андан кийин периметрдин айланасында "квадраттар" түзүп, калган пункттарды кошуп, чыгарып салдым. Жыйынтыгы укмуштай тез натыйжа болду - ал миллиондогон упайларды микросекундалар менен баалай алды.

        Менин жогорудагы мамилем сөзсүз "чийки", бирок жөндөмдүү. Дагы бир жолу рахмат!

        • 23

          Даг,

          Lat узун чекитинин көп бурчтуктун чегинде экендигин баалоо үчүн mysql жана php колдонууга аракет кылып келем. Сиздин иштеп чыгуучу досуңуз бул тапшырманы кандайча аткарууга боло тургандыгын мисал кылып жарыялаганын билесизби. Же сиз жакшы мисалдарды билесизби. Алдын ала рахмат.

  16. 24

    Баарына салам, бул менин сыналган SQL билдирүүм:

    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 мага аралыкты айтып жатат, тилке катары жок, мен буйрукту колдоно алам, мен ЖЕРДЕ жок жасай алам, бирок ал иштейт, бирок аны менен эмес ...

  17. 26

    Бул кандай сонун, бирок канаттуулар кандай учса ошондой болот. Google maps API'ни кандайдыр бир жол менен киргизип койсоңуз болмок (жолдорду колдонуу ж.б.) Жөн гана транспорттун башка түрүн колдонуп идея берүү үчүн. Мен дагы деле PHPде жасалма күйгүзүү функциясын жасай элекмин, ал саякатчылардын көйгөйлөрүн натыйжалуу чече алат. Бирок мен ойлойм, ал үчүн кээ бир коддоруңузду дагы бир жолу колдоно алам.

  18. 27
  19. 28

    Жакшы макала! Эки чекиттин ортосундагы аралыкты эсептөөнү сүрөттөгөн көптөгөн макалаларды таптым, бирок чындыгында SQL үзүндүсүн издедим.

  20. 29
  21. 30

    Бул формула үчүн чоң рахмат. Мени жеп жаткан дүкөндүн жайгашкан жери боюнча долбоорунда бир нече убакыт сакал жок.

  22. 31
  23. 32
  24. 36

    Акыры менин көйгөйүмдү чечкен бул баракчаны табуу үчүн 2 күндүк изилдөө. Мен WolframAlpha-ны өчүрүп, математиканы тазалаганым жакшы окшойт. WHERE ден HAVINGге которулганда, менин сценарийим иштей баштады. РАХМАТ САГА

  25. 37
  26. 39

    Бул мен тапкан биринчи барак болсо экен деп тилейм. Көптөгөн ар кандай буйруктарды сынап көргөндөн кийин, бул бир гана талаптагыдай иштеп, менин маалыматтар базасына дал келүү үчүн минималдуу өзгөрүүлөр керек болчу.
    Рахмат абдан көп!

  27. 40

    Бул мен тапкан биринчи барак болсо экен деп тилейм. Көптөгөн ар кандай буйруктарды сынап көргөндөн кийин, бул бир гана талаптагыдай иштеп, менин маалыматтар базасына дал келүү үчүн минималдуу өзгөрүүлөр керек болчу.
    Рахмат абдан көп!

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

    Мен бул формула иштээрин билем, бирок жердин радиусу кайсы жерде эске алынганын көрө албай жатам. Сураныч, мени бирөө жарык кылып бере алабы?

  34. 49
  35. 50

    Дуглас сонун нерселер. Эки чекиттин Узун / Лат / подшипниктерин эске алып, кесилиш чекитин алууга аракет кылдыңызбы?

  36. 52
  37. 53
  38. 55
  39. 56

    Дуглас, бул укмуштуу код үчүн рахмат. Менин GPS коомчулугумдун порталында муну кантип жасасам болот деп башымды жарып жатам. Сиз менин сааттарымды сактап калдыңыз.

  40. 58

    ушул пайдалуу макаланы жарыялаганыңыз үчүн рахмат,  
    бирок эмнегедир сурайын дедим эле
    mysql db ичиндеги координаттар менен колдонуучу тарабынан phpге коюлган координалардын ортосундагы аралыкты кантип алууга болот?
    так сүрөттөө үчүн:
    1. колдонуучу db жана колдонуучунун координаттарынан көрсөтүлгөн маалыматтарды тандоо үчүн [id] киргизиши керек
    2. php файлы [id] аркылуу максаттуу маалыматтарды (координаттарды) алат, андан кийин колдонуучу менен максаттуу чекиттин ортосундагы аралыкты эсептейт

    же жөн эле төмөндөгү коддон аралыкты алса болобу?

    $ qry = “SELECT *, (((acos (sin ((.. $ Enlem.” * pi () / 180)) * sin ((`Latitude` * pi () / 180)) + cos ((“. $ кеңдик. ”* pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((“. $ longitude.” - `Longitude`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) алыстык катары `MyTable` WHERE қашықтық> =“. $ Distance. ” >>>> Мен бул жерден алыстыкты “чыгарып” алсам болобу?
    дагы бир жолу рахмат,
    Тимми С.

  41. 60

    макул, мен аракет кылган нерселердин бардыгы иштебей жатат. Айтайын дегеним, менин колумда эмне бар, бирок аралыктар алысыраак.

    Бул коддун эмнеси туура эмес экендигин кимдир бирөө көрө алабы?

    if (isset ($ _ POST ['submitted'])) {$ z = $ _POST ['индекс']; $ r = $ _POST ['радиус']; echo "" үчүн жыйынтыктар. $ 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. city, z1.state mrk m, zip z1, zip z2 КАЙДА m.zipcode = z1.zipcode ЖАНА z2.zipcode = $ z ЖАНА (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 ") or die (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ store = $ row ['LocAddSt']. ””; $ store. = $ row ['LocAddCity']. ”,“. $ row ['LocAddState']. ” “. $ Row ['индекс']; $ width1 = $ row ['lat']; $ longitude1 = $ row ['lon']; $ width2 = $ row ['y1']; $ longitude2 = $ row ['x1']; $ city = $ row ['city']; $ state = $ row ['state']; $ dis = getnew ($ туурасы1, $ узундук1, $ кеңдик2, $ узундук2, $ бирдик = 'Mi'); // $ dis = аралык ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ row ['verified']; if ($ verified == '1') {echo “”; echo “”. $ store. ””; echo $ dis. ”Миля (лор) алыс”; echo “”; } else {echo "". $ store. ""; echo $ dis. ”Миля (лор) алыс”; echo “”; }}}

    my functions.php коду
    getnew функциясы ($ width1, $ longitude1, $ width2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ расстояние = (sin (deg2rad ($ Enlem1)) * sin (deg2rad ($ Enlem2)))) + (cos (deg2rad ($ Enlem1)) * cos (deg2rad ($ Enlem2)) * * cos (deg2rad ($ theta)) ); $ арақашықтық = acos ($ аралык); $ distance = rad2deg ($ distance); $ аралык = $ аралык * 60 * 1.1515; switch ($ unit) {case 'Mi': break; case 'Km': $ distance = $ distance * 1.609344; } return (round ($ distance, 2)); }

    Алдын ала рахмат

  42. 61
  43. 62

    Эй Дуглас, сонун макала. Сиздин географиялык түшүнүктөр жана код жөнүндө түшүндүрмөлөрүңүз чындыгында кызыктуу болду. Менин бир гана сунушум, орунду көрсөтүү жана көрсөтүү үчүн кодду чегиндирүү (мисалы, Stackoverflow сыяктуу). Сиздин мейкиндикти сактап калгыңыз келерин түшүнөм, бирок кадимки код аралыгы / чегинүүсү мен үчүн, программист катары, окууну жана бөлүүнү жеңилдетет. Кандай болсо дагы, бул кичинекей нерсе. Ишиңизди уланта бериңиз.

    • 63

      Рахмат! Мен постту бир аз өзгөрттүм ... бирок теңдемелер ушунчалык көп орунду ээлейт жана ушунчалык узун болгондуктан, ал өтө эле көп жардам берет деп ишенбейм.

  44. 64
  45. 65

    Бул жерде функцияны колдонуп жатып, биз аралыктын бир түрүн алабыз .. сурамжылоону колдонуп, анын башка аралык түрүн сурайбыз

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

    тандап алганда эки эсе формуланы колдонуу тезирээк (mysql 5.9) көрүнөт:
    $ formula = "(((acos (sin ((.. $ Enlem." * pi () / 180)) * sin ((`Latitude` * pi () / 180)) + cos ((". $ Enlem. ”* Pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((". $ Longitude." - `Longitude`) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SELECT *,'. $ formula. ' ".. $ формуласы" деген столдон алыстык катары. ' <= '. $ аралык;

  51. 71
  52. 72

    Бул макаланы кыркып бергениңиз үчүн чоң рахмат, бул абдан пайдалуу.
    PHP алгач "Жеке үй бети" деп аталган жөнөкөй сценарий платформасы катары түзүлгөн. Азыркы учурда PHP (гипертексттеги алдын-ала процессордун кыскартмасы) - Microsoft корпорациясынын Active Server Pages (ASP) технологиясынын альтернатива.

    PHP - бул динамикалык веб-баракчаларды түзүү үчүн колдонулган сервер тарабындагы ачык тил. Аны HTML ичине киргизсе болот. PHP адатта Linux / UNIX веб серверлериндеги MySQL маалымат базасы менен бирге колдонулат. Бул сценарийдин эң популярдуу тили болсо керек.

  53. 73

    Жогоруда айтылган чечим туура эмес иштеп жаткандыгын таптым.
    Мен төмөнкүгө өтүшүм керек:

    $ qqq = “SELECT *, (((acos (sin ((.. $ Enlem.” * pi () / 180)) * sin ((`latt` * pi () / 180)) + cos ((”. $ кеңдик. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((”. $ longitude.“ - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) FROM `regist`“ аралыгы;

  54. 75

    рахмат, мырза, сизди эң ​​сонун тебелеп жатат .. бирок менде бир суроо бар, эгер ондук чекитсиз чыгарсам, анда эмне кылсам болот ..?

    Алдын ала рахмат.

  55. 76

    Саламатсызбы, суранам, бул боюнча сиздин жардамыңызга аябай муктаж болом.

    Мен веб-серверге өтүнүч менен кайрылдым http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ кеңдик
    -2.23389 = узундук
    жана 20 = мен алгым келген аралык

    Сиздин формулаңызды колдонуп, ал dbдеги бардык катарларды алат

    $ results = DB :: select (DB :: raw (“SELECT *, (((acos (sin ((.. $ Enlem.” * pi () / 180)) * sin ((lat * pi () / 180) )) + cos ((“. $ Enlem.” * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((“. $ longitude.” - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) алыстык катары FROM маркерлерден HAVING арақашықтық> = “. $ Аралык));

    [{"Id": 1, "name": "Frankie Johnnie & Luigo Too", "дарек": "939 W El Camino Real, Mountain View, CA", "lat": 37.386337280273, "lng": - 122.08582305908, "Расстояние": 16079.294719663}, {"id": 2, "name": "Amici's East Coast Pizzeria", "address": "790 Castro St, Mountain View, CA", "lat": 37.387138366699, "lng": -122.08323669434, "расстояние": 16079.175940152}, {"id": 3, "name": "Kapp's Pizza Bar & Grill", "address": "191 Castro St, Mountain View, CA", "lat": 37.393886566162, "Lng": - 122.07891845703, "distance": 16078.381373826}, {"id": 4, "name": "Round Table Pizza: Mountain View", "address": "570 N Shoreline Blvd, Mountain View, CA", "Lat": 37.402652740479, "lng": - 122.07935333252, "Расстояние": 16077.420540582}, {"id": 5, "name": "Tony & Alba's Pizza & Pasta", "дарек": "Escuela проспекти, 619 View, CA "," lat ": 37.394012451172," lng ": - 122.09552764893," distance ": 16078.563225154}, {" id ": 6," name ":" Oregano's Wood-Fired Pizza "," address ":" 4546 El Camino Real, Лос-Альтос, Калифорния "," лат ": 37.401725769043," lng ": - 122.11464691162," расстояние ": 16077.937560795}, {" id ": 7," name ":" Bars and grills "," address ":" Уайтли көчөсү, 24, Манчестер "," lat ": 53.485118865967," lng ": - 2.1828699111938," расстояние ": 8038.7620112314}]

    Мен жөн гана 20 чакырым аралыкты алгым келет, бирок ал бардык катарларды алып келет. Сураныч, мен эмне туура эмес кылып жатам?

Эмне деп ойлойсуң?

Бул сайт спам азайтуу Akismet колдонот. Сиздин комментарий маалымат кандайча иштелишин Үйрөнүү.