Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक बाउंडिंग बॉक्स के अंदर सभी भू-स्थानिक बिंदुओं का चयन करें

संभवतः आपके 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- निकटतम-स्थान/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बाइट में mysql में int(11) के कॉलम का आकार क्या है?

  2. php कनेक्शन पूलिंग mysql

  3. MySQL में फ़ील्ड मान के साथ स्ट्रिंग को संयोजित करें

  4. osx पर jdbc का उपयोग करके जावा को mysql से कनेक्ट करें

  5. MySQL शॉपिंग कार्ट संरचना