ຄິດ​ໄລ່​ຫຼື​ສອບ​ຖາມ​ໄລ​ຍະ​ຫ່າງ​ວົງ​ຈອນ​ທີ່​ຍິ່ງ​ໃຫຍ່​ລະ​ຫວ່າງ​ຈຸດ​ຂອງ​ເສັ້ນ​ຂະ​ຫນານ​ແລະ​ເສັ້ນ​ແວງ​ໂດຍ​ນໍາ​ໃຊ້​ສູດ Haversine (PHP​, Python​, MySQL​, ຕົວ​ຢ່າງ MSSQL​)

ສູດ Haversine - ໄລຍະຫ່າງວົງກົມທີ່ຍິ່ງໃຫຍ່ - PHP, Python, MySQL

ເດືອນນີ້ຂ້ອຍໄດ້ຂຽນໂປຣແກຣມຂ້ອນຂ້າງຂື້ນໃນ PHP ແລະ MySQL ກ່ຽວກັບ GIS. Snooping ປະມານສຸດທິ, ຂ້າພະເຈົ້າໃນຕົວຈິງແມ່ນມີຄວາມຫຍຸ້ງຍາກໃນການຊອກຫາບາງສ່ວນຂອງ ການຄິດໄລ່ພູມສາດ ເພື່ອຊອກຫາໄລຍະຫ່າງລະຫວ່າງສອງສະຖານທີ່ດັ່ງນັ້ນຂ້ອຍຢາກແບ່ງປັນໃຫ້ເຂົາເຈົ້າຢູ່ທີ່ນີ້.

ແຜນທີ່ການບິນຂອງເອີຣົບດ້ວຍໄລຍະທາງທີ່ຍິ່ງໃຫຍ່

ວິທີງ່າຍໆຂອງການຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງສອງຈຸດແມ່ນການໃຊ້ສູດ Pythagorean ເພື່ອຄິດໄລ່ hypotenuse ຂອງສາມຫຼ່ຽມ (A² + B² = C²). ນີ້ແມ່ນເປັນທີ່ຮູ້ຈັກກັນໃນນາມ ໄລຍະທາງ Euclidean.

ນັ້ນແມ່ນການເລີ່ມຕົ້ນທີ່ ໜ້າ ສົນໃຈແຕ່ມັນບໍ່ກ່ຽວຂ້ອງກັບພູມສາດເພາະວ່າໄລຍະທາງລະຫວ່າງເສັ້ນຂະ ໜານ ແລະເສັ້ນແວງແມ່ນໄລຍະທາງ ໄລຍະຫ່າງບໍ່ເທົ່າກັນ ນອກ. ໃນຂະນະທີ່ທ່ານໃກ້ຈະໄປຫາເສັ້ນສູນສູດ, ເສັ້ນຂະ ໜານ ເສັ້ນຫ່າງກັນໄກກັນ. ຖ້າທ່ານໃຊ້ສົມຜົນສາມຫລ່ຽມງ່າຍໆບາງຊະນິດ, ມັນອາດຈະວັດແທກໄລຍະທາງທີ່ຖືກຕ້ອງໃນສະຖານທີ່ ໜຶ່ງ ແລະຜິດພາດໃນອີກບ່ອນ ໜຶ່ງ, ເພາະວ່າເສັ້ນໂຄ້ງຂອງໂລກ.

ໄລຍະທາງວົງກົມທີ່ຍິ່ງໃຫຍ່

ບັນດາເສັ້ນທາງທີ່ເດີນທາງໄກຈາກທົ່ວໂລກເອີ້ນວ່າເສັ້ນທາງ ໄລຍະທາງວົງກົມທີ່ຍິ່ງໃຫຍ່. ນັ້ນຄື… ໄລຍະຫ່າງທີ່ສັ້ນທີ່ສຸດລະຫວ່າງສອງຈຸດໃນວົງມົນແມ່ນແຕກຕ່າງຈາກຈຸດທີ່ຢູ່ໃນແຜນທີ່ຮາບພຽງ. ສົມ​ທົບ​ກັບ​ຄວາມ​ຈິງ​ທີ່​ວ່າ​ເສັ້ນ latitude ແລະ​ເສັ້ນ​ແວງ​ບໍ່​ໄດ້​ເທົ່າ​ທຽມ​ກັນ… ແລະ​ທ່ານ​ໄດ້​ຮັບ​ການ​ຄິດ​ໄລ່​ທີ່​ຍາກ.

ນີ້ແມ່ນ ຄຳ ອະທິບາຍວິດີໂອທີ່ດີເລີດຂອງວິທີການ Great Circles ເຮັດວຽກ.

ສູດ Haversine

ໄລຍະທາງທີ່ໃຊ້ເສັ້ນໂຄ້ງຂອງ ໜ່ວຍ ໂລກໄດ້ຖືກລວມເຂົ້າໃນ ສູດ haversine, ເຊິ່ງໃຊ້ trigonometry ເພື່ອອະນຸຍາດໃຫ້ມີເສັ້ນໂຄ້ງຂອງແຜ່ນດິນໂລກ. ເມື່ອທ່ານ ກຳ ລັງຊອກຫາໄລຍະຫ່າງລະຫວ່າງ 2 ສະຖານທີ່ເທິງໂລກ (ໃນຂະນະທີ່ຝູງບິນບິນ), ສາຍກົງແມ່ນເສັ້ນໂຄ້ງແທ້ໆ.

ນີ້ສາມາດໃຊ້ໄດ້ໃນການບິນຜ່ານທາງອາກາດ - ທ່ານເຄີຍໄດ້ເບິ່ງແຜນທີ່ຂອງຖ້ຽວບິນທີ່ແທ້ຈິງແລະສັງເກດເຫັນວ່າມັນຖືກໂຄ້ງບໍ? ນັ້ນແມ່ນຍ້ອນວ່າມັນສັ້ນກວ່າທີ່ຈະບິນໃນທ້ອງຟ້າລະຫວ່າງສອງຈຸດກ່ວາໂດຍກົງກັບສະຖານທີ່.

PHP: ຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງ 2 ຈຸດຂອງເສັ້ນຂະ ໜານ ແລະເສັ້ນແວງ

ນີ້ແມ່ນສູດ PHP ສໍາລັບການຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງສອງຈຸດ (ພ້ອມກັບ Mile vs. Kilometer conversion) ມົນເປັນສອງຕໍາແໜ່ງທົດສະນິຍົມ.

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

ຕົວແປແມ່ນ:

  • $Latitude1 – ຕົວແປສຳລັບເສັ້ນຂະໜານຂອງສະຖານທີ່ທຳອິດຂອງທ່ານ.
  • $Longitude1 – ຕົວແປສໍາລັບເສັ້ນແວງສະຖານທີ່ທໍາອິດຂອງທ່ານ
  • $Latitude2 – ຕົວແປສຳລັບເສັ້ນຂະໜານຂອງສະຖານທີ່ທີສອງຂອງທ່ານ.
  • $Longitude2 – ຕົວແປສຳລັບເສັ້ນແວງຂອງສະຖານທີ່ທີສອງຂອງທ່ານ.
  • $unit – ເປັນຄ່າເລີ່ມຕົ້ນ ໄມ. ນີ້ສາມາດໄດ້ຮັບການປັບປຸງຫຼືຜ່ານ ກິໂລແມັດ.

Python: ຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງ 2 ຈຸດຂອງເສັ້ນຂະໜານ ແລະເສັ້ນແວງ

ແນວໃດກໍ່ຕາມ, ນີ້ແມ່ນສູດ Python ສໍາລັບການຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງສອງຈຸດ (ພ້ອມກັບ Mile vs. Kilometer conversion) ມົນເປັນສອງຕໍາແໜ່ງທົດສະນິຍົມ. ສິນເຊື່ອໃຫ້ກັບລູກຊາຍຂອງຂ້ອຍ, Bill Karr ຜູ້ທີ່ເປັນ Data Scientist ສໍາລັບ OpenINSIGHTS, ສໍາລັບລະຫັດ.

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)

ຕົວແປແມ່ນ:

  • ເສັ້ນຂະໜານ 1 – ຕົວແປສໍາລັບສະຖານທີ່ທໍາອິດຂອງທ່ານ latitude.
  • ເສັ້ນແວງ1 – ຕົວແປສໍາລັບສະຖານທີ່ທໍາອິດຂອງທ່ານ ເສັ້ນແວງ
  • ເສັ້ນຂະໜານ 2 – ຕົວແປສໍາລັບສະຖານທີ່ທີສອງຂອງທ່ານ latitude.
  • ເສັ້ນແວງ2 – ຕົວແປສໍາລັບສະຖານທີ່ທີສອງຂອງທ່ານ ເສັ້ນແວງ.
  • ຫນ່ວຍບໍລິການ – ເປັນຄ່າເລີ່ມຕົ້ນ ໄມ. ນີ້ສາມາດໄດ້ຮັບການປັບປຸງຫຼືຜ່ານ ກິໂລແມັດ.

MySQL: ດຶງເອົາບັນທຶກທັງໝົດພາຍໃນຂອບເຂດໃດໜຶ່ງໂດຍການຄຳນວນໄລຍະທາງເປັນໄມລ໌ໂດຍໃຊ້ເສັ້ນຂະໜານ ແລະເສັ້ນແວງ

ມັນຍັງສາມາດໃຊ້ SQL ເພື່ອເຮັດການຄິດໄລ່ເພື່ອຊອກຫາບັນທຶກທັງ ໝົດ ພາຍໃນໄລຍະທາງສະເພາະ. ໃນຕົວຢ່າງນີ້, ຂ້ອຍຈະສອບຖາມ MyTable ໃນ MySQL ເພື່ອຊອກຫາບັນທຶກທັງ ໝົດ ທີ່ນ້ອຍກວ່າຫລືເທົ່າກັບຕົວແປ $ distance (ໃນ Miles) ກັບສະຖານທີ່ຂອງຂ້ອຍທີ່ $ latitude ແລະ $ 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 ທີ່ຂ້ອຍ ກຳ ລັງຜ່ານຈຸດຍາວຂອງຈຸດ.
  • $ latitude - ນີ້ແມ່ນຕົວແປ PHP ທີ່ຂ້ອຍ ກຳ ລັງຜ່ານຈຸດຍາວຂອງຈຸດ.
  • $ ໄລຍະທາງ - ນີ້ແມ່ນໄລຍະທາງທີ່ທ່ານຕ້ອງການເພື່ອຊອກຫາບັນທຶກທັງ ໝົດ ທີ່ນ້ອຍກວ່າຫລືເທົ່າກັບ.
  • ຕາຕະລາງ - ນີ້ແມ່ນຕາຕະລາງ…ທ່ານຕ້ອງການປ່ຽນບ່ອນນັ້ນດ້ວຍຊື່ຕາຕະລາງຂອງທ່ານ.
  • latitude - ນີ້ແມ່ນຂົງເຂດຂອງເສັ້ນຂະ ໜານ ຂອງທ່ານ.
  • ເສັ້ນແວງ - ນີ້ແມ່ນພາກສະຫນາມຂອງຄວາມຍາວຂອງທ່ານ.

MySQL: ດຶງຂໍ້ມູນທັງໝົດພາຍໃນຂອບເຂດໃດໜຶ່ງໂດຍການຄຳນວນໄລຍະທາງເປັນກິໂລແມັດໂດຍໃຊ້ເສັ້ນຂະໜານ ແລະເສັ້ນແວງ

ແລະນີ້ແມ່ນ ຄຳ ຖາມ 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 ທີ່ຂ້ອຍ ກຳ ລັງຜ່ານຈຸດຍາວຂອງຈຸດ.
  • $ latitude - ນີ້ແມ່ນຕົວແປ PHP ທີ່ຂ້ອຍ ກຳ ລັງຜ່ານຈຸດຍາວຂອງຈຸດ.
  • $ ໄລຍະທາງ - ນີ້ແມ່ນໄລຍະທາງທີ່ທ່ານຕ້ອງການເພື່ອຊອກຫາບັນທຶກທັງ ໝົດ ທີ່ນ້ອຍກວ່າຫລືເທົ່າກັບ.
  • ຕາຕະລາງ - ນີ້ແມ່ນຕາຕະລາງ…ທ່ານຕ້ອງການປ່ຽນບ່ອນນັ້ນດ້ວຍຊື່ຕາຕະລາງຂອງທ່ານ.
  • latitude - ນີ້ແມ່ນຂົງເຂດຂອງເສັ້ນຂະ ໜານ ຂອງທ່ານ.
  • ເສັ້ນແວງ - ນີ້ແມ່ນພາກສະຫນາມຂອງຄວາມຍາວຂອງທ່ານ.

ຂ້າພະເຈົ້າໄດ້ ນຳ ໃຊ້ລະຫັດນີ້ໃນເວທີການສ້າງແຜນທີ່ຂອງວິສາຫະກິດທີ່ພວກເຮົາ ນຳ ໃຊ້ ສຳ ລັບຮ້ານຂາຍຍ່ອຍທີ່ມີຫລາຍກວ່າ 1,000 ສະຖານທີ່ທົ່ວອາເມລິກາ ເໜືອ ແລະມັນໄດ້ເຮັດວຽກທີ່ສວຍງາມ.

Microsoft SQL Server ໄລຍະຫ່າງທາງພູມສາດ: STDistance

ຖ້າທ່ານກໍາລັງໃຊ້ Microsoft SQL Server, ພວກເຂົາສະເຫນີຫນ້າທີ່ຂອງຕົນເອງ, STDistance ສໍາລັບການຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງສອງຈຸດໂດຍໃຊ້ປະເພດຂໍ້ມູນພູມສາດ.

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 ກັບ Manash Sahoo, VP ແລະສະຖາປະນິກຂອງ Highbridge.

77 ຄໍາເຫັນ

  1. 1

    ຂອບໃຈຫຼາຍໆທີ່ແບ່ງປັນ. ນີ້​ແມ່ນ​ການ​ສໍາ​ເນົາ​ແລະ​ການ​ວາງ​ໄດ້​ງ່າຍ​ແລະ​ເຮັດ​ວຽກ​ທີ່​ດີ​ເລີດ​. ເຈົ້າໄດ້ປະຫຍັດເວລາໃຫ້ຂ້ອຍຫຼາຍ.
    FYI ສໍາລັບໃຜທີ່ສົ່ງໄປຫາ C:
    double deg2rad(double deg) { return deg*(3.14159265358979323846/180.0); }

  2. 2

    ສິ້ນງາມຫຼາຍຂອງການປະກາດ – ເຮັດວຽກງາມຫຼາຍ – ຂ້າພະເຈົ້າພຽງແຕ່ໄດ້ປ່ຽນຊື່ຂອງຕາຕະລາງຖື lat-long. ມັນເຮັດວຽກໄດ້ໄວພໍສົມຄວນກັບ.. ຂ້ອຍມີຕົວເລກຂະໜາດນ້ອຍທີ່ສົມເຫດສົມຜົນ (< 400) ແຕ່ຂ້ອຍຄິດວ່າອັນນີ້ຈະເຮັດໃຫ້ຂະໜາດງາມ. ເວັບໄຊງາມຄືກັນ – ຂ້ອຍຫາກໍ່ເພີ່ມມັນໃສ່ບັນຊີ del.icio.us ຂອງຂ້ອຍ ແລະຈະກວດເບິ່ງຄືນເປັນປົກກະຕິ.

  3. 4
  4. 5

    ຂ້ອຍຄົ້ນຫາຕະຫຼອດມື້ສໍາລັບການຄິດໄລ່ທາງໄກແລະພົບ harversine algorithm, ຂອບໃຈທີ່ທ່ານໃຫ້ຕົວຢ່າງກ່ຽວກັບວິທີການໃສ່ມັນຢູ່ໃນຄໍາຖະແຫຼງທີ່ sql. ຂອບໃຈ ແລະຊົມເຊີຍ, ດານີເອນ

  5. 8

    ຂ້ອຍຄິດວ່າ SQL ຂອງເຈົ້າຕ້ອງການຄໍາຖະແຫຼງການ.
    ແທນທີ່ຈະເປັນ WHERE distance <= $distance you may need to
    ໃຊ້ HAVING distance <= $distance

    ຖ້າ ບໍ່ ດັ່ງ ນັ້ນ ຂໍ ຂອບ ໃຈ ສໍາ ລັບ ຂ້າ ພະ ເຈົ້າ ຊໍ່ ຂອງ ທີ່ ໃຊ້ ເວ ລາ ແລະ ພະ ລັງ ງານ.

    • 9

      ສະບາຍດີ David,

      ຖ້າທ່ານກໍາລັງເຮັດປະເພດຂອງ GROUP BY ຄໍາສັ່ງໃດກໍ່ຕາມ, ທ່ານຈະຕ້ອງມີ HAVING. ຂ້ອຍບໍ່ໄດ້ເຮັດແບບນັ້ນໃນຕົວຢ່າງຂ້າງເທິງ.

      Doug

  6. 10
  7. 11

    ຂອບໃຈຫຼາຍໆ. ເຈົ້າໄດ້ເຮັດວຽກທີ່ດີເລີດນັ້ນແມ່ນສິ່ງທີ່ຂ້ອຍຕ້ອງການແທ້ໆ. ຂອບ​ໃຈ​ຫຼາຍໆ.

  8. 12

    ຂອບໃຈຫຼາຍໆສຳລັບການແບ່ງປັນລະຫັດນີ້. ມັນໄດ້ຊ່ວຍປະຢັດເວລາການພັດທະນາໃຫ້ຂ້ອຍຫຼາຍ. ນອກຈາກນັ້ນ, ຂໍຂອບໃຈກັບຜູ້ອ່ານຂອງທ່ານສໍາລັບການຊີ້ໃຫ້ເຫັນວ່າຄໍາຖະແຫຼງທີ່ HAVING ເປັນສິ່ງຈໍາເປັນສໍາລັບ MySQL 5.x. ມີປະໂຫຍດຫຼາຍ.

  9. 14

    ສູດຂ້າງເທິງນີ້ແມ່ນປະຫຍັດເວລາຫຼາຍ. ຂອບໃຈຫຼາຍໆ.
    ຂ້ອຍຍັງຕ້ອງປ່ຽນລະຫວ່າງຮູບແບບ NMEA ແລະ Degrees. ຂ້ອຍພົບສູດຢູ່ໃນ URL ນີ້ຢູ່ດ້ານລຸ່ມຂອງຫນ້າ. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    ມີໃຜຮູ້ວິທີກວດສອບອັນນີ້ບໍ?

    ຂອບ​ໃຈ!
    Harry

  10. 15

    ສະບາຍດີ,

    ຄໍາຖາມອື່ນ. ມີສູດສໍາລັບ NMEA strings ຄືກັບອັນຂ້າງລຸ່ມນີ້ບໍ?

    1342.7500,N,10052.2287,E

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

    ຂໍຂອບໃຈ,
    Harry

  11. 16

    ຂ້ອຍຍັງພົບວ່າ WHERE ບໍ່ໄດ້ຜົນສໍາລັບຂ້ອຍ. ປ່ຽນມັນເປັນ HAVING ແລະທຸກຢ່າງເຮັດວຽກທີ່ສົມບູນແບບ. ທໍາອິດຂ້ອຍບໍ່ໄດ້ອ່ານຄໍາຄິດເຫັນແລະຂຽນມັນໃຫມ່ໂດຍໃຊ້ການຄັດເລືອກແບບຊ້ອນກັນ. ທັງສອງຈະເຮັດວຽກໄດ້ດີ.

  12. 17
  13. 18

    ມີປະໂຫຍດຢ່າງບໍ່ໜ້າເຊື່ອ, ຂອບໃຈຫຼາຍໆ! ຂ້ອຍມີບັນຫາບາງຢ່າງກັບ "HAVING", ແທນທີ່ຈະ "ຢູ່ໃສ", ແຕ່ເມື່ອຂ້ອຍໄດ້ອ່ານຄໍາເຫັນຢູ່ທີ່ນີ້ (ຫຼັງຈາກປະມານເຄິ່ງຊົ່ວໂມງຂອງການກັດແຂ້ວຂອງຂ້ອຍດ້ວຍຄວາມອຸກອັ່ງ =P), ຂ້ອຍໄດ້ເຮັດວຽກໄດ້ດີ. ຂອບໃຈ ^_^

  14. 19
  15. 20

    ຈົ່ງຈື່ໄວ້ວ່າຄໍາຖະແຫຼງທີ່ເລືອກແບບນັ້ນຈະມີຄວາມເຂັ້ມຂົ້ນໃນຄອມພິວເຕີ້ຫຼາຍແລະດັ່ງນັ້ນຈຶ່ງຊ້າ. ຖ້າທ່ານມີຄໍາຖາມເຫຼົ່ານັ້ນຫຼາຍ, ມັນສາມາດຂັດຂວາງສິ່ງທີ່ຂ້ອນຂ້າງໄວ.

    ວິທີການທີ່ມີຄວາມເຂັ້ມຂຸ້ນຫນ້ອຍຫຼາຍແມ່ນການດໍາເນີນການເລືອກທໍາອິດ (ນໍ້າມັນດິບ) ໂດຍໃຊ້ພື້ນທີ່ SQUARE ທີ່ກໍານົດໂດຍໄລຍະທາງທີ່ຄິດໄລ່ເຊັ່ນ: "ເລືອກ * ຈາກຕາຕະລາງທີ່ມີເສັ້ນຂະຫນານລະຫວ່າງ lat1 ແລະ lat2 ແລະເສັ້ນແວງລະຫວ່າງ lon1 ແລະ lon2". lat1 = targetlatitude – latdiff, lat2 = targetlatitude + latdiff, ຄ້າຍຄືກັນກັບ lon. latdiff ~= ໄລ​ຍະ​ທາງ / 111 (ສໍາ​ລັບ​ກິ​ໂລ​ແມັດ​)​, ຫຼື​ໄລ​ຍະ​ທາງ / 69 ສໍາ​ລັບ​ໄມ​ນັບ​ຕັ້ງ​ແຕ່ 1 ອົງ​ສາ​ຂອງ latitude ແມ່ນ ~ 111 km (ການ​ປ່ຽນ​ແປງ​ເລັກ​ນ້ອຍ​ເນື່ອງ​ຈາກ​ວ່າ​ແຜ່ນ​ດິນ​ໂລກ​ເປັນ​ຮູບ​ໄຂ່​ເລັກ​ນ້ອຍ​, ແຕ່​ພຽງ​ພໍ​ສໍາ​ລັບ​ຈຸດ​ປະ​ສົງ​ນີ້​)​. londiff = ໄລຍະຫ່າງ / (abs(cos(deg2rad(latitude))*111)) — ຫຼື 69 ສໍາລັບໄມລ໌ (ຕົວຈິງແລ້ວທ່ານສາມາດເອົາສີ່ຫຼ່ຽມໃຫຍ່ກວ່າເລັກນ້ອຍເພື່ອຄິດໄລ່ການປ່ຽນແປງ). ຫຼັງຈາກນັ້ນ, ເອົາຜົນໄດ້ຮັບຂອງການທີ່ແລະອາຫານມັນເຂົ້າໄປໃນ radial ເລືອກ. ພຽງແຕ່ຢ່າລືມພິຈາລະນາພິກັດນອກຂອບເຂດ - ເຊັ່ນ: ຊ່ວງຂອງເສັ້ນແວງທີ່ຍອມຮັບໄດ້ແມ່ນ -180 ຫາ +180 ແລະຊ່ວງຂອງເສັ້ນຂະໜານທີ່ຍອມຮັບໄດ້ແມ່ນ -90 ຫາ +90 — ໃນກໍລະນີທີ່ latdiff ຫຼື londiff ຂອງທ່ານແລ່ນຢູ່ນອກຂອບເຂດນີ້. . ໃຫ້ສັງເກດວ່າໃນກໍລະນີຫຼາຍທີ່ສຸດ, ມັນອາດຈະໃຊ້ບໍ່ໄດ້ເນື່ອງຈາກມັນມີຜົນກະທົບພຽງແຕ່ການຄິດໄລ່ຜ່ານເສັ້ນຜ່ານມະຫາສະຫມຸດປາຊີຟິກຈາກຂົ້ວໂລກໄປຫາເສົາ, ເຖິງແມ່ນວ່າມັນຕັດບາງສ່ວນຂອງ chukotka ແລະສ່ວນຫນຶ່ງຂອງອາລາສກາ.

    ສິ່ງທີ່ພວກເຮົາເຮັດສໍາເລັດໂດຍການນີ້ແມ່ນການຫຼຸດລົງຢ່າງຫຼວງຫຼາຍໃນຈໍານວນຈຸດທີ່ທ່ານເຮັດການຄິດໄລ່ນີ້. ຖ້າທ່ານມີຈຸດທົ່ວໂລກຈໍານວນລ້ານຢູ່ໃນຖານຂໍ້ມູນທີ່ແຈກຢາຍປະມານເທົ່າທຽມກັນແລະທ່ານຕ້ອງການຄົ້ນຫາພາຍໃນ 100 ກິໂລແມັດ, ຫຼັງຈາກນັ້ນການຄົ້ນຫາທໍາອິດ (ໄວ) ຂອງທ່ານແມ່ນພື້ນທີ່ 10000 ຕາລາງກິໂລແມັດແລະອາດຈະໃຫ້ຜົນໄດ້ຮັບປະມານ 20 ຜົນໄດ້ຮັບ (ອີງຕາມການແຈກຢາຍເຖິງແມ່ນວ່າໃນໄລຍະຫນຶ່ງ. ພື້ນທີ່ປະມານ 500M sq km), ຊຶ່ງຫມາຍຄວາມວ່າທ່ານດໍາເນີນການຄິດໄລ່ໄລຍະຫ່າງທີ່ສັບສົນ 20 ເທື່ອສໍາລັບການສອບຖາມນີ້ແທນທີ່ຈະເປັນລ້ານເທື່ອ.

    • 21

      ຄວາມຜິດພາດເລັກນ້ອຍໃນຕົວຢ່າງ… ທີ່ຈະຢູ່ພາຍໃນ 50 ກິໂລແມັດ (ບໍ່ແມ່ນ 100) ເນື່ອງຈາກພວກເຮົາກຳລັງເບິ່ງ “ລັດສະໝີ” ຂອງ… ສີ່ຫຼ່ຽມມົນ.

      • 22

        ຄໍາແນະນໍາທີ່ດີເລີດ! ຕົວຈິງແລ້ວຂ້ອຍໄດ້ເຮັດວຽກກັບຜູ້ພັດທະນາທີ່ຂຽນຫນ້າທີ່ດຶງສີ່ຫຼ່ຽມພາຍໃນແລະຫຼັງຈາກນັ້ນຫນ້າທີ່ recursive ທີ່ເຮັດໃຫ້ 'ສີ່ຫລ່ຽມ' ຮອບ perimeter ເພື່ອປະກອບແລະຍົກເວັ້ນຈຸດທີ່ຍັງເຫຼືອ. ຜົນໄດ້ຮັບແມ່ນຜົນໄດ້ຮັບໄວຢ່າງບໍ່ຫນ້າເຊື່ອ - ລາວສາມາດປະເມີນຫຼາຍລ້ານຈຸດໃນ microseconds.

        ວິທີການຂອງຂ້ອຍຂ້າງເທິງແມ່ນແນ່ນອນ 'ດິບ' ແຕ່ມີຄວາມສາມາດ. ຂອບ​ໃຈ​ອີກ​ຄັ້ງ!

        • 23

          ດັ໊ກ,

          ຂ້ອຍໄດ້ພະຍາຍາມໃຊ້ mysql ແລະ php ເພື່ອປະເມີນວ່າຈຸດຍາວຢູ່ພາຍໃນ polygon. ທ່ານຮູ້ບໍ່ວ່າເພື່ອນນັກພັດທະນາຂອງທ່ານເຜີຍແຜ່ຕົວຢ່າງໃດໆກ່ຽວກັບວິທີເຮັດສໍາເລັດວຽກງານນີ້. ຫຼືເຈົ້າຮູ້ຕົວຢ່າງທີ່ດີອັນໃດ. ຂອບ​ໃຈລ່ວ​ງ​ຫນ້າ.

  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 ແມ່ນບອກຂ້ອຍວ່າໄລຍະຫ່າງ, ບໍ່ມີເປັນຖັນ, ຂ້ອຍສາມາດໃຊ້ຄໍາສັ່ງໂດຍ, ຂ້ອຍສາມາດເຮັດໄດ້ໂດຍບໍ່ມີ WHERE, ແລະມັນເຮັດວຽກ, ແຕ່ບໍ່ແມ່ນກັບມັນ ...

  17. 26

    ນີ້ແມ່ນຍິ່ງໃຫຍ່, ຢ່າງໃດກໍຕາມ, ຄືກັນກັບນົກບິນ. ມັນຈະເປັນການດີທີ່ຈະພະຍາຍາມແລະລວມເອົາ google maps API ເຂົ້າໄປໃນນີ້ somehow (ບາງທີການນໍາໃຊ້ຖະຫນົນຫົນທາງແລະອື່ນໆ.) ພຽງແຕ່ໃຫ້ຄວາມຄິດການນໍາໃຊ້ຮູບແບບການຂົນສົ່ງທີ່ແຕກຕ່າງກັນ. ຂ້າພະເຈົ້າຍັງບໍ່ທັນໄດ້ເຮັດຫນ້າທີ່ການຫມຸນແບບຈໍາລອງໃນ PHP ທີ່ຈະສາມາດສະເຫນີການແກ້ໄຂທີ່ມີປະສິດທິພາບຕໍ່ບັນຫານັກຂາຍການເດີນທາງ. ແຕ່ຂ້ອຍຄິດວ່າຂ້ອຍອາດຈະສາມາດໃຊ້ລະຫັດຂອງເຈົ້າຄືນໃຫມ່ເພື່ອເຮັດແນວນັ້ນ.

  18. 27

    ສະບາຍດີ Douglas,
    ຂອບໃຈຫຼາຍໆ ສຳ ລັບບົດຄວາມນີ້ - ທ່ານພຽງແຕ່ປະຫຍັດເວລາຫຼາຍ.
    ເບິ່ງ​ແຍງ,
    nimrod @ Israel

  19. 28

    ບົດຄວາມດີໆ! ຂ້ອຍພົບບົດຄວາມຫຼາຍຢ່າງທີ່ອະທິບາຍວິທີການຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງສອງຈຸດແຕ່ຂ້ອຍກໍ່ກໍາລັງຊອກຫາ SQL snippet.

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

    2 ມື້ຂອງການຄົ້ນຄວ້າເພື່ອສຸດທ້າຍຊອກຫາຫນ້ານີ້ທີ່ແກ້ໄຂບັນຫາຂອງຂ້ອຍ. ເບິ່ງຄືວ່າຂ້ອຍແຍກ WolframAlpha ຂອງຂ້ອຍອອກດີກວ່າແລະທົບທວນຄະນິດສາດຂອງຂ້ອຍ. ການ​ປ່ຽນ​ແປງ​ຈາກ​ບ່ອນ​ທີ່​ເປັນ HAVING ມີ​ສະ​ຄິບ​ຂອງ​ຂ້າ​ພະ​ເຈົ້າ​ໃນ​ຄໍາ​ສັ່ງ​ທີ່​ເຮັດ​ວຽກ​. ຂອບ​ໃຈ

  25. 37
  26. 39

    ຂ້າ​ພະ​ເຈົ້າ​ປາດ​ຖະ​ຫນາ​ວ່າ​ນີ້​ແມ່ນ​ຫນ້າ​ທໍາ​ອິດ​ທີ່​ຂ້າ​ພະ​ເຈົ້າ​ໄດ້​ພົບ​ເຫັນ​ໃນ​ນີ້​. ຫຼັງຈາກພະຍາຍາມຫຼາຍຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ, ນີ້ແມ່ນອັນດຽວທີ່ຈະເຮັດວຽກຢ່າງຖືກຕ້ອງ, ແລະມີການປ່ຽນແປງຫນ້ອຍທີ່ຈໍາເປັນເພື່ອໃຫ້ເຫມາະສົມກັບຖານຂໍ້ມູນຂອງຂ້ອຍເອງ.
    ຂໍຂອບໃຈຫຼາຍ!

  27. 40

    ຂ້າ​ພະ​ເຈົ້າ​ປາດ​ຖະ​ຫນາ​ວ່າ​ນີ້​ແມ່ນ​ຫນ້າ​ທໍາ​ອິດ​ທີ່​ຂ້າ​ພະ​ເຈົ້າ​ໄດ້​ພົບ​ເຫັນ​ໃນ​ນີ້​. ຫຼັງຈາກພະຍາຍາມຫຼາຍຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ, ນີ້ແມ່ນອັນດຽວທີ່ຈະເຮັດວຽກຢ່າງຖືກຕ້ອງ, ແລະມີການປ່ຽນແປງຫນ້ອຍທີ່ຈໍາເປັນເພື່ອໃຫ້ເຫມາະສົມກັບຖານຂໍ້ມູນຂອງຂ້ອຍເອງ.
    ຂໍຂອບໃຈຫຼາຍ!

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

    ຂ້າ​ພະ​ເຈົ້າ​ຮູ້​ວ່າ​ສູດ​ນີ້​ເຮັດ​ວຽກ, ແຕ່​ຂ້າ​ພະ​ເຈົ້າ​ບໍ່​ສາ​ມາດ​ເບິ່ງ​ວ່າ radius ຂອງ​ແຜ່ນ​ດິນ​ໂລກ​ໄດ້​ຮັບ​ການ​ພິ​ຈາ​ລະ​ນາ. ໃຜສາມາດໃຫ້ຄວາມຮູ້ແກ່ຂ້ອຍໄດ້, ກະລຸນາ?

  34. 49
  35. 50
  36. 52

    ຂໍຂອບໃຈທ່ານ Douglas, SQL Query ແມ່ນສິ່ງທີ່ຂ້ອຍຕ້ອງການ, ແລະຂ້ອຍຄິດວ່າຂ້ອຍຕ້ອງຂຽນມັນເອງ. ເຈົ້າໄດ້ຊ່ວຍຂ້ອຍໃຫ້ລອດຈາກເສັ້ນໂຄ້ງການຮຽນຮູ້ເສັ້ນແວງຕາມລວງຕັ້ງຫຼາຍຊົ່ວໂມງ!

  37. 53

    ຂ້ອຍສືບຕໍ່ໄດ້ຮັບ Errormessage: ຖັນທີ່ບໍ່ຮູ້ຈັກ 'ໄລຍະຫ່າງ' ໃນ 'ບ່ອນໃດຂໍ້' ໃນ MySQL Query.

  38. 55
  39. 56

    Douglas, ຂໍຂອບໃຈທ່ານສໍາລັບລະຫັດທີ່ຫນ້າອັດສະຈັນນີ້. ໄດ້ແຕກຫົວຂອງຂ້ອຍກ່ຽວກັບວິທີການເຮັດສິ່ງນີ້ຢູ່ໃນປະຕູຊຸມຊົນ GPS ຂອງຂ້ອຍ. ທ່ານໄດ້ຊ່ວຍປະຢັດຂ້າພະເຈົ້າຊົ່ວໂມງ.

  40. 58

    ຂອບໃຈສໍາລັບການປະກາດບົດຄວາມທີ່ເປັນປະໂຫຍດນີ້,  
    ແຕ່ສໍາລັບບາງເຫດຜົນຂ້າພະເຈົ້າຕ້ອງການຖາມ
    ວິທີການເອົາໄລຍະຫ່າງລະຫວ່າງ coords ພາຍໃນ mysql db ແລະ coords ເຂົ້າໄປໃນ php ໂດຍຜູ້ໃຊ້?
    ສໍາ​ລັບ​ການ​ອະ​ທິ​ບາຍ​ທີ່​ຈະ​ແຈ້ງ​ເພີ່ມ​ເຕີມ​:
    1. ຜູ້ໃຊ້ຕ້ອງໃສ່ [id] ສໍາລັບການເລືອກຂໍ້ມູນທີ່ກໍານົດໄວ້ຈາກ db ແລະລະຫັດຂອງຜູ້ໃຊ້ເອງ.
    2. ໄຟລ໌ php ໄດ້ຮັບຂໍ້ມູນເປົ້າຫມາຍ (coords) ໂດຍໃຊ້ [id] ແລະຫຼັງຈາກນັ້ນຄິດໄລ່ໄລຍະຫ່າງລະຫວ່າງຜູ້ໃຊ້ແລະຈຸດເປົ້າຫມາຍ.

    ຫຼືພຽງແຕ່ສາມາດເອົາໄລຍະທາງຈາກລະຫັດຂ້າງລຸ່ມນີ້?

    $qry = “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) ເປັນໄລຍະທາງຈາກ `MyTable` ໄລຍະຫ່າງ >= “.$distance.” >>>>ຂ້ອຍສາມາດ “ເອົາ” ໄລຍະໄກຈາກບ່ອນນີ້ໄດ້ບໍ?
    ຂອບ​ໃຈ​ອີກ​ຄັ້ງ,
    Timmy S

    • 59

      ບໍ່ສົນໃຈ, ຂ້ອຍໄດ້ຄິດອອກວ່າ "ຫນ້າທີ່" ເຮັດວຽກຢູ່ໃນ php
      $dis=getDistanceBetweenPointsNew($userLati, $userLongi, $lati, $longi, $unit = 'Km')
      ຂອບ​ໃຈ​ຫຼາຍໆ!! 

  41. 60

    ຕົກລົງ, ທຸກຢ່າງທີ່ຂ້ອຍໄດ້ພະຍາຍາມແມ່ນບໍ່ເຮັດວຽກ. ຂ້າພະເຈົ້າຫມາຍຄວາມວ່າ, ສິ່ງທີ່ຂ້ອຍມີວຽກເຮັດ, ແຕ່ໄລຍະຫ່າງແມ່ນທາງອອກ.

    ມີໃຜອາດຈະເຫັນສິ່ງທີ່ຜິດພາດກັບລະຫັດນີ້?

    if(isset($_POST['submitted'])){ $z = $_POST['zipcode']; $r = $_POST['radius']; 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 FROM mrk m, zip z1, zip z2 WHERE 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']; $latitude1 = $row['lat']; $longitude1 = $row['lon']; $latitude2 = $row['y1']; $longitude2 = $row['x1']; $city = $row['city']; $state = $row['state']; $dis = getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi'); // $dis = distance($lat1, $lon1, $lat2, $lon2); $verified = $row['verified']; if($verified == '1'){ echo “”; echo “”.$store.””; ສະທ້ອນ $dis . ”ໄມລ໌”; ສຽງສະທ້ອນ “”; } else { echo “”.$store.””; ສະທ້ອນ $dis . ”ໄມລ໌”; ສຽງສະທ້ອນ “”; } }}

    ລະຫັດ functions.php ຂອງຂ້ອຍ
    function getnew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { $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 'Mi': break; case 'Km' : $distance = $distance * 1.609344; } return (round($distance,2)); }

    ຂອບ​ໃຈລ່ວ​ງ​ຫນ້າ

  42. 61
  43. 62

    Hey Douglas, ບົດຄວາມທີ່ຍິ່ງໃຫຍ່. ຂ້ອຍພົບຄໍາອະທິບາຍຂອງເຈົ້າກ່ຽວກັບແນວຄວາມຄິດທາງພູມສາດແລະລະຫັດທີ່ຫນ້າສົນໃຈແທ້ໆ. ຄໍາແນະນໍາດຽວຂອງຂ້ອຍແມ່ນໃຫ້ space ແລະ indent ລະຫັດສໍາລັບການສະແດງ (ເຊັ່ນ: Stackoverflow, ສໍາລັບການຍົກຕົວຢ່າງ). ຂ້າພະເຈົ້າເຂົ້າໃຈວ່າທ່ານຕ້ອງການອະນຸລັກພື້ນທີ່, ແຕ່ໄລຍະຫ່າງຂອງລະຫັດ / ການຫຍໍ້ຫນ້າແບບດັ້ງເດີມຈະເຮັດໃຫ້ຂ້ອຍ, ໃນຖານະນັກຂຽນໂປລແກລມ, ອ່ານແລະທໍາລາຍມັນງ່າຍຂຶ້ນຫຼາຍ. ຢ່າງໃດກໍຕາມ, ມັນເປັນເລື່ອງເລັກນ້ອຍ. ສືບຕໍ່ເຮັດວຽກທີ່ຍິ່ງໃຫຍ່.

    • 63

      ຂອບໃຈ! ຂ້າ ພະ ເຈົ້າ ໄດ້ ດັດ ແກ້ ການ ຕອບ ໄດ້ ພຽງ ເລັກ ນ້ອຍ ... ແຕ່ ສົມ ຜົນ ໃຊ້ ເວ ລາ ເຖິງ ຫ້ອງ ຫຼາຍ ດັ່ງ ນັ້ນ ແລະ ຍາວ ຫຼາຍ ດັ່ງ ນັ້ນ ຂ້າ ພະ ເຈົ້າ ບໍ່ ແນ່ ໃຈວ່ າ ມັນ ຊ່ວຍ ຫຼາຍ ເກີນ ໄປ.

  44. 64
  45. 65

    ທີ່ນີ້ໃນຂະນະທີ່ນໍາໃຊ້ກັບຟັງຊັນທີ່ພວກເຮົາກໍາລັງໄດ້ຮັບປະເພດຫນຶ່ງຂອງໄລຍະຫ່າງ..ໃນຂະນະທີ່ການນໍາໃຊ້ການສອບຖາມປະເພດອື່ນໆຂອງໄລຍະທາງມາ

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

    ມັນເບິ່ງຄືວ່າໄວກວ່າ (mysql 5.9) ການນໍາໃຊ້ສອງເທົ່າຂອງສູດໃນການເລືອກແລະບ່ອນທີ່:
    $formula = “(((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)”;
    $sql = 'SELECT *, '.$formula.' ເປັນໄລຍະຫ່າງຈາກຕາຕະລາງທີ່ '..$formula.' <= '.$distance;

  51. 71
  52. 72

    ຂອບໃຈຫຼາຍໆສໍາລັບການຕັດບົດຄວາມນີ້.ມັນເປັນປະໂຫຍດຫຼາຍ.
    PHP ໄດ້ຖືກສ້າງຂື້ນໃນຄັ້ງທໍາອິດເປັນເວທີການຂຽນແບບງ່າຍໆທີ່ເອີ້ນວ່າ "ຫນ້າທໍາອິດສ່ວນບຸກຄົນ". ໃນປັດຈຸບັນ PHP (ສັ້ນສໍາລັບ Hypertext Preprocessor) ເປັນທາງເລືອກຂອງເຕັກໂນໂລຢີ Microsoft's Active Server Pages (ASP).

    PHP ເປັນພາສາຂ້າງເຊີບເວີແຫຼ່ງເປີດທີ່ຖືກນໍາໃຊ້ສໍາລັບການສ້າງຫນ້າເວັບແບບເຄື່ອນໄຫວ. ມັນສາມາດຖືກຝັງຢູ່ໃນ HTML. PHP ປົກກະຕິແລ້ວແມ່ນໃຊ້ຮ່ວມກັບຖານຂໍ້ມູນ MySQL ໃນເຊີບເວີເວັບ Linux/UNIX. ມັນອາດຈະເປັນພາສາສະຄິບທີ່ນິຍົມທີ່ສຸດ.

  53. 73

    ຂ້ອຍພົບວ່າການແກ້ໄຂຂ້າງເທິງນີ້ບໍ່ເຮັດວຽກຢ່າງຖືກຕ້ອງ.
    ຂ້ອຍຈໍາເປັນຕ້ອງປ່ຽນເປັນ:

    $qqq = “SELECT *,(((acos(sin(“.$latitude.”*pi()/180))) * sin((`latt`*pi()/180))+cos((” . $latitude . “*pi()/180)) * cos((`latt`*pi()/180)) * cos(((” . $longitude . “- `longt`)*pi()/180) )))*180/pi())*60*1.1515) ເປັນໄລຍະຫ່າງຈາກ `ລົງທະບຽນ` “;

  54. 75

    ຂໍຂອບໃຈທ່ານ wroking ຢ່າງສົມບູນ.. ແຕ່ຂ້າພະເຈົ້າມີຄໍາຖາມຫນຶ່ງຖ້າຫາກວ່າຂ້າພະເຈົ້າຕ້ອງການທີ່ຈະ output ບໍ່ມີຈຸດທົດສະນິຍົມ, ຂ້ອຍຈະເຮັດແນວໃດ..?

    ຂອບ​ໃຈລ່ວ​ງ​ຫນ້າ.

  55. 76

    ສະບາຍດີ, ຂ້ອຍຕ້ອງການຄວາມຊ່ວຍເຫຼືອຂອງເຈົ້າໃນເລື່ອງນີ້.

    ຂ້ອຍໄດ້ຮ້ອງຂໍໃຫ້ເຄື່ອງແມ່ຂ່າຍເວັບຂອງຂ້ອຍ http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $latitude
    -2.23389 = $longitude
    ແລະ 20 = ໄລຍະຫ່າງທີ່ຂ້ອຍຕ້ອງການດຶງຂໍ້ມູນ

    ຢ່າງໃດກໍຕາມ, ການນໍາໃຊ້ສູດຂອງທ່ານ, ມັນດຶງແຖວທັງຫມົດໃນ db ຂອງຂ້ອຍ

    $results = DB::select( DB::raw(“SELECT *, ((acos(sin((“.$latitude.”*pi()/180)))) * sin((lat*pi()/180. ))+cos((“.$latitude.”*pi()/180)) * cos((lat*pi()/180)) * cos(((“.$longitude.”- lng)*pi( )/180))))*180/pi())*60*1.1515*1.609344) as distance FROM markers have distance >= “.$distance ));

    [{“id”:1,”name”:”Frankie Johnnie & Luigo Too”,”address”:”939 W El Camino Real, Mountain View, CA”,”lat”:37.386337280273,”lng”:-122.08582305908, ”distance”:16079.294719663},{“id”:2,”name”:”Amici's East Coast Pizzeria”,”address”:”790 Castro St, Mountain View, CA”,”lat”:37.387138366699,”lng”: -122.08323669434,”distance”: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,”distance”:16077.420540582},{“id”:5,”name”:”Tony & Alba's Pizza & Pasta”,”619vecu,”Esla”,”ພູດອຍ”:” View, CA”,”lat”:37.394012451172,”lng”:-122.09552764893,”distance”:16078.563225154},{“id”:6,”name”:”Oregano's Wood-Fired Pizza:”,”4546”,” El Camino Real, Los Altos, CA”,”lat”:37.401725769043,”lng”:-122.11464691162,”ໄລຍະຫ່າງ”:16077.937560795},{“ id”:7,”name”:”The bars and grills”,”address”:”24 Whiteley Street, Manchester”,”lat”:53.485118865967,”lng”:-2.1828699111938,”distance”:8038.7620112314}

    ຂ້າ​ພະ​ເຈົ້າ​ຕ້ອງ​ການ​ທີ່​ຈະ​ດຶງ​ເອົາ​ພຽງ​ແຕ່​ແຖວ​ທີ່​ມີ 20 ໄມ​, ແຕ່​ວ່າ​ມັນ​ເອົາ​ທັງ​ຫມົດ​ແຖວ​. ກະລຸນາຂ້ອຍເຮັດຫຍັງຜິດ

  56. 77

    ຂ້ອຍກໍາລັງຊອກຫາຄໍາຖາມທີ່ຄ້າຍຄືກັນແຕ່ໄດ້ກ້າວຂຶ້ນເລັກນ້ອຍ - ໃນສັ້ນນີ້ແມ່ນການຈັດກຸ່ມພິກັດທັງຫມົດພາຍໃນ 2 ໄມຂອງແຕ່ລະພິກັດແລະຫຼັງຈາກນັ້ນນັບຈໍານວນພິກັດໃນແຕ່ລະກຸ່ມແລະຜົນໄດ້ຮັບພຽງແຕ່ກຸ່ມຫນຶ່ງທີ່ມີຈຸດປະສານງານຫຼາຍທີ່ສຸດ - ເຖິງແມ່ນວ່າ. ທ່ານ​ມີ​ຫຼາຍ​ກ​່​ວາ​ຫນຶ່ງ​ກຸ່ມ​ໃນ​ບັນ​ດາ​ກຸ່ມ​ທີ່​ມີ​ຈໍາ​ນວນ​ຫຼາຍ​ທີ່​ສຸດ​ຂອງ​ການ​ປະ​ສານ​ງານ - ພຽງ​ແຕ່​ອອກ​ກຸ່ມ Random ຈາກ​ກຸ່ມ​ທີ່​ມີ​ຈໍາ​ນວນ​ໃຫຍ່​ທີ່​ສຸດ​ດຽວ​ກັນ -

ທ່ານຄິດແນວໃດ?

ເວັບໄຊທ໌ນີ້ໃຊ້ Akismet ເພື່ອຫຼຸດຜ່ອນການຂີ້ເຫຍື້ອ. ຮຽນຮູ້ວິທີທີ່ຂໍ້ມູນຂອງທ່ານຖືກປະຕິບັດ.