2011-01-14 7 views
20

में अक्षांश के भीतर, मैं सिर्फ पूछने के लिए कि क्या यह इस छद्म कोड की तरह एक प्रश्न कुछ करना संभव है चाहता था: मेज सेक्वैरी देशांतर और विशिष्ट कोड उदाहरण के लिए पूछ रहा से पहले MySQL

आइटम का चयन जहां अक्षांश/देशांतर = - एक निश्चित अक्षांश/देशांतर point-

की एक्स मील के दायरे में है कि संभव है? या मुझे कुछ हुप्स से कूदना है? किसी भी अच्छा दृष्टिकोण है कि सिफारिश की जा सकती है बहुत अच्छा होगा!

उत्तर

49

आप Haversine सूत्र की खोज करना चाहिए, लेकिन एक अच्छी शुरुआत हो सकता है:

पहले यूआरएल से हवाला देते हुए 'ढूँढना MySQL के साथ शामिल स्थान' :

यहाँ एसक्यूएल बयान है कि सबसे करीब 20 स्थानों है कि एक के भीतर हैं ढूंढेगा 37 मील की त्रिज्या 37, -122 समन्वय। ऐसा नहीं है कि पंक्ति के अक्षांश/देशांतर और लक्ष्य अक्षांश/देशांतर के आधार पर दूरी की गणना करता है, और उसके बाद ही पंक्तियों के लिए पूछता है, जहां दूरी मूल्य 25 से कम है, दूरी के अनुसार पूरे क्वेरी आदेश देता है, और 20 परिणामों यह सीमित करता है। मील के बजाय किलोमीटर की दूरी से खोजने के लिए, 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 < 25 ORDER BY distance LIMIT 0 , 20; 
+0

आपके सुझाव के लिए धन्यवाद। मैंने अभी यहां एक नया प्रश्न पोस्ट किया है: http://stackoverflow.com/questions/4697624/querying-for-things-near-a-geolocation – Genadinik

+2

यह मेरे लिए किसी भी गणना की दूरी वापस नहीं करता है, बस पूरे समय 'न्यूल' । –

+0

सटीक बिंदु पर परिणाम नहीं लौटा रहा है। ये परिणाम नल के रूप में दूरी लौट रहे हैं जो खंड होने पर काम नहीं करता है। – Maykonn

5

साथ 3959 की जगह मैं अत्यधिक आपरेशन के इस प्रकार के लिए या तो SpatiaLite या PostGIS का उपयोग कर की सिफारिश करेंगे। उन्होंने ऐसे कार्यों में बनाया है जिन्हें आप कोड कोड करने की कोशिश कर रहे हैं। उनके पास स्थानिक डेटा के लिए भी उचित समर्थन है जो वास्तव में MySQL में मौजूद नहीं है।

MySQL में बिल्कुल कोई समाधान नहीं है, लेकिन यदि आप भविष्य में स्थानिक अनुरोध करना चाहते हैं तो बेहतर समाधान।

संबंधित मुद्दे