PHP र SQL: हेभर्सिन फार्मुलाको साथ अक्षांश र देशान्तर बिन्दुको बिचमा ग्रेट सर्कल दूरी गणना गर्नुहोस् वा क्वेरी गर्नुहोस्।

Haversine फॉर्मूला - PHP वा MySQL संग ग्रेट सर्कल दूरी गणना गर्नुहोस्

यस महिना म GIS लाई सम्मान गर्दै PHP र MySQL मा केहि थोरै कार्यक्रम गर्दैछु। नेटको वरिपरि स्नुप गर्दै, मलाई वास्तवमै केहि भेट्टाउन गाह्रो भयो भौगोलिक गणना दुई स्थानहरूको बीच दूरी पत्ता लगाउनको लागि म तिनीहरूलाई यहाँ सेयर गर्न चाहान्छु।

उडान नक्शा यूरोप महान सर्कल दूरी संग

दुई पोइन्ट बीचको दूरी हिसाब गर्ने सरल तरिका भनेको पायथागोरियन सूत्र प्रयोग गर्दै त्रिकोण (A² + B² = C²) का काल्पनिक गणना गर्न। यो यस रूपमा चिनिन्छ युक्लिडियन दूरी.

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

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

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

यहाँ कसरी उत्तम सर्कलहरू काम गर्दछन् बारे एक शानदार भिडियो विवरण।

Haversine फॉर्मूला

पृथ्वीको घुमाव प्रयोग गरेर दूरी मा समेटिएको छ Haversine सूत्र, जसले पृथ्वीको वक्रतालाई अनुमति दिनको लागि त्रिकोणमिती प्रयोग गर्दछ। जब तपाईं पृथ्वीमा २ स्थानहरू बीच दूरी खोज्नुहुन्छ (काग जस्तै उडेर जान्छ), एक सीधा रेखा वास्तवमा चाप हो।

यो हवाको उडानमा लागू हुन्छ - के तपाईंले कहिल्यै उडानहरूको वास्तविक नक्सालाई हेर्नुभयो र याद गर्नुभयो कि तिनीहरू क्रमबद्ध छन्? त्यो किनभने स्थानमा सिधा भन्दा दुई पोइन्टहरूका बीचमा एउटा सानामा उडान गर्न छोटो छ।

PHP: अक्षांश र देशान्तरको दुई पोइन्टहरू बीच दूरी गणना गर्नुहोस्

जे भए पनि, यहाँ दुबै बीचको दूरी गणना गर्न 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 को उपयोग गर्न पनि सम्भव छ। यस उदाहरणको लागि, म MySQL मा MyTable क्वेरी जाँदैछु सबै रेकर्डहरू भेट्टाउन जुन चर - दूरी (माइलमा) भन्दा मेरो स्थानमा $ अक्षांश र itude देशान्तरमा कम:

विशिष्ट भित्र सबै रेकर्डहरू पुन: प्राप्त गर्नका लागि प्रश्न दूरी माईलमा दूरी हिसाब गरेर अक्षांश र देशान्तरका दुई पोइन्टहरू बीच हुन्:

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

तपाईंले यसलाई अनुकूलित गर्नु पर्छ:

  • itude देशान्तर - यो एक PHP भ्यारीएबल हो जहाँ म पोइन्टको देशान्तर पार गर्दैछु।
  • itude अक्षांश - यो एक 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."

तपाईंले यसलाई अनुकूलित गर्नु पर्छ:

  • itude देशान्तर - यो एक PHP भ्यारीएबल हो जहाँ म पोइन्टको देशान्तर पार गर्दैछु।
  • itude अक्षांश - यो एक PHP भ्यारीएबल हो जहाँ म पोइन्टको देशान्तर पार गर्दैछु।
  • । दूरी - यो दूरी हो जुन तपाईं सबै रेकर्डहरू कम वा बराबर फेला पार्न चाहानुहुन्छ।
  • तालिका - यो टेबल हो ... तपाईं यसलाई तपाईंको टेबलको नामसँग बदल्न चाहानुहुन्छ।
  • अक्षांश - यो तपाईंको अक्षांशको क्षेत्र हो।
  • देशान्तरण - यो तपाईंको देशान्तरको क्षेत्र हो।

मैले यो कोड ईन्टरप्राइज म्यापि। प्लेटफर्ममा प्रयोग गर्‍यो जुन हामीले उत्तर अमेरिकामा १,००० भन्दा बढी स्थानहरूसहितको खुद्रा स्टोरको लागि प्रयोग गर्‍यौं र यसले राम्रोसँग काम गर्यो।

76 टिप्पणिहरु

  1. 1

    साझा गर्नुभएकोमा धेरै धेरै धन्यबाद। यो एक सजिलो प्रतिलिपि र पेस्ट कार्य हो र राम्रो काम गर्दछ। तपाईंले मलाई धेरै समय बचत गर्नुभयो।
    सी पोर्टिंग जो कोहीको लागि FYI:
    डबल डिग्री २rad (डबल डिग्री) {रिटर्न डिग्री * (2.१3.14159265358979323846१180.0 XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX / १.XNUMX०.०); }

  2. 2

    धेरै राम्रो पोष्टिंगको टुक्रा - धेरै राम्रो काम गर्यो - मैले केवल तालिकाको नाम परिवर्तन गर्नुपर्दछ लेट-लामो। यो धेरै छिटो काम गर्दछ .. मसँग पर्याप्त लेट-लान्गहरूको संख्या थोरै छ (<400) तर मलाई लाग्छ कि यो राम्रोसँग मापन हुनेछ। राम्रो साइट पनि - मैले भर्खरै यसलाई मेरो del.icio.us खातामा थपें ​​र नियमित रूपमा फेरि जाँच गर्नेछु।

  3. 4
  4. 5

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

  5. 8

    मलाई लाग्छ तपाईंको SQL लाई कथनको आवश्यकता छ।
    WHERE दूरीको सट्टा <= instead दूरी तपाईंले गर्नुपर्ने हुनसक्दछ
    HAVING दूरी <= $ दूरी प्रयोग गर्नुहोस्

    अन्यथा मलाई समय र उर्जाको गुच्छा बचत गर्नु भएकोमा धन्यवाद।

    • 9

      नमस्ते डेभिड,

      यदि तपाइँ GROUP BY कथनको कुनै प्रकार गर्दै हुनुहुन्छ, तपाइँलाई आवाश्यक पर्नेछ। मैले माथिको उदाहरणमा गरिरहेको छैन।

      डग

  6. 10
  7. 11
  8. 12

    यस कोड साझा गर्न को लागी धेरै धन्यवाद। यसले मेरो धेरै विकास समय बचायो। साथै, तपाईका पाठकहरूलाई यो दर्साउनु भएकोमा धन्यवाद छ कि MySQL x.० का लागि HAVING कथन आवश्यक छ। धेरै सहयोगी।

  9. 14

    माथिको सूत्रले मलाई धेरै समय बचत गरिरहेको छ। मुरी मुरी धन्यवाद।
    मैले NMEA ढाँचा र डिग्री बीच स्विच गर्नु पर्छ। मैले पृष्ठको तल URL मा यो सूत्र फेला पारे। http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    कसैलाई थाहा छ यो कसरी प्रमाणित गर्ने?

    धन्यवाद!
    हैरी

  10. 15
  11. 16

    मैले यो पनि फेला पारे कि WHERE ले मेरो लागि काम गरेन। यसलाई HAVING मा परिवर्तन गरियो र सबै कुरा उत्तम काम गर्दछ। सुरुमा मैले टिप्पणीहरू पढेनु र नेस्टेड चयन प्रयोग गरेर यसलाई पुनःलेखियो। दुबै लाई ठीक काम गर्ने छ।

  12. 17
  13. 18

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

  14. 19
  15. 20

    दिमागमा राख्नुहोस् कि जस्तो एक चयन कथन धेरै कम्प्यूटेशनल गहन र त्यसैले ढिलो हुनेछ। यदि तपाईंसँग यी धेरै प्रश्नहरू छन् भने, यसले चीजहरू चाँडै बोग गर्न सक्छन्।

    धेरै कम गहन दृष्टिकोण एउटा पहिलो (कच्चा) चयन गरीएको SQLARE क्षेत्र प्रयोग गरी चयन गरिएको गणना को हिसाबले गरिन्छ जस्तै "तालिकानामबाट चयन गर्नुहोस् जहाँ ल्याट १ र ल्याट २ र देशान्तर १ र १२ बीचको देशान्तर"। ल्याट १ = टारटलिटिट्यूड - लेटिडिफ, ल्याट २ = टारगेट्लिट्यूट + लेटिडिफ, लोनसँग मिल्दो। ल्याटिडिफ distance = दूरी / १११ (किमीका लागि), वा दूरी / 1 for माइलको लागि १ डिग्री अक्षांशको ~ १११ किलोमिटर छ (हल्का भिन्नता पृथ्वी थोरै अंडाकार छ, तर यस उद्देश्यको लागि पर्याप्त छ)। लन्डिफ = दूरी / (एब्स (कोस (डिग्री २ अक्षांश (अक्षांश)) * १११)) वा miles for माईलको लागि (तपाईं वास्तवमा थोरै ठूलो वर्ग लिन सक्नुहुनेछ भिन्नताहरूको लागि खाता गर्नको लागि)। त्यसो भए त्यसको नतीजा लिनुहोस् र यसलाई रेडियल सेलेक्टमा फीड गर्नुहोस्। केवल बाहिरको सीमा निर्देशांकहरूको लागि खाता गर्न नबिर्सनुहोस् - जस्तै स्वीकार्य देशान्तरको दायरा -१2० देखि +१1० हो र स्वीकार्य अक्षांशको सीमा -2० देखि + 1 ० छ - यदि तपाईंको लेटिडिफ वा लन्डिफ यस दायरा भन्दा बाहिर चल्दछ भने। । नोट गर्नुहोस् कि धेरै जसो यो लागू हुँदैन किनकि यसले केवल प्रशान्त महासागरबाट ध्रुवबाट पोलसम्म रेखा लाई गणना गर्दछ, यद्यपि यसले चकोटकाको भाग र अलास्काको भाग काट्छ।

    हामीले यसबाट के सlish्केत गर्छौं पोइन्टहरूको स reduction्ख्यामा उल्लेखनीय कटौती छ जुन तपाईं यस गणना गर्नुहुन्छ। यदि तपाईंसँग डाटाबेसमा एक मिलियन ग्लोबल पोइन्टहरू समान रूपमा वितरित छन् र तपाईं १०० किलोमिटर भित्र खोजी गर्न चाहनुहुन्छ भने, तपाईंको पहिलो (द्रुत) खोजी १०००० वर्ग किलोमिटर क्षेत्रको हो र सम्भवतः २० परिणामहरू निकाल्नेछ (यहाँसम्म कि वितरणमा पनि आधारित) लगभग M०० मीटर वर्ग किलोमिटरको सतह क्षेत्र), जसको मतलब यो हो कि तपाईं यस क्वेरीको लागि २० लाख पटकको सट्टा जटिल दूरी गणना चलाउनुहुन्छ।

    • 21

      उदाहरणको लागि सानो गल्ती… जुन km० किमी भित्रमा हुन्छ (१०० होइन) किनकि हामी हाम्रो… वर्गको "त्रिज्या" हेरिरहेका छौं।

      • 22

        कल्पनिय सल्लाह! मैले वास्तवमै एक विकासकर्तासँग काम गरें जसले भित्री भित्र वर्ग तान्यो र त्यसपछि एउटा रिकर्सिभ फंक्शन जसले परिधिको वरिपरि 'वर्ग' बनायो र बाँकी पोइन्टहरू समावेश नगरी बाहिर काम गरें। परिणाम अविश्वसनीय रूपमा द्रुत परिणाम थियो - उसले माइक्रोसेकेन्डमा लाखौं पोइन्टहरू मूल्या evalu्कन गर्न सक्दछ।

        मेरो माथिको दृष्टिकोण निश्चित रूपमा 'कच्चा' तर सक्षम छ। फेरि पनि धन्यबाद!

        • 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 मा एक नक्कल annealing समारोह बनाउन कि ट्राभल सेल्सम्यान समस्या को एक कुशल समाधान प्रस्ताव गर्न को लागी गर्न को लागी अझै छ। तर मलाई लाग्छ कि त्यसो गर्न म तपाईंको कोडको केहि प्रयोग गर्न सक्दछु।

  18. 27

    नमस्ते डगलस,
    यस लेखको लागि धेरै धेरै धन्यवाद - तपाईंले भर्खर मलाई धेरै समय बचत गर्नुभयो।
    ख्याल राख,
    निम्रोड @ इजरायल

  19. 28

    राम्रो लेख! मैले दुईवटा बिन्दु बीच दूरी कसरी हिसाब गर्ने भनेर वर्णन गर्ने धेरै लेखहरू भेट्टाए तर म वास्तवमै एसक्यूएल स्निपेट खोज्दै थिए।

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

    २ दिन अनुसन्धान अन्ततः यस पृष्ठमा फेला पार्न जुन मेरो समस्या समाधान गर्दछ। यस्तो देखिन्छ कि म मेरो WolframAlpha लाई राम्रोसँग बस्ट गर्छु र मेरो गणितमा ब्रश गर्छु। WHERE बाट HAVING मा परिवर्तनको क्रममा मेरो लिपि छ। धन्यवाद

  25. 37
    • 38

      धन्यवाद जॉर्जि। मैले स्तम्भ 'दूरी' फेला पार्न सकेन। एक पटक मैले WHERE लाई HAVING गर्न परिवर्तन गरें यसले आकर्षणको जस्तो काम गर्‍यो!

  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

    डगलस, यो अद्भुत कोड को लागी धन्यवाद। मेरो जीपीएस सामुदायिक पोर्टलमा यो कसरी गर्ने भन्नेमा मेरो टाउको क्र्याक गरिएको छ। तपाईंले मेरो समय बचत गर्नुभयो।

  40. 58

    यो सहयोगी लेख पोस्ट गर्नुभएकोमा धन्यवाद,  
    तर केहि कारणको लागि म सोध्न चाहन्छु
    कसरी mysql db भित्र कोर र प्रयोगकर्ताहरू द्वारा php सम्मिलित समन्वयहरू बीच दूरी प्राप्त गर्ने?
    अधिक स्पष्ट वर्णनको लागि:
    १. उपभोक्ताले [आईडी] सम्मिलित गर्नुपर्नेछ db र प्रयोगकर्ताको निर्देशांकबाट निर्दिष्ट डाटा चयन गर्नका लागि
    २.पीएचपी फाईलले [आईडी] को प्रयोग गरेर लक्षित डेटा (कोर्ड्स) पाउनुहोस् र त्यसपछि प्रयोगकर्ता र लक्षित बिन्दु बीचको दूरी गणना गर्नुहोस्

    वा केवल तलको कोडबाट दूरी प्राप्त गर्न सक्नुहुन्छ?

    $ qry = "SELECT *, (((acos (पाप ((।।। अक्षांश।" * pi () / १ 180०))) * पाप ((`अक्षांश * pi () / १ )०)) + कोस ((" "। $ अक्षांश। "* pi () / १ )०)) * कोस ((` अक्षांश * pi () / १ )०)) * कोस (((“। $ देशान्तर।” - `देशान्तर)) * pi () / १ 180०) )) * १ 180० / pi ()) * *० * १.१180१ * * १.180० 180 60।।) दूरी FROM `MyTable` जहाँ दूरी> ="। $ दूरी। " >>>> के म यहाँबाट "बाहिर" लिन सक्छु?
    फेरि पनि धन्यबाद,
    टिम्मी एस

  41. 60

    ठीक छ, मैले कोशिश गरेका सबै कार्य गर्दै छैनन्। मेरो मतलब, मसँग के काम छ, तर दूरीहरू भने टाढा छन्।

    के कसैले सम्भवतः यो कोडमा के गलत रहेको देख्न सक्छ?

    यदि (isset ($ _ POST ['पेश']])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['त्रिज्या']; इको "परिणामहरू।" $ sql = mysql_query ("SEST DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1। शहर, z1.state FROM mrk m, zip z1, zip z2 WHME कहाँ z.cipcode = z1.zipcode र z2.zipcode = AND z& (3963 * acos (काटछाड (पाप (z2.lat / 57.2958) * पाप (मि। y1 / 57.2958) + कोस (z2.lat / 57.2958) * कोस (m.y1 / 57.2958) * कोस (m.x1 / 57.2958 - z2.lon / 57.2958),))) <= $ r ") वा मर्न (mysql_error ()); जबकि ($ पंक्ति = mysql_fetch_array ($ sQL)) {$ store8 = $ प [्क्ति ['MktName']। ""; $ store = $ प [्क्ति ['LocAddSt']। ""; । store। = $ पंक्ति ['LocAddCity']। ","।। पंक्ति ['LocAddState']। " "। $ प [्क्ति ['zipcode']; $ अक्षांश १ = $ प [्क्ति ['अक्षांश']; $ देशान्तर १ = $ प [्क्ति ['लोन']; itude अक्षांश २ = $ प [्क्ति ['y1']; $ देशान्तर २ = $ प [्क्ति ['x1']; $ शहर = $ प [्क्ति ['शहर']; $ state = $ पंक्ति ['राज्य']; $ dis = getnew ($ अक्षांश १, $ देशांतर १, $ अक्षांश २, $ देशांतर २, $ एकाइ = 'एमआई'); // $ dis = दूरी ($ lat1, $ lon2, $ lat1, $ lon2); $ प्रमाणित = $ प [्क्ति ['प्रमाणित']; यदि ($ प्रमाणित == '१') {इको ""; इको ""। $ store। ""; प्रतिध्वनि "माईल (हरू) टाढा"; इको ""; } अन्य {इको ""। $ स्टोर। ""; प्रतिध्वनि "माईल (हरू) टाढा"; इको ""; }}}

    मेरो फंक्शन.पीपीपी कोड
    प्रकार्य getnew ($ अक्षांश १, $ देशांतर १, $ अक्षांश २, $ देशांतर २, $ एकाइ = 'एमआई') {ta theta = $ देशांतर १ - $ देशांतर २; $ दूरी = (पाप (डिग्री २ डिग्री ($ अक्षांश १)) * पाप (डिग्री २ रेड ($ अक्षांश १)) + + कोस (डिग्री २ रेड ($ अक्षांश १)) * कोस (डिग्री २ रेड ($ अक्षांश २)) * कोस (डिग्री २ रेड ($ थेटा)) ); $ दूरी = एकोस ($ दूरी); $ दूरी = rad1deg ($ दूरी); $ दूरी = $ दूरी * *० * १.१1१2; स्विच ($ एकाइ) {केस 'एमआई': ब्रेक; केस 'Km': $ दूरी = $ दूरी * 2; } फिर्ती (राउन्ड ($ दूरी, २)); }

    अग्रिम धन्यवाद

  42. 61
  43. 62

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

  44. 64
  45. 65

    यहाँ प्रकार्यको साथ प्रयोग गर्दा हामी एक प्रकारको दूरी पाउँदैछौं।तै बेला क्वेरी प्रयोग गरेर आउँदैछ भने अन्य प्रकारको दूरी

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

    यो छिटो देखिन्छ (mysql 5.9) चयनमा दुई पटक सूत्र प्रयोग गर्न र कहाँ:
    $ सूत्र = "(((एकोस (पाप। ("। $ अक्षांश। "* पीआई () / १ )०)) * पाप ((` अक्षांश * पीआई () / १ )०)) + कोस (("। $ अक्षांश। "* Pi () / १ )०)) * कोस ((` अक्षांश` * pi () / १ )०)) * कोस ((("। $ देशान्तर।" - `देशान्तर) * pi () / १ 180०))) * १ 180० / pi ()) * *० * १.१180१ * * १.180० 180) ";
    $ sql = 'SELECT *,'। $ सूत्र। ' दूरी FROM तालिका को रूपमा WHERE '.. $ सूत्र।' <= '। $ दूरी;

  51. 71
  52. 72

    यस लेखलाई शियर गर्नका लागि धेरै धेरै धन्यवाद। यो धेरै उपयोगी छ।
    PHP सर्वप्रथम एउटा सरल स्क्रिप्टि platform प्लेटफर्मको रूपमा सिर्जना गरिएको थियो जुन "पर्सनल होम पेज" भनिन्छ। आजकल पीएचपी (हाइपरटेक्स्ट प्रिप्रोसेसरको लागि छोटो) माइक्रोसफ्टको सक्रिय सर्भर पृष्ठ (एएसपी) टेक्नोलोजीको विकल्प हो।

    PHP एक खुला स्रोत सर्भर-साइड भाषा हो जुन गतिशील वेब पृष्ठहरू सिर्जना गर्न प्रयोग गरिन्छ। यो HTML मा इम्बेड गर्न सकिन्छ। PHP प्राय: लिनक्स / UNIX वेब सर्भरहरूमा एक MySQL डाटाबेसको साथ संयोजनको रूपमा प्रयोग गरिन्छ। यो सायद सबैभन्दा लोकप्रिय स्क्रिप्टिting भाषा हो।

  53. 73

    मैले माथि समाधान राम्ररी काम नगरेको पाए।
    मैले परिवर्तन गर्नु पर्छ:

    $ qqq = "SELECT *, (((acos (पाप ((।।। अक्षांश।" * pi () / १ 180०))) * पाप ((`latt` * pi () / १ )०)) + कोस ((" "। itude अक्षांश। "* pi () / १ )०)) * कोस ((` latt` * pi () / १ )०)) * कोस ((("। $ देशान्तर।" - `longt`) * pi () / १ 180०) )) * * १ /० / pi ()) * *० * १.१180१180) दूरी FROM `पंजीकरण;" को रूपमा;

  54. 75
  55. 76

    नमस्कार, कृपया मलाई यसमा तपाईंको सहयोगको आवश्यक छ।

    मैले मेरो वेब सर्वरमा अनुरोध प्राप्त गरें http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    .53.47792 XNUMX..XNUMX२ = itude अक्षांश
    -2.23389 = = देशांतर
    र २० = मैले पुनः प्राप्त गर्न चाहेको दूरी

    जहाँसम्म तपाईं सूत्र प्रयोग गर्दै, यसले मेरो db मा सबै पows्क्तिहरू पुनःप्राप्त गर्दछ

    $ परिणामहरू = DB :: चयन (DB :: कच्चा ("चयन *, (((acos (पाप। ("। $ अक्षांश। "* pi () / १ )०))) * पाप ((lat * pi () / १ 180०) )) + कोस (("। $ अक्षांश।" * pi () / १ )०)) * कोस ((lat * pi () / १ )०)) * कोस (((“। $ देशान्तर।” - lng) * pi ( ) / १ )०)))) * १ /० / pi ()) * *० * १.१180१ * * १.180० 180) FROM मार्करहरू बाट दूरी> = "।“ दूरी));

    [{"आईडी": १, "नाम": "फ्रान्की जोनी र लुइगो तो", "ठेगाना": "1 939 W डब्लु एल क्यामिनो रियल, माउन्टेन भ्यू, सीए", "ल्याट": .37.386337280273 122.08582305908०२16079.294719663,, "एलएनजी": - १२२.०2०790 37.387138366699 ०122.08323669434, "दूरी": १16079.175940152० .3.२ 191 37.393886566162 122.07891845703 16078.381373826 4 570}, {"आईडी": २, "नाम": "अमीसीको पूर्वी तट पिज्जरिया", "ठेगाना": "37.402652740479 Cast ० क्यास्ट्रो सेन्ट, माउन्टेन भ्यू, सीए", "ल्याट": .122.07935333252 16077.420540582..5 619,, "एलएनजी": -37.394012451172, "दूरी": 122.09552764893}, {"आईडी":,, "नाम": "कप्प्सको पिज्जा बार र ग्रिल", "ठेगाना": "१ 16078.563225154 १ क्यास्ट्रो सेन्ट, माउन्टेन भ्यू, सीए", "ल्याट": .6 4546 37.401725769043, "Lng": - १२२.०122.11464691162 16077.937560795 १7०24, "दूरी": १53.485118865967०2.1828699111938..8038.7620112314१XNUMX}}, {"आईडी":,, "नाम": "राउन्ड टेबल पिज्जा: माउन्टेन भ्यू", "ठेगाना": "XNUMX० एन शोरलाइन ब्लाभडी, माउन्टेन भिउ, सीए", "Lat":। XNUMX०२XNUMX२XNUMX,, "lng": - १२२.०XNUMX२XNUMX, "दूरी": १XNUMX०XNUMX२०XNUMX०XNUMX२}, {"आईडी":,, "नाम": "टोनी र अल्बाको पिज्जा र पास्ता", "ठेगाना": "XNUMX१ sc एस्कुएला अवे, माउन्टेन दृश्य, सीए "," ल्याट ": .XNUMX XNUMX XNUMX XNUMX२१XNUMX१XNUMX," एलएनजी ": - १२२.० XNUMX XNUMX XNUMX XNUMX," दूरी ": १XNUMX०XNUMX..XNUMX२२XNUMX१XNUMX}, {" आईडी ":,," नाम ":" ओरेगानोको वुड-फायर पिज्जा "," ठेगाना ":" XNUMX XNUMX एल क्यामिनो रियल, लस अल्टोस, सीए "," ल्याट ":। XNUMX१XNUMX XNUMX XNUMX," एलएनजी ": - १२२.११XNUMX११XNUMX," दूरी ": १XNUMX०XNUMX०XNUMX}, {" आईडी ":,," नाम ":" बार र ग्रिल "," ठेगाना ":" २ White व्हाइटली स्ट्रीट, म्यानचेस्टर "," ल्याट ": .XNUMX XNUMX१XNUMX XNUMX,,," एलएनजी ": - २.१XNUMX२XNUMX XNUMX XNUMX१XNUMX," दूरी ": XNUMX०XNUMX..XNUMX२XNUMX१२XNUMX१}}]

    म २० माईलको मात्र पows्क्तिहरू प्राप्त गर्न चाहन्छु तर यसले सबै पows्क्तिहरू ल्याउँदछ। कृपया म के गल्ति गर्दैछु

तिम्रो के बिचार छ?

यो साइट स्प्याम कम गर्न Akismet को उपयोग गर्दछ। जान्नुहोस् कि तपाईंको डेटा कसरी संसाधित छ.