Google का समाधान:
तालिका बनाना
जब आप MySQL टेबल बनाते हैं, तो आप lat और lng विशेषताओं पर विशेष ध्यान देना चाहते हैं। Google मानचित्र की वर्तमान ज़ूम क्षमताओं के साथ, आपको दशमलव के बाद केवल 6 अंकों की सटीकता चाहिए। अपनी मेज के लिए आवश्यक स्टोरेज स्पेस को कम से कम रखने के लिए, आप यह निर्दिष्ट कर सकते हैं कि लैट और लैंग की विशेषताएँ फ्लोट आकार (10,6) की हैं। यह फ़ील्ड को दशमलव के बाद 6 अंकों को संग्रहीत करने देगा, साथ ही दशमलव से पहले 4 अंकों तक, जैसे -123.456789 डिग्री। आपकी तालिका में प्राथमिक कुंजी के रूप में सेवा करने के लिए एक आईडी विशेषता भी होनी चाहिए।
CREATE TABLE `markers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 60 ) NOT NULL ,
`address` VARCHAR( 80 ) NOT NULL ,
`lat` FLOAT( 10, 6 ) NOT NULL ,
`lng` FLOAT( 10, 6 ) NOT NULL
) ENGINE = MYISAM ;
टेबल को आबाद करना
तालिका बनाने के बाद, यह डेटा के साथ इसे आबाद करने का समय है। नीचे दिया गया नमूना डेटा संयुक्त राज्य भर में बिखरे हुए लगभग 180 पिज्जा के लिए है। PhpMyAdmin में, आप CSV (अल्पविराम से अलग किए गए मान) सहित विभिन्न फ़ाइल स्वरूपों को आयात करने के लिए आयात टैब का उपयोग कर सकते हैं। Microsoft Excel और Google स्प्रेडशीट दोनों CSV प्रारूप में निर्यात करते हैं, ताकि आप CSV फ़ाइलों को निर्यात / आयात करके आसानी से स्प्रेडशीट से MySQL तालिकाओं में डेटा स्थानांतरित कर सकें।
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Frankie Johnnie & Luigo Too','939 W El Camino Real, Mountain View, CA','37.386339','-122.085823');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Amici\'s East Coast Pizzeria','790 Castro St, Mountain View, CA','37.38714','-122.083235');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Kapp\'s Pizza Bar & Grill','191 Castro St, Mountain View, CA','37.393885','-122.078916');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Round Table Pizza: Mountain View','570 N Shoreline Blvd, Mountain View, CA','37.402653','-122.079354');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Tony & Alba\'s Pizza & Pasta','619 Escuela Ave, Mountain View, CA','37.394011','-122.095528');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Oregano\'s Wood-Fired Pizza','4546 El Camino Real, Los Altos, CA','37.401724','-122.114646');
MySQL के साथ स्थान खोजना
अपने मार्कर तालिका के स्थानों को खोजने के लिए जो किसी दिए गए अक्षांश / देशांतर की एक निश्चित त्रिज्या दूरी के भीतर हैं, आप हावरसाइन सूत्र के आधार पर एक चयन कथन का उपयोग कर सकते हैं। एक क्षेत्र पर निर्देशांक के दो जोड़े के बीच महान-सर्कल की दूरी की गणना के लिए हैवरसाइन सूत्र का आमतौर पर उपयोग किया जाता है। विकिपीडिया द्वारा एक गहराई से गणितीय व्याख्या दी गई है और सूत्र की अच्छी चर्चा है क्योंकि यह प्रोग्रामिंग से संबंधित है जो चल प्रकार की साइट पर है।
यहां SQL स्टेटमेंट है जो निकटतम 20 स्थानों को ढूंढेगा जो कि 25 मील के दायरे में 37, -122 में समन्वय करते हैं। यह उस पंक्ति के अक्षांश / देशांतर और लक्ष्य अक्षांश / देशांतर के आधार पर दूरी की गणना करता है, और फिर केवल उन पंक्तियों के लिए पूछता है जहाँ दूरी का मान 25 से कम है, पूरी क्वेरी को दूरी से आदेश देता है, और इसे 20 परिणामों तक सीमित करता है। मील के बजाय किलोमीटर से खोजने के लिए 3959 को 6371 से बदलें।
SELECT
id,
(
3959 *
acos(cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-122)) +
sin(radians(37)) *
sin(radians(lat )))
) AS distance
FROM markers
HAVING distance < 28
ORDER BY distance LIMIT 0, 20;
यह एक 28 मील से कम दूरी में अक्षांश और देशांतर का पता लगाना है।
एक और 28 और 29 मील की दूरी के बीच उन्हें खोजने के लिए है:
SELECT
id,
(
3959 *
acos(cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-122)) +
sin(radians(37)) *
sin(radians(lat )))
) AS distance
FROM markers
HAVING distance < 29 and distance > 28
ORDER BY distance LIMIT 0, 20;
https://developers.google.com/maps/articles/phpsqlsearch_v3#creating-the-map