संभवतः आपके geometry
. में आपके POINT डेटा में x और y आइटम कॉलम अक्षांश और देशांतर की डिग्री में है।
MySQL में इस लुकअप को कुशलतापूर्वक करने के लिए, आपको कुछ चीजों की आवश्यकता होगी।
- एक MyISAM तालिका (या MySQL संस्करण 5.7 और उससे आगे और या तो InnoDB या MyISAM)
- आपके ज्यामिति स्तंभ पर एक पूर्ण योग्यता नहीं है
- एक स्थानिक सूचकांक
ALTER TABLE flags ADD SPATIAL INDEX (coordinates)
- आप जिस आयत को खोजना चाहते हैं उसका पाठ्य प्रस्तुतिकरण बनाने के लिए कोड
- जियोमफ्रॉमटेक्स्ट का उपयोग और एमबीआरआपके चयन विवरण में कार्यों के भीतर / एमबीआर शामिल है।
मान लीजिए कि आपका लेट/लॉन्ग बॉक्स एक आयत है जो लगभग विनचेस्टर कैथेड्रल (51.0606, -1.3131) . आपको उस बिंदु के चारों ओर एक बाउंडिंग बॉक्स चाहिए। यह MySQL क्वेरी उस बाउंडिंग बॉक्स में तिरछे जाने वाली रेखा के लिए एक LINESTRING (पाठ) उत्पन्न करेगी।
SELECT
CONCAT('LINESTRING(',
latitude-0.5,' ',longitude-0.5,
',',
latitude+0.5 ,' ',longitude +0.5,
')') AS box
FROM (
SELECT 51.0606 AS latitude, -1.3131 AS longitude
) AS coord
क्वेरी आपको यह प्राप्त करती है:
LINESTRING(50.5606 -1.8131,51.5606 -0.8131)
आप समान प्रकार की टेक्स्ट स्ट्रिंग के साथ आने के लिए होस्ट भाषा में स्ट्रिंग प्रोसेसिंग का भी उपयोग कर सकते हैं। आपको जिस प्रारूप की आवश्यकता है वह यह है।
LINESTRING(lat1 long1, lat2 long2)
फिर आप इसका उपयोग अपनी स्थानिक तालिका को निम्न प्रकार से खोजने के लिए कर सकते हैं:
SELECT whatever, whatever
FROM flags
WHERE MBRContains(
GeomFromText( 'LINESTRING(50.5606 -1.8131,51.5606 -0.8131)' ),
flags.coordinates)
यह स्थानिक सूचकांक का फायदा उठाएगा और flags
. की प्रत्येक पंक्ति को ढूंढेगा जिसके निर्देशांक उस विकर्ण रेखा के बाउंडिंग बॉक्स में स्थित हैं।
ये रहे कुछ दस्तावेज़ीकरण ।
अगर आपके flags
तालिका में कुछ सौ हज़ार से कम पंक्तियाँ हैं, तो आप पा सकते हैं कि अक्षांश और देशांतर स्तंभों (FLOAT डेटा प्रकार, अनुक्रमित) के साथ एक साधारण तालिका (स्थानिक तालिका नहीं) भी अच्छा प्रदर्शन करती है और विकसित और डीबग करना आसान है।
मैंने उस तकनीक पर एक ट्यूटोरियल लिखा है। http://www.plumislandmedia.net/mysql/haversine-mysql- निकटतम-स्थान/