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

निकटतम पड़ोसियों के लिए पोस्टगिस एसक्यूएल

सबसे पहले, यदि आप अक्षांश, देशांतर का उपयोग कर रहे हैं, तो आपको 4326 का उपयोग करना होगा।

UPDATE season SET geom = ST_PointFromText ('POINT(' || longitude || ' ' || latitude || ')' , 4326 ) ;

फिर आप जियोम फील्ड पर एक इंडेक्स बनाते हैं

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

फिर आपको केएनएन नाइटबोर्स मिलते हैं:

SELECT *,ST_Distance(geom,'SRID=4326;POINT(newLon newLat)'::geometry) 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

यह क्वेरी जिस्ट इंडेक्स की kNN कार्यक्षमता का लाभ उठाएगी (http://workshops. बाउंडलेसजियो.com/postgis-intro/knn.html )।

फिर भी लौटाई गई दूरी डिग्री में होगी, मीटर में नहीं (प्रोजेक्शन 4326 डिग्री का उपयोग करता है)।

इसे ठीक करने के लिए:

SELECT *,ST_Distance(geography(geom),ST_GeographyFromText('POINT(newLon newLat)') 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

जब आप ST_distance की गणना करते हैं तो भूगोल प्रकार का उपयोग करें। दूरी हमेशा मीटर में होती है:

http://workshops.boundlessgeo.com/postgis-intro/geography.html ए>

इस सभी कार्यक्षमता के लिए शायद हाल ही के पोस्टगिस संस्करण (2.0+) की आवश्यकता होगी। हालांकि मुझे यकीन नहीं है।

संदर्भ के लिए इसे देखें https:// gis.stackexchange.com/questions/91765/improve-speed-of-postgis-nearest-neighbor-query/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आर में int16/uint16 में PostgreSQL बाइटिया कॉलम हेक्स को डीकोड कैसे करें?

  2. पोस्टग्रेज़ फ़ंक्शन में अस्थायी तालिका को नहीं पहचानता है

  3. PHP/MySQL INSERT सुविधा तर्क त्रुटि

  4. PostgreSQL मामले में फ़ंक्शन नाम असंवेदनशील हैं?

  5. स्ट्रिंग को संख्या में कास्ट करें, शून्य या खाली स्ट्रिंग को 0 . के रूप में व्याख्या करना