अपडेट 16 वीं नवंबर 2012
मैं इस सवाल फिर से बढ़ाने के लिए, एक ठोस, अच्छा समाधान के लिए एक नया इनाम के साथ की पेशकश करना चाहते हैं। ऐसा लगता है कि केवल समाधान (shubhansh
's answer) प्रभावी ढंग से काम नहीं करता है। मैं समझाऊंगा क्यों।परिणाम है कि डेटाबेस से मार्कर दायरों के भीतर गिर जाओ
सबसे पहले, इस लाइव नक्शा मैं दायरों और लोगों के साथ है, दायरों के red
में हैं और लोगों blue
में हैं।
जैसा कि आप देख सकते हैं, वहाँ eight
दायरों के साथ इस नक्शे में two
लोग, मूल रूप से मैं केवल एक ही व्यक्ति है जो Person A
है हो रही है कर रहे हैं, लेकिन मैं नहीं मिल रहा है Person B
, मुझे लगता है कि एसक्यूएल सही ढंग से इसे उठा नहीं रहा है जिसे मुझे व्यक्ति के त्रिज्या और मार्कर त्रिज्या से सटीक और सटीक होने की आवश्यकता है।
ऐसा लगता है कि त्रिज्या के अंदर क्या उठाया जाता है, न कि जो त्रिज्या को ओवरलैप करते हैं, मुझे किसी भी त्रिज्या के लिए किसी भी परिणाम को लेने में सक्षम होने की आवश्यकता होती है जो एक-दूसरे को ओवरलैप करता है।
मैं शुभांशु के उत्तर की तुलना में एक सटीक और सटीक एसक्यूएल की तलाश में हूं। आप नीचे पढ़ने के लिए पढ़ सकते हैं कि सटीक लोगों को कार्य करने और चुनने के लिए मुझे वास्तव में क्वेरी की आवश्यकता है।
डेटा, लोगों:
+-----------+-----------+--------+
| latitude | longitude | radius |
+-----------+-----------+--------+
| 51.517395 | -0.053129 | 5.6 |
| 51.506607 | -0.116129 | 0.7 |
+-----------+-----------+--------+
कृपया ध्यान दें कि radius
किलोमीटर की दूरी पर है।
+-----------+-----------+-----+
| latitude | longitude | km |
+-----------+-----------+-----+
| 51.502117 | -0.103340 | 0.3 |
| 51.498913 | -0.120850 | 0.7 |
| 51.496078 | -0.108919 | 0.7 |
| 51.496506 | -0.095873 | 0.7 |
| 51.503399 | -0.090723 | 0.7 |
| 51.508049 | -0.100336 | 0.7 |
| 51.508797 | -0.112610 | 0.7 |
| 51.505535 | -0.125227 | 0.7 |
| 51.502331 | -0.108061 | 0.7 |
+-----------+-----------+-----+
वर्तमान एसक्यूएल मैं का उपयोग करें: MySQL जो आप अपने प्रश्न का परीक्षण करने के लिए उपयोग कर सकते हैं
SELECT ppl.latitude,
ppl.longitude,
ppl.radius
FROM
(
people ppl
),
(
SELECT latitude, longitude
FROM radiuses
) AS radius
WHERE (POW((ppl.longitude - radius.longitude) * 111.12 * COS(ppl.latitude), 2) + POW((ppl.longitude - radius.longitude) * 111.12, 2)) <= 4
GROUP BY ppl.id
डेटा,
INSERT INTO radiuses (id, latitude, longitude, km) VALUES ('1', '51.502117', '-0.103340', '0.3'), ('2', '51.498913', '-0.120850', '0.7'), ('3', '51.496078', '-0.108919', '0.7'), ('4', '51.496506', '-0.095873', '0.7'), ('5', '51.503399', '-0.090723', '0.7'), ('6', '51.508049', '-0.100336', '0.7'), ('7', '51.508797', '-0.112610', '0.7'), ('8', '51.505535', '-0.125227', '0.7'), ('9', '51.502331', '-0.108061', '0.7');
INSERT INTO people (id, latitude, longitude, radius) VALUES ('1', '51.517395', '-0.053129', '5.6'), ('2', '51.506607', '-0.116129', '0.7');
पुरानी सारांश
नोट: सभी अक्षांश और रेखांश बस यादृच्छिक रूप से बनाए गए हैं।
मेरे पास एक नक्शा ऐपलेट है जो उपयोगकर्ता 1km त्रिज्या के साथ एक lat/lng स्थान के त्रिज्या रख सकता है।
अब, एक और उपयोगकर्ता है जो त्रिज्या मानचित्र पर किसी भी स्थान पर, प्रत्येक को 1 किमी त्रिज्या (ऊपर उपयोगकर्ता के समान) के साथ रख सकता है।
इस तरह की उपयोगकर्ता ए लाल है और उपयोगकर्ता बी नीला है।
मूल रूप से उपयोगकर्ता A भंडार एक मेज है कि इस तरह दिखता है में अपने दायरों:
+-----------+---------+-----------+-----------+
| radius_id | user_id | latitude | longitude |
+-----------+---------+-----------+-----------+
| 1 | 1 | 81.802117 | -1.110035 |
| 2 | 1 | 81.798272 | -1.144196 |
| 3 | 1 | 81.726782 | -1.135919 |
+-----------+---------+-----------+-----------+
और उपयोगकर्ता B भंडार एक और टेबल कि इस तरह दिखता है में अपने त्रिज्या - (ध्यान दें : वे केवल प्रति खाता 1 निर्देशांक स्टोर कर सकते हैं):
+---------+-----------+-----------+
| user_id | latitude | longitude |
+---------+-----------+-----------+
| 6 | 81.444126 | -1.244910 |
+---------+-----------+-----------+
मैप तस्वीर में त्रिज्या सर्किल छू रहे हैं, भले ही परिभाषित त्रिज्या के भीतर आने वाले उन उपयोगकर्ताओं को चुनने में सक्षम होना चाहते हैं। केवल केवल त्रिज्या लेने में सक्षम होगा, जब A
और B
नहीं।
मुझे यकीन है कि यह संभव है, लेकिन मुझे नहीं पता कि MySQL में इस तरह के सिस्टम के साथ कैसे आना है।
मुझे यह Google डेवलपर साइट पर मिल गया है, लेकिन यह सिर्फ इतना नहीं है कि मुझे क्या करना चाहिए।
संपादित: मैं, क्योंकि यह का उपयोग करता है 1 अक्षांश के लिए बाध्य एक अच्छा वाला पाया है, यह बहुत करीब है, लेकिन अभी भी नहीं है कि मैं क्या देख रहा हूँ और देशांतर निर्देशांक जब मैं एक टेबल में एकाधिक है।
यह एक ऐसा उत्तर हो सकता है जो आपको एक संकेत देता है http://stackoverflow.com/questions/11502469/find-records-with-lattitude-and-logintude/11502530#11502530 आप बस 'WHERE दूरी <1234' जोड़ते हैं पूछताछ के लिए। – fdomig