हॅव्हरसाइन फॉर्म्युला (PHP, Python, MySQL, MSSQL उदाहरणे) वापरून अक्षांश आणि रेखांशाच्या बिंदूंमधील महान वर्तुळ अंतराची गणना करा किंवा क्वेरी करा

हॅवरसाइन फॉर्म्युला - ग्रेट सर्कल डिस्टन्स - PHP, पायथन, MySQL

या महिन्यात मी जीआयएसच्या संदर्भात पीएचपी आणि मायएसक्यूएलमध्ये थोडा प्रोग्रामिंग करीत आहे. निव्वळ सुमारे स्नूपिंग, मला त्यापैकी काही शोधण्यात फारच कठीण गेले भौगोलिक गणना दोन स्थानांमधील अंतर शोधण्यासाठी मी त्यांना येथे सामायिक करू इच्छित आहे.

फ्लाइट नकाशा युरोप ग्रेट सर्कल डिस्टेंससह

दोन बिंदूंमधील अंतर मोजण्याचा सोपा मार्ग म्हणजे पायथागोरियन सूत्राचा वापर करून त्रिकोणाच्या (A² + B² = C²) गणना केली जाते. हे म्हणून ओळखले जाते युक्लिडियन अंतर.

ती एक रंजक सुरुवात आहे परंतु अक्षांश आणि रेखांश रेषांमधील अंतर असल्यामुळे ते भूगोलशी लागू होत नाही समान अंतर नाही वेगळे विषुववृत्तीय जवळ जाताना अक्षांशांच्या रेषा आणखी वेगळ्या होतात. आपण काही प्रकारचे साधे त्रिकोणीय समीकरण वापरल्यास ते पृथ्वीच्या वक्रतेमुळे एका स्थानावरील अंतर अचूकपणे मोजू शकते आणि दुसर्‍या ठिकाणी अत्यंत चुकीचे आहे.

ग्रेट सर्कल अंतर

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

येथे उत्तम मंडळे कशी कार्य करतात याचे एक विलक्षण व्हिडिओ स्पष्टीकरण आहे.

हेवर्सिन फॉर्म्युला

पृथ्वीची वक्रता वापरुन अंतर मध्ये समाविष्ट केले आहे हेवर्सिन फॉर्म्युला, जो पृथ्वीच्या वक्रतेस अनुमती देण्यासाठी त्रिकोणमिती वापरतो. जेव्हा आपण पृथ्वीवरील 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: अक्षांश आणि रेखांश वापरून मैलांमध्ये अंतर मोजून एका श्रेणीतील सर्व रेकॉर्ड पुनर्प्राप्त करणे

विशिष्ट अंतरात सर्व रेकॉर्ड शोधण्यासाठी गणना करण्यासाठी एसक्यूएल वापरणे देखील शक्य आहे. या उदाहरणात मी location अक्षांश आणि $ रेखांशवर माझ्या स्थानावरील चल-अंतर (माईलमध्ये) पेक्षा कमी किंवा समान असलेल्या सर्व रेकॉर्ड शोधण्यासाठी मी 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 व्हेरिएबल आहे जेथे मी बिंदूचा रेखांश पुढे जात आहे.
  • itude अक्षांश हे एक PHP व्हेरिएबल आहे जेथे मी बिंदूचा रेखांश पुढे जात आहे.
  • . अंतर - हेच अंतर आहे जे आपणास सर्व रेकॉर्ड कमी किंवा समान शोधायला आवडेल.
  • टेबल - ही सारणी आहे… आपण आपल्या टेबल नावाने ती पुनर्स्थित करू इच्छिता.
  • अक्षांश - हे आपल्या अक्षांश चे फील्ड आहे.
  • रेखांश - हे आपल्या रेखांशचे क्षेत्र आहे.

MySQL: अक्षांश आणि रेखांश वापरून किलोमीटरमध्ये अंतर मोजून एका श्रेणीतील सर्व रेकॉर्ड पुनर्प्राप्त करणे

आणि 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 व्हेरिएबल आहे जेथे मी बिंदूचा रेखांश पुढे जात आहे.
  • itude अक्षांश हे एक PHP व्हेरिएबल आहे जेथे मी बिंदूचा रेखांश पुढे जात आहे.
  • . अंतर - हेच अंतर आहे जे आपणास सर्व रेकॉर्ड कमी किंवा समान शोधायला आवडेल.
  • टेबल - ही सारणी आहे… आपण आपल्या टेबल नावाने ती पुनर्स्थित करू इच्छिता.
  • अक्षांश - हे आपल्या अक्षांश चे फील्ड आहे.
  • रेखांश - हे आपल्या रेखांशचे क्षेत्र आहे.

मी हा कोड एंटरप्राइझ मॅपिंग प्लॅटफॉर्ममध्ये वापरला आहे जो आम्ही उत्तर अमेरिकेत 1,000 पेक्षा जास्त ठिकाणी रिटेल स्टोअरसाठी वापरला आहे आणि तो सुंदर कार्य करीत आहे.

मायक्रोसॉफ्ट एसक्यूएल सर्व्हर भौगोलिक अंतर: एसटीडीस्टन्स

तुम्ही Microsoft SQL सर्व्हर वापरत असल्यास, ते त्यांचे स्वतःचे कार्य देतात, STD अंतर भूगोल डेटा प्रकार वापरून दोन बिंदूंमधील अंतर मोजण्यासाठी.

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

मनश साहू, व्हीपी आणि आर्किटेक्ट यांना हॅट टीप Highbridge.

77 टिप्पणी

  1. 1

    सामायिक केल्याबद्दल मनापासून धन्यवाद ही एक सोपी कॉपी आणि पेस्ट कार्य होते आणि उत्कृष्ट कार्य करते. तू मला बर्‍याच वेळेची बचत केली.
    सी ला पोर्टिंग केलेल्या कोणालाही एफवायआयआय:
    दुहेरी डीग 2rad (डबल डीएजी) {रिटर्न डीग * (3.14159265358979323846 / 180.0); }

  2. 2

    पोस्टिंगचा खूप चांगला तुकडा - खूप छान काम केले - मला फक्त उत्तरार्धात असलेल्या टेबलचे नाव बदलावे लागले. हे बर्‍याच वेगाने कार्य करते .. माझ्याकडे लॅट-लाँग्स (<400) माफक प्रमाणात आहेत परंतु मला असे वाटते की हे छान प्रमाणात होईल. छान साइट देखील - मी ते नुकतेच माझ्या del.icio.us खात्यात जोडले आहे आणि नियमितपणे परत तपासणी करेन.

  3. 4
  4. 5

    मी दूरदराच्या मोजणीसाठी संपूर्ण दिवस शोधला आणि हॅवर्सिन अल्गोरिदम सापडला, स्क्वॉयल स्टेटमेंटमध्ये ते कसे ठेवले पाहिजे याचे उदाहरण दिल्याबद्दल धन्यवाद. धन्यवाद आणि शुभेच्छा, डॅनियल

  5. 8

    मला वाटते की आपल्या एसक्यूएलला स्टेटिंग स्टेटमेंट आवश्यक आहे.
    त्याऐवजी WHERE अंतर <= $ अंतर आपल्याला आवश्यक असू शकते
    HAVING अंतर <= $ अंतर वापरा

    अन्यथा मला वेळ आणि उर्जा बचत करुन दिल्याबद्दल धन्यवाद.

    • 9

      हाय डेव्हिड,

      आपण स्टेटमेंटद्वारे कोणत्याही प्रकारचे ग्रुप करत असल्यास आपल्यास आवश्यक असेल. मी वरील उदाहरणात असे करत नाही.

      डग

  6. 10
  7. 11
  8. 12

    हा कोड सामायिक केल्याबद्दल धन्यवाद. यामुळे मला विकासाचा बराच वेळ वाचला. तसेच, MySQL 5.x साठी एक HAVING विधान आवश्यक आहे असे दर्शविल्याबद्दल आपल्या वाचकांचे आभार. अतिशय उपयुक्त.

  9. 14

    वरील सूत्र मला बर्‍याच वेळेची बचत करीत आहे. खूप खूप धन्यवाद
    मला एनएमईए स्वरूप आणि डिग्री दरम्यान स्विच देखील करावे लागेल. मला पृष्ठाच्या तळाशी या URL वर एक सूत्र सापडले. http://www.errorforum.com/knowledge-base/16273-converting-nmea-sentence-latitude-longitude-decimal-degrees.html

    हे सत्यापित कसे करावे हे कोणाला माहित आहे काय?

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

  10. 15
  11. 16

    मला हे देखील आढळले की WHERE माझ्यासाठी कार्य करत नाही. हे बदलत आहे आणि सर्वकाही परिपूर्ण कार्य करते. सुरुवातीला मी टिप्पण्या वाचल्या नाहीत आणि नेस्टेड सिलेक्टचा वापर करून ती पुन्हा लिहिल्या. दोघेही ठीक काम करतील.

  12. 17

    MySQL मध्ये लिहिलेल्या स्क्रिप्टबद्दल खूप आभारी आहोत, नुकतीच काही किरकोळ mentsडजस्ट (हॅव्हिंग) करावी लागली 🙂
    ग्रेट जॉब

  13. 18

    आश्चर्यकारकपणे उपयुक्त, खूप आभारी आहे! मला “कुठे आहे” याऐवजी नवीन “हॅव्हिंग” बद्दल काही अडचण येत होती, परंतु एकदा मी येथे टिप्पण्या वाचल्या (निराशा = पी मध्ये दात पीसण्याच्या सुमारे अर्ध्या तासानंतर) मला ती छान काम करायला मिळाली. धन्यवाद ^ _ ^

  14. 19
  15. 20

    लक्षात ठेवा की असे निवडलेले विधान खूप संगणकीयदृष्ट्या तीव्र आणि म्हणून धीमे असेल. आपल्याकडे बर्‍याच क्वेरी असल्यास, त्या गोष्टी बर्‍याचदा खाली खेचू शकतात.

    अगदी कमी प्रखर दृष्टिकोन म्हणजे मोजणी अंतरानुसार परिभाषित स्क्वेअर क्षेत्राचा वापर करून प्रथम (क्रूड) निवडणे चालवणे म्हणजे “टेबलनेममधून निवडा जेथे अक्षांश अक्षांश अक्षांश आणि लॅट 1 आणि रेखांश लांबी 2 आणि एकाल 1 दरम्यान”. लॅट 2 = टार्गेटलायट्यूड - लॅटिफ, लॅट 1 = टारगेटलिट्यूड + लॅटिफ, लॉन प्रमाणेच. अक्षांश degree = अंतर / १११ (किमी साठी), किंवा अंतर / miles miles मैलांसाठी १ अंश अक्षांश पासून १११ कि.मी. आहे (पृथ्वी पासून किंचित बदल अंडाकार आहे, परंतु या उद्देशाने पुरेसे आहे). लॉन्डिफ = अंतर / (एबीएस (कॉस (डीग २ रेड (अक्षांश)) * १११)) किंवा miles miles मैल (आपण वास्तविकतेत किंचित मोठा वर्ग घेऊ शकता). मग त्याचा निकाल घ्या आणि ते रेडियल सेलेक्टमध्ये फीड करा. केवळ सीमा-बाहेरील समन्वय ठेवणे विसरू नका - म्हणजे स्वीकार्य रेखांशची श्रेणी -2 ते +111 आहे आणि स्वीकार्य अक्षांशांची श्रेणी -69 ते +1 आहे - जर या प्रकरणात आपले लेटडीफ किंवा लॉन्डिफ चालते तर. . लक्षात घ्या की बहुतेक प्रकरणांमध्ये हे लागू होणार नाही कारण ते केवळ प्रशांत महासागराच्या ध्रुव पासून खांबापर्यंतच्या ओळीच्या गणनेवर परिणाम करते, जरी ते चकोत्काचा भाग आणि अलास्काचा भाग प्रतिच्छेदन करते.

    याद्वारे आपण जे साध्य करता ते म्हणजे आपण ज्या गणिताच्या विरूद्ध गणना केली त्या गुणांच्या संख्येमध्ये लक्षणीय घट. जर आपल्याकडे डेटाबेसमध्ये दशलक्ष ग्लोबल पॉईंट्स साधारणपणे वितरित झाले आहेत आणि आपण 100 कि.मी. मध्ये शोधू इच्छित असाल तर आपला प्रथम (वेगवान) शोध 10000 चौरस किमी क्षेत्राचा असेल आणि जवळजवळ 20 निकाल मिळतील (अगदी वितरणावर आधारित देखील) सुमारे 500 मी चौरस किमी चे क्षेत्रफळ) म्हणजेच आपण या क्वेरीसाठी दहा लाख वेळाऐवजी 20 वेळा जटिल अंतर गणना चालवाल.

    • 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

    हे महान आहे, तथापि ते पक्षी उडतात तसे आहे. या मार्गात (कदाचित रस्ते इत्यादींचा वापर करून) गूगल मॅप्स एपीआयचा प्रयत्न करून त्यांचा समावेश करणे चांगले आहे. फक्त वाहतुकीचा वेगळा प्रकार वापरुन कल्पना देण्यासाठी. मी अद्याप पीएचपीमध्ये सिम्युलेटेड anनीलिंग कार्य करणे बाकी आहे जे ट्रॅव्हल सेल्समन समस्येचे कार्यक्षम निराकरण करू शकतील. परंतु मला असे वाटते की असे करण्यासाठी आपल्या काही कोडचा मी पुन्हा वापर करण्यास सक्षम होऊ.

  18. 27

    हाय डग्लस,
    या लेखाबद्दल तुमचे आभारी आहे - तुम्ही मला बराच वेळ वाचवला.
    काळजी घ्या,
    निमरोड - इस्रायल

  19. 28

    चांगला लेख! मला दोन बिंदूंमधील अंतर कसे मोजता येईल याचे वर्णन करणारे बरेच लेख सापडले परंतु मी खरोखर एस क्यू एल स्निपेट शोधत होतो.

  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

    धन्यवाद डग्लस, एसक्यूएल क्वेरी ही मला आवश्यक तेच आहे आणि मला वाटले की ते मला स्वतःच लिहावे लागेल. आपण शक्यतो तासांश अक्षांश रेखांश शिकण्याच्या वक्रपासून मला वाचवले!

  37. 53
  38. 55
  39. 56

    डग्लस, या आश्चर्यकारक कोडबद्दल धन्यवाद. माझ्या जीपीएस कम्युनिटी पोर्टलवर हे कसे करावे याविषयी माझे डोके वेड लावत आहे. आपण माझे तास वाचवले.

  40. 58

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

    किंवा फक्त खालील कोडपासून अंतर मिळवू शकता?

    $ क्यूरी = “निवडा *, ((एकॉस (पाप ((... अक्षांश.” * पीआय () / 180)) * पाप ((`अक्षांश * पीआय () / 180)) + कोस ((“. $ अक्षांश. ”* पी ((/ १ 180०)) * कॉस ((` अक्षांश * पीआय () / १ )०)) * कोस (((“. $ रेखांश.” - `रेखांश)) * पीआय () / १ )०) )) * 180 / pi ()) * 180 * 180 * 60) अंतर पासून `मायटेबल- कुठे अंतर> =". $ अंतर. " >>>> मी येथून अंतर काढू शकतो?
    पुन्हा धन्यवाद,
    टिम्मी एस

    • 59

      हरकत नाही, मी php मध्ये "फंक्शन" कसे कार्य करते हे शोधून काढले आहे
      $ डिस्क = getDistanceBetweenPPointNww ($ userLati, $ userLongi, $ lati, $ Longi, $ यूनिट = 'किमी')
      खूप खूप धन्यवाद !! 

  41. 60

    ठीक आहे, मी प्रयत्न केलेले सर्व कार्य करीत नाही. म्हणजे, माझ्याकडे काय आहे, परंतु अंतरावर काही नाही.

    या कोडमध्ये काय चूक आहे हे कुणालाही शक्यतो शक्य आहे का?

    if (isset ($ _ POST ['सादर'])) {$ z = $ _POST ['पिनकोड']; $ r = $ _POST ['त्रिज्या']; एको “साठी परिणाम“. $ z; $ sql = mysql_query ("निवडा DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. शहर, झेड.स्टेट फ्रॉम एमआरके मीटर, झिप झेड 1, झिप झेड WHERE m.zipcode = z1.zipcode आणि z2.zipcode = $ z आणि (1 * acos (काटछाट (पाप (z2.lat / 3963) * पाप (मी. y2 / 57.2958) + कोस (z1.lat / 57.2958) * कोस (m.y2 / 57.2958) * कोस (एम. एक्स 1 / 57.2958 - z1.lon / 57.2958), 2)) <= $ आर ") किंवा मर (mysql_error ()); जबकि ($ पंक्ती = mysql_fetch_array ($ sql)) {$ store57.2958 = $ पंक्ती ['MktName']. ""; $ store = $ पंक्ती ['LocAddSt']. "”; $ store. = $ पंक्ति ['LocAddCity']. ",". $ पंक्ती ['लोकॅडॅडस्टेट']. " “. $ पंक्ती ['पिनकोड']; $ अक्षांश 8 = $ पंक्ती ['अक्षांश]]; $ रेखांश 1 = $ पंक्ती ['लांब']; $ अक्षांश 1 = $ पंक्ती ['y1']; $ रेखांश 2 = $ पंक्ती ['x1']; $ शहर = $ पंक्ती ['शहर']; $ राज्य = $ पंक्ती ['राज्य']; $ डिस्क = गेटन्यू ($ अक्षांश 2, $ रेखांश 1, $ अक्षांश 1, $ रेखांश 1, $ युनिट = 'एमआय'); // $ डिस = अंतर ($ लॅट 2, $ लोन 2, $ लॅट २, $ लोन २); $ सत्यापित = $ पंक्ती ['सत्यापित']; जर ($ सत्यापित == '1') {प्रतिध्वनी “”; एको “”. $ स्टोअर. ””; प्रतिध्वनी. " मैल दूर"; प्रतिध्वनी “”; } अन्यथा “प्रतिध्वनी” “. $ स्टोअर.” ”; प्रतिध्वनी. " मैल दूर"; प्रतिध्वनी “”; }}}

    माझा फंक्शन.पीपीपी कोड
    फंक्शन getnew ($ अक्षांश 1, $ रेखांश 1, $ अक्षांश 2, $ रेखांश 2, $ युनिट = 'मी') {ta थेटा = $ रेखांश 1 - $ रेखांश 2; $ अंतर = (पाप (डिग्री 2 रेड ($ अक्षांश 1)) * पाप (डिग्री 2 रेड ($ अक्षांश 2)) + (कॉस (डीग 2 रेड ($ अक्षांश १)) * कॉस (डीग 1 रेड ($ अक्षांश 2)) कॉस (डीग 2 रेड ($ थेटा)) ); $ अंतर = अकोस ($ अंतर); $ अंतर = रेड 2 डिग ($ अंतर); $ अंतर = $ अंतर * 2 * 60; स्विच ($ युनिट) {केस 'एमआय': ब्रेक; केस 'किमी': $ अंतर = $ अंतर * 1.1515; } परतावा (गोल ($ अंतर, २)); }

    आगाऊ धन्यवाद

  42. 61
  43. 62

    हे डग्लस, उत्तम लेख. मला आपले भौगोलिक संकल्पनांचे स्पष्टीकरण आणि कोड खरोखरच मनोरंजक वाटले. माझी फक्त सूचना स्पेस आणि प्रदर्शनासाठी कोड इंडेंट करणे (उदाहरणार्थ स्टॅकओव्हरफ्लोसारखी) असेल. मला समजले की आपणास जागेचे संरक्षण करावयाचे आहे, परंतु पारंपारिक कोड स्पेसिंग / इंडेंटेशन माझ्यासाठी प्रोग्रामर म्हणून वाचणे आणि विच्छेदन करणे खूप सोपे करेल. असो, ती एक छोटी गोष्ट आहे. महान कार्य सुरू ठेवा.

  44. 64
  45. 65
  46. 66
  47. 67
  48. 68
  49. 69
  50. 70

    सिलेक्टमध्ये आणि कोठे दोनदा फॉर्म्युला वापरणे वेगवान (mysql 5.9) दिसते.
    $ सूत्र = "(((एकॉस (पाप. (". $ अक्षांश. "* पीआय () / 180)) * पाप ((` अक्षांश * पीआय () / 180)) + कोस ((“. $ अक्षांश. "* पी ((/ / 180)) * कॉस ((` अक्षांश` पीआय () / 180)) कॉस (((“. (रेखांश.” - `रेखांश)) * पीआय () / १ )०)))) * 180 / पीआय ()) * 180 * 60 * 1.1515) ”;
    $ sql = 'निवडा *,'. $ सूत्र. ' जेथे टेबल पासून अंतर म्हणून .. '$ सूत्र.' <= '. $ अंतर;

  51. 71

    धन्यवाद…

    काम करत नाही तर
    “कुठे अंतर”

    काम करत असल्यास
    "अंतर आहे"

  52. 72

    हा लेख कातरण्यासाठी खूप धन्यवाद.हे अत्यंत उपयुक्त आहे.
    पीएचपी प्रथम सुरुवातीला "वैयक्तिक मुख्यपृष्ठ" नावाचे एक सोपा स्क्रिप्टिंग प्लॅटफॉर्म म्हणून तयार केले होते. आजकाल पीएचपी (हायपरटेक्स्ट प्रीप्रोसेसरसाठी लहान) मायक्रोसॉफ्टच्या अ‍ॅक्टिव्ह सर्व्हर पेजेस (एएसपी) तंत्रज्ञानाचा एक पर्याय आहे.

    पीएचपी ही मुक्त स्रोत सर्व्हर-साइड भाषा आहे जी डायनॅमिक वेब पृष्ठे तयार करण्यासाठी वापरली जाते. ते HTML मध्ये एम्बेड केले जाऊ शकते. पीएचपीचा वापर सहसा लिनक्स / युनिक्स वेब सर्व्हरवरील मायएसक्यूएल डेटाबेससह एकत्रितपणे केला जातो. ही कदाचित सर्वात लोकप्रिय स्क्रिप्टिंग भाषा आहे.

  53. 73

    मला वरील उपाय योग्य प्रकारे कार्य करीत नसल्याचे आढळले.
    मला यात बदलण्याची आवश्यकता आहे:

    $ क्यूक्यूक्यू = “निवडा *, ((एकोस (पाप ((... अक्षांश.” * पीआय () / 180)) * पाप ((`लाट्टे * पीआय () / 180)) + कॉस ((". $ अक्षांश. "* पाई () / १ )०)) कॉस ((` लाट्टे * पीआय () / १ )०)) * कोस (((". $ रेखांश." - `लांबी) * पीआय () / १ )०) ))) * 180 / पीआय ()) * 180 * 180) अंतर पासून "रजिस्टर`";

  54. 75

    धन्यवाद सर उत्तम प्रकारे व्रॉकिंग .. पण मला एक प्रश्न आहे जर जर मी दशांश न घेता आउटपुट करायचे असेल तर मी काय करावे ..?

    आगाऊ धन्यवाद.

  55. 76

    हॅलो, कृपया मला यास खरोखर मदत करणे आवश्यक आहे.

    मी माझ्या वेब सर्व्हरकडे जाण्यासाठी विनंती केली http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = itude अक्षांश
    -2.23389 = $ रेखांश
    आणि 20 = मी पुनर्प्राप्त करू इच्छित अंतर

    तथापि आपण फॉर्म्युला वापरुन, ते माझ्या डीबी मधील सर्व पंक्ती पुनर्प्राप्त करते

    $ परिणाम = डीबी :: निवडा (डीबी :: कच्चा (“निवडा *, ((एकॉस (पाप. ((... अक्षांश.” * पीआय () / 180))) * पाप ((लॅट * पीआय () / 180 )) + कोस ((“. $ अक्षांश.” * पीई () / १ )०)) * कोस ((लॅट * पीआय () / १ )०)) कॉस (((“. $ रेखांश.” - एलएनजी) * पीआय ( ) / 180)))) * 180 / पीआय ()) * 180 * 180 * 60) अंतर म्हणून मार्कर आहेत अंतर> = “. $ अंतर));

    [{"आयडी": १, "नाव": "फ्रॅन्की जॉनी आणि लुईगो तो", "पत्ता": "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 एन शोरलाइन ब्लाव्हडी, माउंटन व्ह्यू, सीए", "Lat": 37.402652740479, "एलएनजी": - 122.07935333252, "अंतर": 16077.420540582}, {"आयडी": 5, "नाव": "टोनी आणि अल्बाचा पिझ्झा आणि पास्ता", "पत्ता": "619 एस्कुएला एव्ह, माउंटन पहा, सीए "," लॅट ": 37.394012451172," एलएनजी ": - 122.09552764893," अंतर ": 16078.563225154}, {" आयडी ": 6," नाव ":" ओरेगॅनो वुड-फायर्ड पिझ्झा "," पत्ता ":" 4546 एल कॅमिनो रियल, लॉस ऑल्टोस, सीए "," लॅट ": 37.401725769043," एलएनजी ": - 122.11464691162," अंतर ": 16077.937560795}, {" आयडी ": 7," नाव ":" बार आणि ग्रिल "," पत्ता ":" 24 व्हाइटली स्ट्रीट, मँचेस्टर "," लॅट ": 53.485118865967," एलएनजी ": - 2.1828699111938," अंतर ": 8038.7620112314}]

    मला फक्त २० मैलांच्या ओळी परत मिळवायच्या आहेत पण त्या सर्व पंक्ती घेऊन येतात. कृपया मी काय चूक करीत आहे

  56. 77

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

तुला काय वाटत?

ही साइट स्पॅम कमी करण्यासाठी अकिस्मेट वापरते आपल्या टिप्पणी डेटावर प्रक्रिया कशी केली जाते ते जाणून घ्या.