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 ашиглан тооцоо хийх боломжтой. Энэ жишээнд би MyTQL-ээс My өргөө ба $ уртраг дахь байршил руугаа (зайнд) хувьсагчаас бага эсвэл тэнцүү бүх бичлэгийг олохын тулд MyTQL-ээс асуулга хийх гэж байна.

Тодорхой хүрээнд бүх бичлэгийг авах асуулга зайн өргөрөг ба уртрагийн хоёр цэгийн хоорондох милийн зайг тооцоолох замаар:

$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: Өргөрөг ба уртраг ашиглан километрийн зайг тооцоолох замаар бүх бичлэгийг сэргээх

MySQL-д километр ашиглах SQL асуулга энд байна.

$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 санал

  1. 1

    Хуваалцсанд маш их баярлалаа. Энэ бол амархан хуулж буулгах ажил байсан бөгөөд маш сайн ажилладаг. Та намайг олон цаг хэмнэсэн.
    C руу шилжүүлж буй хүмүүст зориулсан мэдээлэл:
    давхар deg2rad (давхар град) {буцах deg * (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 формат ба градусын хооронд шилжих ёстой. Би хуудасны доод талд энэ URL дээр томъёо олсон. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    Үүнийг хэрхэн баталгаажуулахыг мэддэг хүн байна уу?

    Баярлалаа!
    Харри

  10. 15

    Сайн уу,

    Өөр нэг асуулт. Доорх шиг NMEA утаснуудын томъёо бий юу?

    1342.7500, N, 10052.2287, E

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

    баярлалаа,
    Харри

  11. 16

    ХААНА миний хувьд ажиллахгүй байгааг би бас олж мэдсэн. Үүнийг HAVING болгож өөрчилсөн бөгөөд бүх зүйл төгс төгөлдөр болно. Эхлээд би сэтгэгдлүүдийг уншаагүй бөгөөд үүрэн сонголтыг ашиглан дахин бичсэн. Хоёулаа зүгээр ажиллах болно.

  12. 17
  13. 18

    Гайхалтай тустай, маш их баярлалаа! Надад "ХААНА" гэхээсээ илүү шинэ "HAVING" -тэй холбоотой зарим асуудал тулгарч байсан боловч энд бичсэн сэтгэгдлүүдийг нэг удаа уншаад (бухимдалтайгаар = P шүд шүдээ хавиран хагас цаг орчим ажилласны дараа) үүнийг сайхан ажиллуулав. Баярлалаа ^ _ ^

  14. 19
  15. 20

    Иймэрхүү сонгосон мэдэгдэл нь тооцооллын хувьд маш хүчтэй бөгөөд удаан байх болно гэдгийг санаарай. Хэрэв танд эдгээр асуултууд маш их байгаа бол энэ нь асуудлыг хурдан арилгах болно.

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

    Бидний хийж гүйцэтгэсэн зүйл бол энэ тооцоог хийх онооны тоог мэдэгдэхүйц бууруулсан явдал юм. Хэрэв танд мэдээллийн баазад нэг сая дэлхийн оноо ойролцоогоор жигд тархсан бөгөөд та 100 км дотор хайлт хийхийг хүсч байгаа бол таны анхны (хурдан) хайлт 10000 хавтгай дөрвөлжин км талбайтай бөгөөд 20 орчим үр дүн өгөх болно ( гадаргын талбай нь ойролцоогоор 500M кв км) бөгөөд энэ нь та энэ асуултын хувьд төвөгтэй зайн тооцоог сая удаа биш 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
    • 38

      Георгийд баярлалаа. Би "зай" гэсэн баганыг олж аваагүй хэвээр байв. Нэгэнт би ХААНЫГ HAVING болгож өөрчилсөн бол энэ нь сэтгэл татам ажиллав!

  26. 39

    Энэ бол миний энэ хуудсан дээрээс олсон анхны хуудас байсан болоосой. Олон янзын командыг туршиж үзсэний дараа энэ нь зөв ажиллах цорын ганц зүйл байсан бөгөөд миний мэдээллийн санд багтах хамгийн бага өөрчлөлт шаардлагатай байв.
    Маш их баярлалаа!

  27. 40

    Энэ бол миний энэ хуудсан дээрээс олсон анхны хуудас байсан болоосой. Олон янзын командыг туршиж үзсэний дараа энэ нь зөв ажиллах цорын ганц зүйл байсан бөгөөд миний мэдээллийн санд багтах хамгийн бага өөрчлөлт шаардлагатай байв.
    Маш их баярлалаа!

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

    Дуглас танд маш их баярлалаа. Энэ нь төгс ажиллаж байна.

  33. 47

    Энэ томъёо нь үр дүнгээ өгдөг гэдгийг би мэднэ, гэхдээ дэлхийн радиусыг хаана харгалзан үзэхийг би харж чадахгүй байна. Хэн нэгэн намайг гэгээрүүлж чадах уу?

  34. 49
  35. 50
  36. 52

    Дуглас танд баярлалаа, SQL Query нь яг хэрэгтэй зүйл байсан бөгөөд би үүнийг өөрөө бичих хэрэгтэй гэж бодлоо. Та намайг өргөргийн уртрагийн хэдэн цагийн муруйгаас аврав!

  37. 53

    Би Errormessage: MySQL Query дээрх 'where clause' хэсэгт үл мэдэгдэх 'зай' баганыг үргэлжлүүлэн авсаар байна.

    • 54

      Питер, бусад сэтгэгдлүүдийг уншина уу. Зарим хүмүүс WHERE / HAVING-д өөр синтакс ашиглах шаардлагатай болсон бололтой.

  38. 55
  39. 56

    Дуглас, энэ гайхалтай кодыг өгсөнд баярлалаа. Үүнийг GPS-ийн олон нийтийн портал дээр хэрхэн хийх талаар толгойгоо гашилгаж байна. Та миний цагийг хэмнэсэн.

  40. 58

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

    эсвэл доорх кодоос ердөө л зай авах боломжтой юу?

    $ qry = “SELECT *, (((acos (sin ((.. $ өргөрөг." * 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> =“. $ Distance. ” >>>> Би эндээс хол зайг "гаргаж" чадах уу?
    дахин баярлалаа,
    Тимми С.

  41. 60

    за, миний туршиж үзсэн бүхэн бүтэхгүй байна. Надад байгаа бүтээлүүд байна гэсэн үг, гэхдээ зай нь хол байна.

    Энэ кодод юу нь буруу байгааг хэн нэгэн харж болох уу?

    хэрэв (isset ($ _ POST ['ирүүлсэн'])) {$ z = $ _POST ['zipcode']; $ 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. хот, z1.state mrk m, zip z1, zip z2 ХААНА m.zipcode = z1.zipcode AND z2.zipcode = $ z AND (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 ") эсвэл үхэх (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. ""; $ store = $ row ['LocAddSt']. ””; ””; $ store. = $ row ['LocAddCity']. ",". $ row ['LocAddState']. " “. $ Row ['zipcode']; $ өргөрт1 = $ мөр ['lat']; $ longitude1 = $ row ['lon']; $ өргөрт2 = $ мөр ['y1']; $ longitude2 = $ row ['x1']; $ хот = $ мөр ['хот']; $ муж = $ мөр ['төлөв']; $ dis = getnew ($ өргөрөг1, $ уртрагийн1, $ өргөргийн2, $ уртрагийн2, $ нэгж = 'Mi'); // $ dis = зай ($ lat1, $ lon1, $ lat2, $ lon2); $ verified = $ мөр ['баталгаажсан']; хэрэв ($ verified == '1') {echo “”; echo “”. $ store. ””; echo $ dis. " милийн зайтай"; цуурай “”; } else {echo “”. $ store. ””; echo $ dis. " милийн зайтай"; цуурай “”; }}}

    миний функцууд. php код
    getnew функц ($ өргөрөг1, $ уртрагийн1, $ өргөргийн2, $ уртрагийн2, $ нэгж = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ зай = (sin (deg2rad ($ өргөрөг1)) * sin (deg2rad ($ өргөрөг2))) + + (cos (deg2rad ($ өргөрөг1))) * cos (deg2rad ($ өргөрөг2)) * cos (deg2rad ($ theta)) ); $ зай = acos ($ зай); $ зай = rad2deg ($ зай); $ зай = $ зай * 60 * 1.1515; switch ($ unit) {case 'Mi': завсарлага; тохиолдол 'Km': $ зай = $ зай * 1.609344; } буцах (дугуй ($ зай, 2)); }

    Урьд нь баярлалаа

  42. 61
  43. 62

    Хөөе Дуглас, гайхалтай нийтлэл. Газарзүйн үзэл баримтлал, кодын талаархи таны тайлбар үнэхээр сонирхолтой санагдлаа. Миний цорын ганц санал бол дэлгэцийн кодыг зайнд оруулах, догол мөр гаргах явдал юм (жишээ нь Stackoverflow гэх мэт). Та орон зайг хадгалахыг хүсч байгаа гэдгийг би ойлгож байна, гэхдээ ердийн кодын зай / догол мөр нь програмист миний хувьд унших, задлахад илүү хялбар болгоно. Юутай ч энэ бол жижиг зүйл. Гайхамшигтай ажлыг үргэлжлүүлээрэй.

  44. 64
  45. 65

    Энд функцийг ашиглаж байх үед бид нэг төрлийн зайг олж авах болно. Асуулгыг ашиглахад түүний ирэх өөр зайг ашиглана уу

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

    сонгохдоо хоёр дахин томъёог ашиглах нь илүү хурдан юм шиг санагддаг (mysql 5.9):
    $ formula = "(((acos (sin ((.. $ өргөрөг." * 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) ”;
    $ sql = 'SELECT *,'. $ formula. ' хүснэгтээс ХААНА гэсэн зайнаас '.. $ томъёо.' <= '. $ зай;

  51. 71

    баярлалаа ...

    хэрэв ажиллахгүй бол
    “ХААНА зай”

    ажиллаж байгаа бол
    “ЗАЙ БАЙХ”

  52. 72

    Энэ нийтлэлийг хяргасанд маш их баярлалаа, энэ нь маш их тустай.
    PHP нь анх “Personal Home Page” нэртэй скрипт бичих платформ хэлбэрээр бүтээгдсэн. Өнөө үед PHP (Hypertext Preprocessor гэсэн товчлол) нь Microsoft-ийн Active Server Pages (ASP) технологийн өөр хувилбар юм.

    PHP бол динамик вэб хуудас үүсгэхэд ашиглагддаг нээлттэй эх сурвалж серверийн хэл юм. Үүнийг HTML дээр суулгаж болно. PHP нь ихэвчлэн Linux / UNIX вэб сервер дээрх MySQL мэдээллийн сантай хамт хэрэглэгддэг. Энэ бол хамгийн алдартай скрипт хэл юм.

  53. 73

    Дээрх шийдэл нь зөв ажиллахгүй байгааг би олж мэдсэн.
    Би дараахь зүйлийг өөрчлөх хэрэгтэй.

    $ qqq = “SELECT *, (((acos (sin ((.. $ өргөрөг." * pi () / 180)) * sin ((`latt` * pi () / 180)) + cos ((". $ өргөрөг. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((". $ Boylam." - `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 дээрх бүх мөрүүдийг татаж авдаг

    $ үр дүн = DB :: сонгох (DB :: түүхий ("SELECT *, (((acos (sin ((.. $ өргөрөг." * pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((“. $ өргөрөг.” * pi () / 180)) * cos ((лат * pi () / 180)) * cos (((“. $ уртраг.” - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) тэмдгээс FROM зай гэж HAVING distance> = “. $ Distance));

    [{"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, ”зай”: 16078.381373826}, {"id": 4, "name": "Round Table Pizza: Mountain View", "address": "570 N Shoreline Blvd, Mountain View, CA", ”Лат”: 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 "," хаяг ":" 4546 El Camino Real, Лос Алтос, Калифорниа ”,” лат ”: 37.401725769043,” lng ”: - 122.11464691162,” зай ”: 16077.937560795}, {“ id ”: 7,” name ”:“ баар, сараалж ”,“ хаяг ”:” Уайтли гудамж, 24, Манчестер ”,“ лат ”: 53.485118865967,” lng ”: - 2.1828699111938,” зай ”: 8038.7620112314}]

    Би 20 милийн зайтай мөрүүдийг л авмаар байна, гэхдээ энэ нь бүх мөрүүдийг авчирдаг. Би юу буруу хийж байгаа юм бэ

Чи юу гэж бодож байна?

Энэ сайт нь спамыг багасгахын тулд Akismet-ийг ашигладаг. Таны өгөгдлийг хэрхэн боловсруулдаг талаар суралц.