ஹவர்சின் ஃபார்முலாவைப் பயன்படுத்தி அட்சரேகை மற்றும் தீர்க்கரேகை புள்ளிகளுக்கு இடையே உள்ள பெரிய வட்டத்தின் தூரத்தைக் கணக்கிடுங்கள் அல்லது வினவவும் (PHP, பைதான், MySQL, MSSQL எடுத்துக்காட்டுகள்)

ஹவர்சின் ஃபார்முலா - பெரிய வட்டம் தூரம் - PHP, பைதான், MySQL

இந்த மாதம் நான் ஜி.ஐ.எஸ் தொடர்பாக PHP மற்றும் MySQL இல் சிறிது நிரலாக்கிக் கொண்டிருக்கிறேன். வலையைச் சுற்றிப் பார்த்தால், சிலவற்றைக் கண்டுபிடிப்பதில் எனக்கு உண்மையில் சிரமமாக இருந்தது புவியியல் கணக்கீடுகள் இரண்டு இடங்களுக்கிடையேயான தூரத்தைக் கண்டுபிடிக்க, அவற்றை இங்கே பகிர்ந்து கொள்ள விரும்பினேன்.

பெரிய வரைபட தூரத்துடன் விமான வரைபடம் ஐரோப்பா

இரண்டு புள்ளிகளுக்கிடையேயான தூரத்தைக் கணக்கிடுவதற்கான எளிய வழி, ஒரு முக்கோணத்தின் (A² + B² = C²) ஹைபோடென்ஸைக் கணக்கிட பித்தகோரியன் சூத்திரத்தைப் பயன்படுத்துவதாகும். இது அறியப்படுகிறது யூக்ளிடியன் தூரம்.

இது ஒரு சுவாரஸ்யமான தொடக்கமாகும், ஆனால் அட்சரேகை மற்றும் தீர்க்கரேகை கோடுகளுக்கு இடையிலான தூரம் என்பதால் இது புவியியலுடன் பொருந்தாது சம தூரம் இல்லை தவிர. நீங்கள் பூமத்திய ரேகைக்கு நெருங்க நெருங்க, அட்சரேகை கோடுகள் மேலும் வேறுபடுகின்றன. நீங்கள் ஒருவித எளிய முக்கோண சமன்பாட்டைப் பயன்படுத்தினால், அது பூமியின் வளைவின் காரணமாக, ஒரு இடத்தில் தூரத்தை துல்லியமாகவும், மற்றொரு இடத்தில் மிகவும் மோசமாகவும் இருக்கலாம்.

பெரிய வட்டம் தூரம்

பூமியைச் சுற்றி நீண்ட தூரம் பயணிக்கும் வழிகள் என அழைக்கப்படுகின்றன பெரிய வட்டம் தூரம். அதாவது... ஒரு கோளத்தில் இரண்டு புள்ளிகளுக்கு இடையே உள்ள குறுகிய தூரம், தட்டையான வரைபடத்தில் உள்ள புள்ளிகளை விட வித்தியாசமானது. அட்சரேகை மற்றும் தீர்க்கரேகைக் கோடுகள் சமமான தொலைவில் இல்லை என்பதன் மூலம் அதை இணைக்கவும்… மேலும் உங்களுக்கு கடினமான கணக்கீடு கிடைத்துள்ளது.

பெரிய வட்டங்கள் எவ்வாறு செயல்படுகின்றன என்பதற்கான அருமையான வீடியோ விளக்கம் இங்கே.

தி ஹேவர்சின் ஃபார்முலா

பூமியின் வளைவைப் பயன்படுத்தும் தூரம் இதில் இணைக்கப்பட்டுள்ளது ஹேவர்சின் சூத்திரம், இது பூமியின் வளைவை அனுமதிக்க முக்கோணவியல் பயன்படுத்துகிறது. பூமியில் 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)); 
}

மாறிகள்:

  • $Latitude1 - உங்கள் முதல் இருப்பிடத்தின் அட்சரேகைக்கான மாறி.
  • $Longitude1 - உங்கள் முதல் இருப்பிடத்தின் தீர்க்கரேகைக்கான மாறி
  • $Latitude2 - உங்கள் இரண்டாவது இருப்பிடத்தின் அட்சரேகைக்கான மாறி.
  • $Longitude2 - உங்கள் இரண்டாவது இருப்பிடத்தின் தீர்க்கரேகைக்கான மாறி.
  • $அலகு - இயல்புநிலை இருப்பது ஆயிரக்கணக்கான. இதை இவ்வாறு புதுப்பிக்கலாம் அல்லது அனுப்பலாம் கிலோமீட்டர்கள்.

மலைப்பாம்பு: அட்சரேகை மற்றும் தீர்க்கரேகையின் 2 புள்ளிகளுக்கு இடையே உள்ள தூரத்தைக் கணக்கிடுங்கள்

எப்படியிருந்தாலும், இரண்டு புள்ளிகளுக்கு இடையே உள்ள தூரத்தை (மைல் வெர்சஸ் கிலோமீட்டர் மாற்றத்துடன்) இரண்டு தசம இடங்களுக்கு வட்டமிடுவதற்கான பைதான் சூத்திரம் இங்கே உள்ளது. தரவு விஞ்ஞானியாக இருக்கும் எனது மகன் பில் கர்க்கு கடன் ஓபன் இன்சைட்ஸ், குறியீட்டிற்கு.

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 - உங்கள் முதல் இருப்பிடத்திற்கான மாறி அட்சரேகை.
  • தீர்க்கரேகை1 - உங்கள் முதல் இருப்பிடத்திற்கான மாறி தீர்க்கரேகை
  • அட்சரேகை2 - உங்கள் இரண்டாவது இருப்பிடத்திற்கான மாறி அட்சரேகை.
  • தீர்க்கரேகை2 - உங்கள் இரண்டாவது இருப்பிடத்திற்கான மாறி தீர்க்கரேகை.
  • அலகு - இயல்புநிலை இருப்பது ஆயிரக்கணக்கான. இதை இவ்வாறு புதுப்பிக்கலாம் அல்லது அனுப்பலாம் கிலோமீட்டர்கள்.

MySQL: அட்சரேகை மற்றும் தீர்க்கரேகையைப் பயன்படுத்தி மைல்களில் உள்ள தூரத்தைக் கணக்கிடுவதன் மூலம் ஒரு வரம்பிற்குள் அனைத்து பதிவுகளையும் மீட்டெடுக்கிறது

ஒரு குறிப்பிட்ட தூரத்திற்குள் அனைத்து பதிவுகளையும் கண்டுபிடிக்க ஒரு கணக்கீடு செய்ய SQL ஐப் பயன்படுத்தவும் முடியும். இந்த எடுத்துக்காட்டில், எனது இருப்பிடத்திற்கு $ அட்சரேகை மற்றும் $ தீர்க்கரேகைகளில் மாறி $ தூரத்திற்கு (மைல்களில்) குறைவாகவோ அல்லது சமமாகவோ இருக்கும் அனைத்து பதிவுகளையும் கண்டுபிடிக்க MySQL இல் MyTable ஐ வினவப் போகிறேன்:

ஒரு குறிப்பிட்டத்திற்குள் அனைத்து பதிவுகளையும் மீட்டெடுப்பதற்கான வினவல் தூரம் அட்சரேகை மற்றும் தீர்க்கரேகை ஆகிய இரண்டு புள்ளிகளுக்கு இடையில் மைல்களில் தூரத்தைக் கணக்கிடுவதன் மூலம்:

$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 மாறி, அங்கு நான் புள்ளியின் தீர்க்கரேகை கடந்து செல்கிறேன்.
  • $ தூரம் - இதுதான் எல்லா பதிவுகளையும் குறைவாகவோ அல்லது சமமாகவோ நீங்கள் கண்டுபிடிக்க விரும்புகிறீர்கள்.
  • அட்டவணை - இது அட்டவணை… அதை உங்கள் அட்டவணை பெயருடன் மாற்ற வேண்டும்.
  • அட்சரேகை - இது உங்கள் அட்சரேகையின் புலம்.
  • தீர்க்கரேகை - இது உங்கள் தீர்க்கரேகையின் புலம்.

MySQL: அட்சரேகை மற்றும் தீர்க்கரேகையைப் பயன்படுத்தி கிலோமீட்டர்களில் தூரத்தைக் கணக்கிடுவதன் மூலம் ஒரு வரம்பிற்குள் அனைத்து பதிவுகளையும் மீட்டெடுக்கிறது

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 க்கும் மேற்பட்ட இடங்களைக் கொண்ட ஒரு சில்லறை கடைக்கு நாங்கள் பயன்படுத்தினோம், அது அழகாக வேலை செய்தது.

மைக்ரோசாஃப்ட் SQL சர்வர் புவியியல் தூரம்: STDistance

நீங்கள் மைக்ரோசாஃப்ட் SQL சேவையகத்தைப் பயன்படுத்துகிறீர்கள் என்றால், அவர்கள் தங்கள் சொந்த செயல்பாட்டை வழங்குகிறார்கள், எஸ்டி தூரம் புவியியல் தரவு வகையைப் பயன்படுத்தி இரண்டு புள்ளிகளுக்கு இடையிலான தூரத்தைக் கணக்கிடுவதற்கு.

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

VP மற்றும் கட்டிடக்கலை நிபுணரான மனாஷ் சாஹூவுக்கு தொப்பி குறிப்பு Highbridge.

77 கருத்துக்கள்

  1. 1

    பகிர்வுக்கு மிக்க நன்றி. இது எளிதான நகல் மற்றும் ஒட்டு வேலை மற்றும் சிறப்பாக செயல்படுகிறது. நீங்கள் எனக்கு நிறைய நேரம் சேமித்துள்ளீர்கள்.
    C க்கு போர்ட்டிங் செய்யும் எவருக்கும் FYI:
    double deg2rad (double deg) {return deg * (3.14159265358979323846 / 180.0); }

  2. 2

    மிக அருமையான இடுகை - மிகவும் நன்றாக வேலை செய்தது - நான் லாட்-லாங் வைத்திருக்கும் அட்டவணையின் பெயரை மட்டுமே மாற்ற வேண்டியிருந்தது. இது மிகவும் வேகமாக வேலை செய்கிறது .. எனக்கு ஒரு சிறிய எண்ணிக்கையிலான லாட்-லாங்ஸ் (<400) உள்ளது, ஆனால் இது நன்றாக அளவிடப்படும் என்று நான் நினைக்கிறேன். நல்ல தளமும் - நான் இதை எனது del.icio.us கணக்கில் சேர்த்துள்ளேன், தொடர்ந்து சரிபார்க்கிறேன்.

  3. 4
  4. 5

    தொலைதூரக் கணக்கீடுகளுக்காக நான் நாள் முழுவதும் தேடினேன், ஹார்வர்சைன் வழிமுறையைக் கண்டறிந்தேன், அதை ஒரு SQL அறிக்கையில் எவ்வாறு வைப்பது என்பதற்கான உதாரணத்தை வழங்கியதற்கு நன்றி. நன்றி மற்றும் வாழ்த்துக்கள், டேனியல்

  5. 8

    உங்கள் SQL க்கு ஒரு அறிக்கை தேவை என்று நான் நினைக்கிறேன்.
    WHERE தூரத்திற்கு பதிலாக <= $ நீங்கள் தேவைப்படக்கூடிய தூரம்
    HAVING தூரம் <= $ தூரம் பயன்படுத்தவும்

    இல்லையெனில் எனக்கு நேரத்தையும் சக்தியையும் சேமித்ததற்கு நன்றி.

    • 9

      ஹாய் டேவிட்,

      நீங்கள் எந்த வகையான GROUP BY அறிக்கையையும் செய்கிறீர்கள் என்றால், உங்களுக்கு HAVING தேவைப்படும். மேலே உள்ள எடுத்துக்காட்டில் நான் அதைச் செய்யவில்லை.

      டக்

  6. 10

    MySQL 5.x ஐப் பொறுத்தவரை, WHERE பிரிவில் நீங்கள் ஒரு மாற்றுப்பெயரைப் பயன்படுத்த முடியாது http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

    மேலே உள்ள வினவல்களில் WHERE க்கு பதிலாக HAVING ஐப் பயன்படுத்தவும்

  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

    வணக்கம்,

    இன்னொரு கேள்வி. கீழே உள்ளதைப் போல என்எம்இஏ சரங்களுக்கு ஒரு சூத்திரம் உள்ளதா?

    1342.7500, என், 10052.2287, இ

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

    நன்றி,
    ஹாரி

  11. 16

    WHERE எனக்கு வேலை செய்யவில்லை என்பதையும் கண்டறிந்தேன். அதை HAVING என மாற்றியது மற்றும் எல்லாம் சரியாக வேலை செய்கிறது. முதலில் நான் கருத்துகளைப் படித்து ஒரு உள்ளமைக்கப்பட்ட தேர்வைப் பயன்படுத்தி மீண்டும் எழுதவில்லை. இருவரும் நன்றாக வேலை செய்வார்கள்.

  12. 17
  13. 18

    நம்பமுடியாத உதவியாக, மிக்க நன்றி! “WHERE” என்பதை விட புதிய “HAVING” உடன் எனக்கு சில சிக்கல்கள் இருந்தன, ஆனால் நான் இங்கே கருத்துகளைப் படித்தவுடன் (விரக்தியில் = பற்களை அரைத்து அரை மணி நேரம் கழித்து = பி), நான் நன்றாக வேலை செய்தேன். நன்றி ^ _ ^

  14. 19
  15. 20

    அது போன்ற ஒரு தேர்ந்தெடுக்கப்பட்ட அறிக்கை மிகவும் கணக்கீட்டு ரீதியாக தீவிரமாகவும் மெதுவாகவும் இருக்கும் என்பதை நினைவில் கொள்ளுங்கள். உங்களிடம் நிறைய கேள்விகள் இருந்தால், அது விஷயங்களை விரைவாகக் குறைக்கும்.

    கணக்கிடப்பட்ட தூரத்தால் வரையறுக்கப்பட்ட ஒரு சதுர பகுதியைப் பயன்படுத்தி முதல் (கச்சா) தேர்வை இயக்குவது மிகவும் குறைவான தீவிரமான அணுகுமுறையாகும், அதாவது “டேபிள் பெயரிலிருந்து * தேர்ந்தெடு *, அங்கு lat1 மற்றும் lat2 க்கு இடையிலான அட்சரேகை மற்றும் lon1 மற்றும் lon2 க்கு இடையிலான தீர்க்கரேகை”. lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, lon ஐப் போன்றது. 111 டிகிரி அட்சரேகை ~ 69 கி.மீ என்பதால் லேடிஃப் ~ = தூரம் / 1 (கி.மீ.க்கு) அல்லது மைல்களுக்கு தூரம் / 111 (பூமி சற்று ஓவல் என்பதால் சிறிய மாறுபாடு, ஆனால் இந்த நோக்கத்திற்கு போதுமானது). londiff = தூரம் / (abs (cos (deg2rad (அட்சரேகை)) * 111%) - அல்லது 69 மைல்களுக்கு (மாறுபாடுகளைக் கணக்கிட நீங்கள் உண்மையில் சற்று பெரிய சதுரத்தை எடுக்கலாம்). அதன் முடிவை எடுத்து ரேடியல் தேர்ந்தெடுப்பிற்கு ஊட்டவும். எல்லைக்கு அப்பாற்பட்ட ஆயங்களை கணக்கிட மறக்காதீர்கள் - அதாவது ஏற்றுக்கொள்ளக்கூடிய தீர்க்கரேகையின் வரம்பு -180 முதல் +180 வரை மற்றும் ஏற்றுக்கொள்ளக்கூடிய அட்சரேகையின் வரம்பு -90 முதல் +90 வரை - உங்கள் லாடிஃப் அல்லது லாண்டிஃப் இந்த வரம்பிற்கு வெளியே இயங்கினால் . பெரும்பாலான சந்தர்ப்பங்களில் இது பொருந்தாது, ஏனெனில் இது துருவத்திலிருந்து துருவத்திற்கு பசிபிக் கடல் வழியாக ஒரு வரியின் கணக்கீடுகளை மட்டுமே பாதிக்கிறது, இருப்பினும் இது சுக்கோட்காவின் ஒரு பகுதியையும் அலாஸ்காவின் பகுதியையும் வெட்டுகிறது.

    இதன் மூலம் நாங்கள் எதைச் செய்கிறோம் என்பது இந்த கணக்கீட்டை நீங்கள் செய்யும் புள்ளிகளின் எண்ணிக்கையில் குறிப்பிடத்தக்க குறைப்பு ஆகும். தரவுத்தளத்தில் ஒரு மில்லியன் உலகளாவிய புள்ளிகள் ஏறக்குறைய சமமாக விநியோகிக்கப்பட்டு, 100 கி.மீ க்குள் தேட விரும்பினால், உங்கள் முதல் (வேகமான) தேடல் 10000 சதுர கி.மீ பரப்பளவில் இருக்கும், மேலும் இது சுமார் 20 முடிவுகளைத் தரும் (ஒரு விநியோகத்தின் அடிப்படையில் கூட சுமார் 500M சதுர கி.மீ பரப்பளவு), அதாவது இந்த வினவலுக்கு ஒரு மில்லியன் மடங்குகளுக்கு பதிலாக சிக்கலான தூர கணக்கீட்டை 20 முறை இயக்குகிறீர்கள்.

    • 21

      எடுத்துக்காட்டில் சிறிய தவறு… அது 50 கி.மீ (100 அல்ல) க்குள் இருக்கும், ஏனெனில் நாங்கள் எங்கள்… சதுரத்தின் “ஆரம்” ஐப் பார்க்கிறோம்.

      • 22

        அருமையான ஆலோசனை! நான் உண்மையில் ஒரு டெவலப்பருடன் பணிபுரிந்தேன், அவர் உள்ளே செயல்படும் சதுரத்தை இழுத்து, பின்னர் மீதமுள்ள புள்ளிகளைச் சேர்க்கவும் விலக்கவும் சுற்றளவைச் சுற்றி 'சதுரங்களை' உருவாக்கிய ஒரு சுழல்நிலை செயல்பாடு. இதன் விளைவாக நம்பமுடியாத வேகமான முடிவு - அவர் மைக்ரோ விநாடிகளில் மில்லியன் கணக்கான புள்ளிகளை மதிப்பீடு செய்ய முடியும்.

        மேலே உள்ள எனது அணுகுமுறை நிச்சயமாக 'கச்சா' ஆனால் திறமையானது. மீண்டும் நன்றி!

        • 23

          டக்,

          ஒரு பலகோணத்திற்குள் ஒரு நீண்ட புள்ளி உள்ளதா என்பதை மதிப்பீடு செய்ய 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

    மற்றும் மைஸ்கல் என்னிடம் அந்த தூரத்தை சொல்கிறது, ஒரு நெடுவரிசையாக இல்லை, நான் வரிசையைப் பயன்படுத்தலாம், நான் எங்கு இல்லாமல் செய்ய முடியும், அது வேலை செய்கிறது, ஆனால் அதனுடன் இல்லை…

  17. 26

    இது சிறந்தது, இருப்பினும் பறவைகள் பறப்பது போலவே இதுவும் இருக்கிறது. கூகிள் மேப்ஸ் ஏபிஐயை எப்படியாவது முயற்சித்து இணைப்பது மிகவும் நல்லது (சாலைகள் போன்றவற்றைப் பயன்படுத்தலாம்) வேறு வகையான போக்குவரத்தைப் பயன்படுத்தி ஒரு யோசனையைத் தருவது. பயண விற்பனையாளர் பிரச்சினைக்கு திறமையான தீர்வை வழங்கக்கூடிய PHP இல் உருவகப்படுத்தப்பட்ட வருடாந்திர செயல்பாட்டை நான் இன்னும் செய்யவில்லை. ஆனால் அவ்வாறு செய்ய உங்கள் குறியீட்டில் சிலவற்றை மீண்டும் பயன்படுத்த முடியும் என்று நினைக்கிறேன்.

  18. 27

    ஹாய் டக்ளஸ்,
    இந்த கட்டுரைக்கு மிக்க நன்றி - நீங்கள் எனக்கு நேரத்தை மிச்சப்படுத்தினீர்கள்.
    கவனித்துக் கொள்ளுங்கள்,
    நிம்ரோட் s இஸ்ரேல்

  19. 28

    நல்ல கட்டுரை! இரண்டு புள்ளிகளுக்கு இடையிலான தூரத்தை எவ்வாறு கணக்கிடுவது என்பதை விவரிக்கும் நிறைய கட்டுரைகளை நான் கண்டேன், ஆனால் நான் உண்மையில் SQL துணுக்கைத் தேடிக்கொண்டிருந்தேன்.

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

    எனது பிரச்சினையை தீர்க்கும் இந்த பக்கத்தை இறுதியாக கண்டுபிடிக்க 2 நாட்கள் ஆராய்ச்சி. எனது வொல்ஃப்ராம் ஆல்பாவை நான் நன்றாக உடைத்து என் கணிதத்தில் துலக்குவது போல் தெரிகிறது. 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

    நன்றி டக்ளஸ், SQL வினவல் எனக்குத் தேவையானது, அதை நானே எழுத வேண்டும் என்று நினைத்தேன். அட்சரேகை தீர்க்கரேகை கற்றல் வளைவின் மணிநேரத்திலிருந்து நீங்கள் என்னைக் காப்பாற்றியுள்ளீர்கள்!

  37. 53
    • 54

      பீட்டர், தயவுசெய்து மற்ற கருத்துகளைப் படியுங்கள். சில எல்லோரும் WHERE / HAVING க்கு வேறு தொடரியல் பயன்படுத்த வேண்டியிருந்தது.

  38. 55
  39. 56

    டக்ளஸ், இந்த அற்புதமான குறியீட்டிற்கு நன்றி. எனது ஜி.பி.எஸ் சமூக போர்ட்டலில் இதை எப்படி செய்வது என்று என் தலையில் விரிசல் ஏற்பட்டது. நீங்கள் என்னை மணிநேரம் சேமித்துள்ளீர்கள்.

  40. 58

    இந்த பயனுள்ள கட்டுரையை இடுகையிட்டதற்கு நன்றி,  
    ஆனால் சில காரணங்களால் நான் கேட்க விரும்புகிறேன்
    MySQL db க்குள் உள்ள கோடுகளுக்கும் பயனரால் php இல் செருகப்பட்ட கோடுகளுக்கும் இடையிலான தூரத்தை எவ்வாறு பெறுவது?
    இன்னும் தெளிவாக விவரிக்க:
    1.ber மற்றும் பயனரின் கோர்ட்களில் இருந்து குறிப்பிட்ட தரவைத் தேர்ந்தெடுப்பதற்கு [ஐடி] செருக வேண்டும்
    2. php கோப்பு [ஐடி] ஐப் பயன்படுத்தி இலக்கு தரவை (கோர்டுகள்) பெறுகிறது, பின்னர் பயனர் மற்றும் இலக்கு புள்ளிக்கு இடையிலான தூரத்தை கணக்கிடுகிறது

    அல்லது கீழேயுள்ள குறியீட்டிலிருந்து தூரத்தைப் பெற முடியுமா?

    $ qry = “தேர்ந்தெடு *, (((அகோஸ் (பாவம் ((“. $ அட்சரேகை. ”* பை () / 180)) * பாவம் ((` அட்சரேகை` * பை () / 180)) + காஸ் ((“. $ அட்சரேகை. ))) * 180 / pi ()) * 180 * 180 * 180) `MyTable` WHERE தூரம்> =“. $ தூரம். >>>> இங்கிருந்து தூரத்தை "வெளியே" எடுக்க முடியுமா?
    மீண்டும் நன்றி,
    டிம்மி எஸ்

  41. 60

    சரி, நான் முயற்சித்த அனைத்தும் செயல்படவில்லை. அதாவது, என்னிடம் என்ன இருக்கிறது, ஆனால் தூரங்கள் விலகி உள்ளன.

    இந்த குறியீட்டில் என்ன தவறு இருக்கிறது என்று யாராவது பார்க்க முடியுமா?

    if (isset ($ _ POST ['சமர்ப்பிக்கப்பட்டது'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['ஆரம்']; எதிரொலி “முடிவுகள்“. $ z; $ sql = mysql_query (“தேர்ந்தெடு m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. நகரம், z1.state FROM mrk m, zip z1, zip z2 WHERE m.zipcode = z1.zipcode AND z2.zipcode = $ z AND (3963 * acos (துண்டிக்கவும் (பாவம் (z2.lat / 57.2958) * பாவம் (மீ. 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 ()); ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. "”; $ store = $ row ['LocAddSt']. ””; $ store. = $ row ['LocAddCity']. ”,“. $ row ['LocAddState']. ” “. $ வரிசை ['ஜிப்கோட்']; $ அட்சரேகை 1 = $ வரிசை ['lat']; $ longitude1 = $ row ['lon']; $ அட்சரேகை 2 = $ வரிசை ['y1']; $ தீர்க்கரேகை 2 = $ வரிசை ['x1']; $ நகரம் = $ வரிசை ['நகரம்']; $ state = $ row ['state']; $ dis = getnew ($ அட்சரேகை 1, $ தீர்க்கரேகை 1, $ அட்சரேகை 2, $ தீர்க்கரேகை 2, $ அலகு = 'மி'); // $ dis = தூரம் ($ lat1, $ lon1, $ lat2, $ lon2); $ சரிபார்க்கப்பட்டது = $ வரிசை ['சரிபார்க்கப்பட்டது']; if ($ சரிபார்க்கப்பட்டது == '1') {எதிரொலி “”; எதிரொலி “”. $ கடை. ””; எதிரொலி $ dis. " மைல்கள் தொலைவில்"; எதிரொலி “”; } else {எதிரொலி “”. $ கடை. ””; எதிரொலி $ dis. " மைல்கள் தொலைவில்"; எதிரொலி “”; }}}

    எனது functions.php குறியீடு
    செயல்பாடு getnew ($ அட்சரேகை 1, $ தீர்க்கரேகை 1, $ அட்சரேகை 2, $ தீர்க்கரேகை 2, $ அலகு = 'மி') {$ தீட்டா = $ தீர்க்கரேகை 1 - $ தீர்க்கரேகை 2; $ தூரம் = (பாவம் (டிக் 2 ராட் ($ அட்சரேகை 1)) * பாவம் (டிக் 2 ராட் ($ அட்சரேகை 2))) + (காஸ் (டிக் 2 ராட் ($ அட்சரேகை 1)) * காஸ் (டிக் 2 ராட் ($ அட்சரேகை 2)) * காஸ் (டிக் 2 ராட் ($ தீட்டா)) ); $ தூரம் = அகோஸ் ($ தூரம்); $ தூரம் = ராட் 2 டெக் ($ தூரம்); $ தூரம் = $ தூரம் * 60 * 1.1515; சுவிட்ச் ($ அலகு) {வழக்கு 'மி': முறிவு; வழக்கு 'கி.மீ': $ தூரம் = $ தூரம் * 1.609344; } திரும்ப (சுற்று ($ தூரம், 2)); }

    முன்கூட்டியே நன்றி

  42. 61
  43. 62

    ஹே டக்ளஸ், சிறந்த கட்டுரை. புவியியல் கருத்துகள் மற்றும் குறியீடு பற்றிய உங்கள் விளக்கத்தை நான் மிகவும் சுவாரஸ்யமாகக் கண்டேன். எனது ஒரே ஆலோசனையானது விண்வெளிக்குச் சென்று காட்சிக்கான குறியீட்டை உள்தள்ள வேண்டும் (எடுத்துக்காட்டாக, ஸ்டேக்ஓவர்ஃப்ளோ போன்றவை). நீங்கள் இடத்தைப் பாதுகாக்க விரும்புகிறீர்கள் என்பதை நான் புரிந்துகொள்கிறேன், ஆனால் வழக்கமான குறியீடு இடைவெளி / உள்தள்ளல் ஒரு புரோகிராமராக, படிப்பதற்கும் துண்டிக்கப்படுவதற்கும் எனக்கு மிகவும் எளிதாக்கும். எப்படியிருந்தாலும், அது ஒரு சிறிய விஷயம். சிறந்த வேலையைத் தொடருங்கள்.

  44. 64
  45. 65

    இங்கே செயல்பாட்டுடன் பயன்படுத்தும் போது நாம் ஒரு வகை தூரத்தைப் பெறுகிறோம்..இப்போது வினவலைப் பயன்படுத்தி அதன் வரவிருக்கும் மற்ற வகை தூரத்தையும் பெறுகிறோம்

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

    தேர்ந்தெடுக்கப்பட்ட மற்றும் எங்கே இரண்டு முறை சூத்திரத்தைப் பயன்படுத்துவது வேகமாக (mysql 5.9) தெரிகிறது:
    $ சூத்திரம் = “(((அகோஸ் (பாவம் ((“. $ அட்சரேகை. ”* பை () / 180)) * பாவம் ((` அட்சரேகை` * பை () / 180)) + காஸ் ((“. $ அட்சரேகை. ”* Pi () / 180%)) * cos ((` அட்சரேகை` * pi () / 180%)) * cos (((“. $ தீர்க்கரேகை.” - `தீர்க்கரேகை`) * pi () / 180%)))) * 180 / பை ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'SELECT *,'. $ சூத்திரம். ' அட்டவணையில் இருந்து தூரம் '.. $ சூத்திரம்.' <= '. $ தூரம்;

  51. 71
  52. 72

    இந்த கட்டுரையை வெட்டுவதற்கு நன்றி. இது மிகவும் உதவியாக இருக்கிறது.
    PHP முதலில் "தனிப்பட்ட முகப்பு பக்கம்" என்று அழைக்கப்படும் எளிய ஸ்கிரிப்டிங் தளமாக உருவாக்கப்பட்டது. இப்போதெல்லாம் மைக்ரோசாப்டின் ஆக்டிவ் சர்வர் பக்கங்கள் (ஏஎஸ்பி) தொழில்நுட்பத்தின் மாற்றாக PHP (ஹைபர்டெக்ஸ்ட் ப்ரொபொசசஸருக்கான குறுகிய) உள்ளது.

    PHP என்பது திறந்த மூல சேவையக பக்க மொழியாகும், இது மாறும் வலைப்பக்கங்களை உருவாக்க பயன்படுகிறது. இதை HTML இல் உட்பொதிக்கலாம். PHP பொதுவாக லினக்ஸ் / யுனிக்ஸ் வலை சேவையகங்களில் ஒரு MySQL தரவுத்தளத்துடன் இணைந்து பயன்படுத்தப்படுகிறது. இது அநேகமாக மிகவும் பிரபலமான ஸ்கிரிப்டிங் மொழியாகும்.

  53. 73

    மேலே தீர்வு சரியாக வேலை செய்யவில்லை என்று நான் கண்டேன்.
    நான் இதை மாற்ற வேண்டும்:

    $ qqq = “தேர்ந்தெடு *, (((அகோஸ் (பாவம் ((“. $ அட்சரேகை. ”* பை () / 180)) * பாவம் ((` லட்` * பை () / 180)) + காஸ் ((”). $ அட்சரேகை. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((”. $ தீர்க்கரேகை.” - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) `பதிவு` இலிருந்து தூரமாக;

  54. 75

    நன்றி ஐயா செய்தபின் .. ஆனால் தசம புள்ளி இல்லாமல் வெளியீடு செய்ய விரும்பினால் எனக்கு ஒரு கேள்வி இருக்கிறது, பிறகு நான் என்ன செய்ய முடியும் ..?

    முன்கூட்டியே நன்றி.

  55. 76

    வணக்கம், தயவுசெய்து எனக்கு இது உங்கள் உதவி தேவை.

    எனது வலை சேவையகத்திற்கு கோரிக்கை விடுத்தேன் http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ அட்சரேகை
    -2.23389 = $ தீர்க்கரேகை
    மற்றும் 20 = நான் மீட்டெடுக்க விரும்பும் தூரம்

    இருப்பினும் நீங்கள் சூத்திரத்தைப் பயன்படுத்தி, இது எனது டி.பியில் உள்ள அனைத்து வரிசைகளையும் மீட்டெடுக்கிறது

    $ முடிவுகள் = டி.பி. :: தேர்ந்தெடு (டி.பி. :: மூல (“தேர்ந்தெடு *, (((அகோஸ் (பாவம் ((“. $ அட்சரேகை. ”* பை () / 180)) * பாவம் ((லாட் * பை () / 180 )) + cos ((“. $ அட்சரேகை.” * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((“. $ தீர்க்கரேகை.” - lng) * pi ( ) / 180%)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) தொலைவில் இருந்து குறிப்பான்கள் தூரம்> = “. $ தூரம்));

    . ”தூரம்”: 1}, id “ஐடி”: 939, ”பெயர்”: ”அமீசியின் கிழக்கு கடற்கரை பிஸ்ஸேரியா”, ”முகவரி”: ”37.386337280273 காஸ்ட்ரோ செயின்ட், மவுண்டன் வியூ, சிஏ”, ”லாட்”: 122.08582305908, ”lng”: -16079.294719663, ”தூரம்”: 2}, {“ஐடி”: 790, ”பெயர்”: ”காப்ஸ் பிஸ்ஸா பார் & கிரில்”, ”முகவரி”: ”37.387138366699 காஸ்ட்ரோ செயின்ட், மவுண்டன் வியூ, சிஏ”, ”லாட்”: 122.08323669434, ”Lng”: - 16079.175940152, ”தூரம்”: 3}, {“ஐடி”: 191, ”பெயர்”: ”வட்ட அட்டவணை பிஸ்ஸா: மவுண்டன் வியூ”, ”முகவரி”: ”37.393886566162 என் ஷோர்லைன் பி.எல்.டி, மவுண்டன் வியூ, சி.ஏ”, ”Lat”: 122.07891845703, ”lng”: - 16078.381373826, ”தூரம்”: 4}, {“id”: 570, ”name”: ”டோனி & ஆல்பாவின் பிஸ்ஸா & பாஸ்தா”, ”முகவரி”: ”37.402652740479 எஸ்குவேலா அவே, மலை காண்க, CA ”,” lat ”: 122.07935333252,” lng ”: - 16077.420540582,” தூரம் ”: 5}, {“ id ”: 619,” name ”:” Oregano's Wood-Fired Pizza ”,” address ”:” 37.394012451172 எல் காமினோ ரியல், லாஸ் ஆல்டோஸ், சி.ஏ ”,” லாட் ”: 122.09552764893,” lng ”: - 16078.563225154,” தூரம் ”: 6}, {“ ஐடி ”: 4546,” பெயர் ”:” பார்கள் மற்றும் கிரில்ஸ் ”,” முகவரி ”:” 37.401725769043 வைட்லி ஸ்ட்ரீட், மான்செஸ்டர் ”,” லாட் ”: 122.11464691162,” lng ”: - 16077.937560795,” தூரம் ”: 7}]

    நான் 20 மைல்களுடன் வரிசைகளை மீட்டெடுக்க விரும்புகிறேன், ஆனால் அது எல்லா வரிசைகளையும் கொண்டுவருகிறது. தயவுசெய்து நான் என்ன தவறு செய்கிறேன்

  56. 77

    நான் இதே போன்ற வினவலைத் தேடுகிறேன் ஆனால் கொஞ்சம் முடுக்கிவிட்டேன் - சுருக்கமாக இது ஒவ்வொரு ஒருங்கிணைப்பிலும் 2 மைல்களுக்குள் உள்ள அனைத்து ஆயத்தொகுப்புகளையும் தொகுத்து, பின்னர் ஒவ்வொரு குழுவிலும் எத்தனை ஆயத்தொலைவுகளை கணக்கிட்டு, அதிக ஒருங்கிணைப்புகளைக் கொண்ட ஒரு குழுவை மட்டுமே வெளியிடுகிறது. அதிக எண்ணிக்கையிலான ஒருங்கிணைப்புகளைக் கொண்ட குழுக்களில் உங்களிடம் ஒன்றுக்கு மேற்பட்ட குழுக்கள் உள்ளன - ஒரே பெரிய எண்ணிக்கையிலான குழுக்களிலிருந்து சீரற்ற குழுவை வெறுமனே வெளியிடுங்கள் -

நீங்கள் என்ன நினைக்கிறீர்கள்?

இந்த தளம் ஸ்பேமைக் குறைக்க Akismet ஐப் பயன்படுத்துகிறது. உங்கள் கருத்துத் தரவு எவ்வாறு செயல்படுத்தப்படுகிறது என்பதை அறியவும்.