पीएचपी और एसक्यूएल: हेटर्सिन फॉर्मूला के साथ अक्षांश और देशांतर के बिंदुओं के बीच महान वृत्त दूरी की गणना या क्वेरी करें

Haversine Formula - PHP या MySQL के साथ ग्रेट सर्कल दूरी की गणना करें

इस महीने मैं GIS के संबंध में PHP और MySQL में काफी प्रोग्रामिंग कर रहा हूं। जाल के चारों ओर सूँघना, मुझे वास्तव में कुछ कठिन समय मिल गया था भौगोलिक गणना दो स्थानों के बीच की दूरी का पता लगाने के लिए इसलिए मैं उन्हें यहाँ साझा करना चाहता था।

फ्लाइट मैप यूरोप ग्रेट सर्कल दूरी के साथ

दो बिंदुओं के बीच की दूरी की गणना करने का सरल तरीका पाइथागोरसियन सूत्र का उपयोग करके त्रिकोण (ए of + बी² = सी²) के कर्ण की गणना करना है। इस के रूप में जाना जाता है यूक्लिडियन दूरी.

यह एक दिलचस्प शुरुआत है लेकिन यह भूगोल के साथ लागू नहीं होता है क्योंकि अक्षांश और देशांतर की रेखाओं के बीच की दूरी होती है एक समान दूरी नहीं अलग। जैसे-जैसे आप भूमध्य रेखा के करीब आते हैं, अक्षांश की रेखाएँ और अलग होती जाती हैं। यदि आप किसी प्रकार के सरल त्रिभुज समीकरण का उपयोग करते हैं, तो यह पृथ्वी के वक्रता के कारण, एक स्थान में दूरी को सही और दूसरे में बहुत गलत माप सकता है।

महान सर्कल दूरी

पृथ्वी के चारों ओर लंबी दूरी की यात्रा करने वाले मार्गों को कहा जाता है महान सर्कल दूरी। यह है ... एक गोले पर दो बिंदुओं के बीच की सबसे छोटी दूरी एक सपाट मानचित्र के बिंदुओं से अलग है। इस तथ्य के साथ संयोजन करें कि अक्षांश और देशांतर रेखाएं समान नहीं हैं ... और आपको एक कठिन गणना मिली है।

यहाँ एक शानदार वीडियो विवरण है कि ग्रेट सर्किल कैसे काम करते हैं।

द हॅवरसाइन फॉर्मूला

पृथ्वी की वक्रता का उपयोग करने वाली दूरी को इसमें शामिल किया गया है हैवरसाइन सूत्र, जो पृथ्वी की वक्रता की अनुमति देने के लिए त्रिकोणमिति का उपयोग करता है। जब आप पृथ्वी पर 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)); 
}

एसक्यूएल: अक्षांश और देशांतर का उपयोग करके मीलों में दूरी की गणना करके एक सीमा के भीतर सभी रिकॉर्ड प्राप्त करना

एक विशिष्ट दूरी के भीतर सभी रिकॉर्ड खोजने के लिए गणना करने के लिए एसक्यूएल का उपयोग करना भी संभव है। इस उदाहरण में, मैं 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 में किलोमीटर का उपयोग करते हुए 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 को पोर्ट करने वाले किसी व्यक्ति के लिए FYI:
    डबल डिग्रेड 2 (डबल डीएल) {रिटर्न डाउन * (3.14159265358979323846 / 180.0); }

  2. 2

    पोस्टिंग का बहुत अच्छा टुकड़ा - बहुत अच्छा काम किया - मुझे केवल लेट-लॉन्ग पकड़े हुए टेबल का नाम बदलना पड़ा। यह बहुत तेजी से काम करता है .. मेरे पास लैट-लॉन्ग (<400) की काफी कम संख्या है, लेकिन मुझे लगता है कि यह अच्छी तरह से स्केल होगा। अच्छी साइट भी - मैंने अभी इसे अपने del.icio.us खाते में जोड़ा है और नियमित रूप से वापस जाँच करेगा।

  3. 4
  4. 5

    मैंने पूरे दिन की दूरी की गणना के लिए खोज की और हर्वसिन एल्गोरिथ्म पाया, इसका उदाहरण यह देने के लिए कि इसे एक sql स्टेटमेंट में कैसे रखा जाए। धन्यवाद और बधाई, डैनियल

  5. 8

    मुझे लगता है कि आपके एसक्यूएल को एक बयान की आवश्यकता है।
    इसके स्थान पर <= $ दूरी की आपको आवश्यकता हो सकती है
    HAVING दूरी का उपयोग करें <= $ दूरी

    अन्यथा मुझे समय और ऊर्जा का एक गुच्छा बचाने के लिए धन्यवाद।

    • 9

      हाय David,

      यदि आप किसी भी प्रकार के ग्रुप बाय स्टेटमेंट कर रहे हैं, तो आपको 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

    नमस्ते,

    एक और सवाल। क्या एनएमईए स्ट्रिंग्स के लिए एक फार्मूला नीचे की तरह है?

    1342.7500, एन, 10052.2287, ई

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

    धन्यवाद,
    सताना

  11. 16

    मैंने यह भी पाया कि WHERE ने मेरे लिए काम नहीं किया। इसे बदलने के लिए और सब कुछ सही काम करता है। सबसे पहले मैंने टिप्पणियों को नहीं पढ़ा और एक नेस्टेड चयन का उपयोग करके इसे फिर से लिखा। दोनों ही ठीक काम करेंगे।

  12. 17
  13. 18

    अविश्वसनीय रूप से उपयोगी, बहुत बहुत धन्यवाद! मुझे "WHERE" के बजाय नए "HAVING" से कुछ समस्याएँ हो रही थीं, लेकिन एक बार मैंने यहाँ टिप्पणियाँ पढ़ीं (हताशा = P में अपने दाँत पीसने के लगभग आधे घंटे के बाद), मुझे यह अच्छी तरह से काम करने लगा। धन्यवाद ^ _ ^

  14. 19
  15. 20

    ध्यान रखें कि इस तरह का एक चुनिंदा बयान बहुत कम्प्यूटेशनल रूप से तीव्र और इसलिए धीमा होगा। यदि आपके पास उन प्रश्नों का एक बहुत है, तो यह चीजों को बहुत तेज़ी से नीचे गिरा सकता है।

    एक बहुत कम तीव्र दृष्टिकोण एक गणना दूरी द्वारा परिभाषित एक SQUARE क्षेत्र का उपयोग करके पहला (क्रूड) चलाने के लिए है "टैबलेन से अक्षांश 1 और 2 के बीच अक्षांश और lon1 और lon2 के बीच देशांतर" यानी "चयन करें"। lat1 = targetlatitude - latdiff, lat2 = targetlatitude + latdiff, लोन के समान। latdiff ~ = दूरी / 111 (किमी के लिए), या दूरी / 69 मील के लिए 1 डिग्री अक्षांश के बाद से ~ 111 किमी (पृथ्वी से थोड़ा भिन्नता अंडाकार है, लेकिन इस उद्देश्य के लिए पर्याप्त है)। londiff = दूरी / (एब्स (कोस 2 (अक्षांश)) * * 111)) - या 69 मील के लिए (आप वास्तव में भिन्नता के लिए खाते में थोड़ा बड़ा वर्ग ले सकते हैं)। फिर उस का परिणाम लें और उसे रेडियल चयन में खिलाएं। बस आउट-ऑफ-बाउंड्स निर्देशांक के लिए खाते में मत भूलना - यानी स्वीकार्य देशांतर की सीमा -180 से +180 है और स्वीकार्य अक्षांश की सीमा -90 से +90 है - यदि आपकी सीमा या लोंडीफ इस सीमा के बाहर चलती है। । ध्यान दें कि ज्यादातर मामलों में यह लागू नहीं हो सकता है क्योंकि यह केवल पोल से ध्रुव तक प्रशांत महासागर के माध्यम से एक रेखा पर गणना को प्रभावित करता है, हालांकि यह चुकोटका के हिस्से और अलास्का के हिस्से को काटता है।

    इसके द्वारा हम जो हासिल करते हैं, वह उन अंकों की संख्या में महत्वपूर्ण कमी है, जिनके खिलाफ आप यह गणना करते हैं। यदि आपके पास डेटाबेस में एक लाख वैश्विक बिंदु समान रूप से समान रूप से वितरित हैं और आप 100 किमी के भीतर खोज करना चाहते हैं, तो आपकी पहली (तेज़) खोज 10000 वर्ग किमी के क्षेत्र की है और संभवतः लगभग 20 परिणाम प्राप्त करेंगे (एक से अधिक वितरण के आधार पर सतह का क्षेत्रफल लगभग 500 मीटर वर्ग किमी), जिसका अर्थ है कि आप इस क्वेरी के लिए 20 बार के बजाय XNUMX बार जटिल दूरी की गणना चलाते हैं।

    • 21

      उदाहरण में छोटी सी गलती ... जो 50 किमी (100 नहीं) के भीतर होगी क्योंकि हम अपने वर्ग के "त्रिज्या" को देख रहे हैं।

      • 22

        शानदार सलाह! मैंने वास्तव में एक डेवलपर के साथ काम किया, जिसने एक फ़ंक्शन लिखा था जो अंदर के वर्ग को खींचता था और फिर एक पुनरावर्ती फ़ंक्शन होता है जो शेष बिंदुओं को शामिल करने और बाहर करने के लिए परिधि के चारों ओर 'वर्ग' बनाता है। परिणाम एक अविश्वसनीय रूप से तेजी से परिणाम था - वह माइक्रोसेकंड में लाखों अंकों का मूल्यांकन कर सकता था।

        ऊपर मेरा दृष्टिकोण निश्चित रूप से 'क्रूड' है, लेकिन सक्षम है। एक बार फिर धन्यवाद!

        • 23

          डौग,

          मैं मूल्यांकन करने के लिए mysql और php का उपयोग करने की कोशिश कर रहा हूं कि क्या एक लंबा लंबा बिंदु बहुभुज के भीतर है। क्या आप जानते हैं कि आपके डेवलपर मित्र ने इस कार्य को पूरा करने के बारे में कोई उदाहरण प्रकाशित किया है। या क्या आप कोई अच्छा उदाहरण जानते हैं। अग्रिम में धन्यवाद।

  16. 24

    हाय सब यह मेरा परीक्षण एसक्यूएल बयान है:

    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

    यह बहुत अच्छा है, हालाँकि यह ठीक उसी तरह है जैसे पक्षी उड़ते हैं। Google मैप्स API को किसी भी तरह (शायद सड़कों आदि का उपयोग करके) शामिल करने की कोशिश करना और इसे शामिल करना बहुत अच्छा होगा। बस परिवहन के एक अलग रूप का उपयोग करके एक विचार देना है। मुझे अभी भी PHP में एक सिम्युलेटेड एनालिंग फंक्शन करना है जो ट्रैवलिंग सेल्समैन की समस्या का कुशल समाधान प्रस्तुत करने में सक्षम होगा। लेकिन मुझे लगता है कि मैं ऐसा करने के लिए आपके कुछ कोड का पुन: उपयोग करने में सक्षम हो सकता हूं।

  18. 27
  19. 28

    अच्छा लेख! मुझे दो बिंदुओं के बीच दूरी की गणना करने के तरीके के बारे में बहुत सारे लेख मिले, लेकिन मैं वास्तव में एसक्यूएल स्निपेट की तलाश कर रहा था।

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

    अनुसंधान के 2 दिन आखिरकार इस पृष्ठ को ढूंढते हैं जो मेरी समस्या को हल करता है। ऐसा लगता है कि मैं अपने वुल्फरामअल्फा को बेहतर तरीके से मिटा रहा हूं और अपने गणित पर ब्रश कर रहा हूं। WHERE से HAVING में परिवर्तन से कार्य क्रम में मेरी स्क्रिप्ट है। धन्यवाद

  25. 37
    • 38

      धन्यवाद जॉर्जी। मैं कॉलम 'दूरी' नहीं मिला। एक बार जब मैं वहाँ को बदलने के लिए यह एक आकर्षण की तरह काम किया!

  26. 39

    काश यह पहला पृष्ठ होता जो मुझे इस पर मिलता। कई अलग-अलग कमांड की कोशिश करने के बाद यह ठीक से काम करने के लिए एकमात्र था, और मेरे खुद के डेटाबेस को फिट करने के लिए आवश्यक न्यूनतम परिवर्तनों के साथ।
    बहुत बहुत धन्यवाद!

  27. 40

    काश यह पहला पृष्ठ होता जो मुझे इस पर मिलता। कई अलग-अलग कमांड की कोशिश करने के बाद यह ठीक से काम करने के लिए एकमात्र था, और मेरे खुद के डेटाबेस को फिट करने के लिए आवश्यक न्यूनतम परिवर्तनों के साथ।
    बहुत बहुत धन्यवाद!

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

    मुझे पता है कि यह सूत्र काम करता है, लेकिन मैं यह नहीं देख सकता कि पृथ्वी की त्रिज्या को कहाँ ध्यान में रखा जाता है। क्या कोई मुझे बता सकता है, कृपया?

  34. 49
  35. 50
  36. 52

    डगलस, एसक्यूएल क्वेरी का धन्यवाद, जिसकी मुझे आवश्यकता है, और मुझे लगा कि मुझे इसे स्वयं लिखना होगा। आपने मुझे संभवतः अक्षांश देशांतर सीखने के घंटों से बचाया है!

  37. 53
    • 54

      पीटर, कृपया अन्य टिप्पणियों के माध्यम से पढ़ें। ऐसा प्रतीत होता है कि कुछ लोगों को WHERE / HAVING के लिए एक अलग वाक्यविन्यास का उपयोग करना पड़ा।

  38. 55
  39. 56

    डगलस, इस अद्भुत कोड के लिए धन्यवाद। मेरे जीपीएस सामुदायिक पोर्टल पर ऐसा करने के लिए मेरे सिर को फटा जा रहा है। आपने मुझे घंटों बचाया है।

  40. 58

    इस उपयोगी लेख को पोस्ट करने के लिए धन्यवाद,  
    लेकिन किसी कारण के लिए मैं पूछना चाहता हूँ
    mysql db के अंदर के कॉर्ड्स के बीच की दूरी कैसे प्राप्त करें और यूजर द्वारा php में कॉर्ड्स डाले जाएं?
    अधिक स्पष्ट रूप से वर्णन करने के लिए:
    1.user को db से निर्दिष्ट डेटा का चयन करने के लिए [id] सम्मिलित करना होगा और उपयोगकर्ता के स्वयं के कोर्डर्स
    2. php फ़ाइल को [id] का उपयोग करके लक्ष्य डेटा (कोर्डर्स) मिलता है और फिर उपयोगकर्ता और लक्ष्य बिंदु के बीच की दूरी की गणना करता है

    या बस नीचे दिए गए कोड से दूरी प्राप्त कर सकते हैं?

    $ qry = "SELECT *, ((acos (पाप ("। $ अक्षांश "। * pi () / 180)) * sin ((` अक्षांश '* pi () / 180) + cos (")। $ अक्षांश। ”* pi () / 180)) * cos ((` अक्षांश `* pi () / 180)) * cos (((“। $ देशांतर। ”-` देशांतर`) * pi () / 180 ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) 'MyTable` WHERE दूरी> = "$ दूरी से।" >>>> क्या मैं यहाँ से दूरी "ले" सकता हूँ?
    एक बार फिर धन्यवाद,
    टिम्मी एस

  41. 60

    ठीक है, मैंने जो कुछ भी कोशिश की है वह काम नहीं कर रहा है। मेरा मतलब है, मेरे पास क्या काम है, लेकिन दूरियां दूर हैं।

    क्या कोई संभवतः देख सकता है कि इस कोड में क्या गलत है?

    if (isset ($ _ POST ['प्रस्तुत'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['त्रिज्या']; गूंज "परिणाम के लिए"। $ 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 WHERE m.zipcode = z1.zipcode और z2.zipcode = $ z AND (3963 * acos (troscate (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 ()); जबकि ($ पंक्ति = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName'] ""। $ स्टोर = $ पंक्ति ['LocAddSt']। ””; $ स्टोर। = $ पंक्ति ['लोकेडसिटी']। "," $ पंक्ति ['लोकेडस्टेट "]।" "$ पंक्ति [ 'ज़िपकोड']। $ अक्षांश 1 = $ पंक्ति ['अक्षांश']; $ देशांतर 1 = $ पंक्ति ['लोन']; $ अक्षांश 2 = $ पंक्ति ['y1']; $ देशांतर 2 = $ पंक्ति ['एक्स 1']; $ शहर = $ पंक्ति ['शहर']; $ राज्य = $ पंक्ति ['राज्य']; $ dis = getnew ($ अक्षांश 1, $ देशांतर 1, $ अक्षांश 2, $ देशांतर 2, $ इकाई = 'एमआई'); // $ dis = दूरी ($ lat1, $ lon1, $ lat2, $ lon2); $ सत्यापित = $ पंक्ति ['सत्यापित']; अगर ($ सत्यापित == '1') {गूंज ""; गूंज ""। $ स्टोर। ""; इको $ डिस। " मीलों दूर"; गूंज ""; } और {गूंज ""। $ स्टोर। ""; इको $ डिस। " मीलों दूर"; गूंज ""; }}}

    मेरे कार्य। एफपीपी कोड
    समारोह getnew ($ अक्षांश 1, $ देशांतर 1, $ अक्षांश 2, $ देशांतर 2, $ इकाई = 'एमआई') {$ थीटा = $ देशांतर 1 - $ देशांतर 2; $ दूरी = (पाप (डाउनट्रेड 2)) ); $ दूरी = एकड़ ($ दूरी); $ दूरी = rad1deg ($ दूरी); $ दूरी = $ दूरी * 2 * 2; स्विच ($ इकाई) {केस 'Mi': ब्रेक; मामला 'किमी': $ दूरी = $ दूरी * 2; } वापसी (गोल ($ दूरी, 1)); }

    आप पहले से धन्यवाद

  42. 61
  43. 62

    हे डगलस, महान लेख। मुझे भौगोलिक अवधारणाओं की व्याख्या और कोड वास्तव में दिलचस्प लगे। मेरा एकमात्र सुझाव अंतरिक्ष के लिए होगा और कोड को डिस्प्ले के लिए इंडेंट करना होगा (उदाहरण के लिए स्टैकओवरफ़्लो)। मैं समझता हूं कि आप अंतरिक्ष का संरक्षण करना चाहते हैं, लेकिन पारंपरिक कोड रिक्ति / इंडेंटेशन यह मेरे लिए एक प्रोग्रामर के रूप में, पढ़ने और विच्छेद करने में बहुत आसान बना देगा। किसी भी तरह, यह एक छोटी सी बात है। अच्छा काम करते रहो।

    • 63

      धन्यवाद! मैंने पोस्ट को थोड़ा संशोधित किया है ... लेकिन समीकरण बहुत अधिक जगह लेते हैं और इतने लंबे होते हैं कि मुझे यकीन नहीं होता कि यह बहुत मदद करता है।

  44. 64
  45. 65

    यहां फ़ंक्शन के साथ उपयोग करते समय हम एक प्रकार की दूरी प्राप्त कर रहे हैं..इस प्रकार क्वेरी का उपयोग करके इसकी अन्य प्रकार की दूरी

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

    यह तेजी से लगता है (mysql 5.9) चयन में दो बार सूत्र का उपयोग करने के लिए और जहां:
    $ सूत्र = "(((एकोस (पाप ("। $ अक्षांश। "* पीआई) (/ 180)) * पाप ((` अक्षांश '* पीआई () / 180)) + cos ("" $ अक्षांश। "* Pi () / 180)) * cos ((` अक्षांश `* pi () / 180)) * cos ((((" $ देशांतर। "-` देशांतर`) * pi () / (180))) * 180 / अनुकरणीय ()) * 60 * 1.1515 * 1.609344) ";
    $ sql = 'SELECT *,'। $ सूत्र। ' तालिका से दूरी के रूप में '.. $ सूत्र।' <= '। $ दूरी;

  51. 71
  52. 72

    इस लेख के लिए बहुत धन्यवाद। यह बहुत उपयोगी है।
    PHP को पहले "व्यक्तिगत होम पेज" नामक एक सरल स्क्रिप्टिंग प्लेटफ़ॉर्म के रूप में बनाया गया था। आजकल PHP (हाइपरटेक्स्ट प्रीप्रोसेसर के लिए छोटा) Microsoft के सक्रिय सर्वर पेज (ASP) तकनीक का एक विकल्प है।

    PHP एक ओपन सोर्स सर्वर-साइड भाषा है जिसका उपयोग डायनामिक वेब पेज बनाने के लिए किया जाता है। इसे HTML में एम्बेड किया जा सकता है। PHP आमतौर पर लिनक्स / यूनिक्स वेब सर्वर पर एक MySQL डेटाबेस के साथ संयोजन में उपयोग किया जाता है। यह शायद सबसे लोकप्रिय पटकथा भाषा है।

  53. 73

    मैंने उपरोक्त समाधान ठीक से काम नहीं किया।
    मुझे इसे बदलने की आवश्यकता है:

    $ qqq = "SELECT *, (((acos (sin ("। $ अक्षांश "। * pi () / 180)) * sin ((` latt` * pi () / 180) + cos (")। $ अक्षांश। "* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos ((("। $ देशांतर।" - `longt`) * pi () / 180 ))) * 180 / पीआई ()) * 60 * 1.1515) के रूप में दूरी से `रजिस्टर`”;

  54. 75
  55. 76

    नमस्कार, कृपया मुझे इस पर आपकी सहायता की आवश्यकता होगी।

    मैंने अपने वेब-सर्वर से अनुरोध किया http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ अक्षांश
    -2.23389 = $ देशांतर
    और 20 = वह दूरी जिसे मैं पुनः प्राप्त करना चाहता हूं

    हालाँकि आप सूत्र का उपयोग करते हुए, यह मेरे db में सभी पंक्तियों को पुनः प्राप्त करता है

    $ परिणाम = DB :: select (DB :: raw ("Select *, ((acos (sin ("। $ अक्षांश ") * pi () / 180)) * sin ((lat * pi () / 180 )) cos ("(" $ अक्षांश। "* pi () / 180)) * cos ((lat * pi () / 180)) * cos ((" ($ देशांतर। "- lng) * pi () ) / (180)))) 180 / pi ()) * 60 * 1.1515 * 1.609344) दूरी के रूप में मार्करों से दूरी> = ""। $ दूरी);

    [{"आईडी": 1, "नाम": "फ्रेंकी जॉनी और लुइगो टू", "पता": "939 डब्ल्यू एल कैमिनो रियल, माउंटेन व्यू, सीए", "लैट": 37.386337280273, "ओंग": - 122.08582305908, "दूरी": 16079.294719663}, {"आईडी": 2, "नाम": "एमीस ईस्ट कोस्ट पिज़्ज़ेरिया", "पता": "790 कास्त्रो सेंट, माउंटेन व्यू, सीए", "लाट": 37.387138366699, "lng": -122.08323669434, "दूरी": 16079.175940152}, "" आईडी ": 3," नाम ":" कप्प्स पिज्जा बार एंड ग्रिल "," पता ":" 191 कास्त्रो सेंट, माउंटेन व्यू, सीए "," लैट ": 37.393886566162। "Lng": - 122.07891845703, "दूरी": 16078.381373826}, {"id": 4, "नाम": "राउंड टेबल पिज्जा: माउंटेन व्यू", "पता": "570 N Shleline Blvd, माउंटेन व्यू, CA", "Lat": 37.402652740479, "lng": - 122.07935333252, "दूरी": 16077.420540582}, {"id": 5, "name": "टोनी और अल्बा का पिज़्ज़ा और पास्ता", "पता": "619 Escuela Ave, पर्वत" देखें, CA "," lat ": 37.394012451172," lng ": - 122.09552764893," दूरी ": 16078.563225154}, {" id ": 6," name ":" Oregano's Wood-Fired Pizza "," पता ":" 4546 " एल कैमिनो रियल, लॉस अल्टोस, सीए "," लेट ": 37.401725769043," एलएनजी ": - 122.11464691162," दूरी ": 16077.937560795}, {" आईडी ": 7," नाम ":" बार और ग्रिल्स "," पता ":" 24 व्हाइटली स्ट्रीट, मैनचेस्टर "," लैट ": 53.485118865967," lng ": - 2.1828699111938," दूरी ": 8038.7620112314}]

    मैं केवल 20 मील के साथ पंक्तियों को पुनः प्राप्त करना चाहता हूं लेकिन यह सभी पंक्तियों को लाता है। कृपया मैं क्या गलत कर रहा हूँ

तुम्हें क्या लगता है?

यह साइट स्पैम को कम करने के लिए अकिस्मेट का उपयोग करती है। जानें कि आपका डेटा कैसे संसाधित किया जाता है.