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

SQL सर्वर भूगोल डेटाटाइप लाइन पर निकटतम बिंदु

आप अपनी वस्तुओं को GEOGRAPHY . में स्टोर कर सकते हैं कॉलम बनाएं और एक SPATIAL INDEX बनाएं इस कॉलम के ऊपर।

दुर्भाग्य से, SQL Server सतह पर टाइल लगाकर और एक सादे B-Tree में टाइल पहचानकर्ताओं को संग्रहीत करके स्थानिक अनुक्रमणिका लागू करता है सूचकांक, इतना सादा ORDER BY STDistance काम नहीं करेगा (ठीक है, यह काम करेगा लेकिन सूचकांक का उपयोग नहीं करेगा)।

इसके बजाय, आपको इससे मिलती-जुलती एक क्वेरी बनानी होगी:

DECLARE @mypoint GEOGRAPHY
SET @mypoint = geography::STGeomFromText('POINT(@mylat, @mylon)', 4326);

WITH    num (distance) AS
        (
        SELECT  1000
        UNION ALL
        SELECT  distance + 1000
        FROM    num
        WHERE   distance <= 50000
        )
SELECT  TOP 1 m.*
FROM    num
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable
        WHERE   myroad.STDistance(@mypoint) <= distance
        ORDER BY
                STDistance(@mypoint)
        ) m

इस तरह, SQL Server सबसे पहले 1 . के अंदर सड़कों की खोज करेगा अपने स्थान से किलोमीटर, फिर 2 . के भीतर किलोमीटर, आदि, हर बार सूचकांक का उपयोग करते हुए।

अपडेट करें:

यदि आपके पास एक तालिका में कई बिंदु हैं और आप उनमें से प्रत्येक के लिए निकटतम बिंदु खोजना चाहते हैं:

WITH    num (distance) AS
        (
        SELECT  1000
        UNION ALL
        SELECT  distance + 1000
        FROM    num
        WHERE   distance <= 50000
        )
SELECT  mp.mypoint, m.*
FROM    @mypoints mp
CROSS APPLY
        (
        SELECT  TOP 1 m.*
        FROM    num
        CROSS APPLY
                (
                SELECT  TOP 1 *
                FROM    mytable
                WHERE   myroad.STDistance(@mypoint) <= distance
                ORDER BY
                        STDistance(@mypoint)
                ) m
        ) m


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL संग्रहीत कार्यविधियों में लॉगिंग और त्रुटि रिपोर्टिंग को कैसे कार्यान्वित करें?

  2. तालिका के लिए स्तंभ जानकारी प्राप्त करें या SQL सर्वर में देखें (T-SQL:sp_columns)

  3. टीएसक्यूएल पिवट मल्टीपल कॉलम्स

  4. SQL सर्वर NVarchar फ़ील्ड में जापानी वर्णों के बजाय प्रश्न चिह्न वर्ण क्यों संग्रहीत कर रहा है?

  5. SQL सर्वर जॉइन लापता NULL मान