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

मैं अपने निर्देशांक के 5-मील के दायरे में सभी पंक्तियों को कैसे क्वेरी करूं?

आप चाहते हैं "सभी पंक्तियाँ एक निर्देशांक के 5 मील के दायरे में" , तो यह नहीं है बिल्कुल एक K-निकटतम-पड़ोसी (KNN) समस्या। संबंधित, लेकिन आपका मामला सरल है। "मेरे निर्देशांक के निकटतम 10 पंक्तियाँ खोजें" KNN समस्या होगी।

अपने निर्देशांकों को geography में बदलें मान:

ST_SetSRID(ST_MakePoint(longitude, latitude),4326)::geography

वैकल्पिक रूप से आप सरल geometry . का उपयोग कर सकते हैं प्रकार। विचार करें:
4.2.2. ज्यामिति डेटा प्रकार पर भूगोल डेटा प्रकार का उपयोग कब करें

फिर हमारे पास एक टेबल है जैसे:

CREATE TABLE tbl (
  tbl_id serial PRIMARY KEY
, geog geography NOT NULL
);

आपको केवल ST_DWithin() की आवश्यकता है - और एक स्थानिक अनुक्रमणिका इसे तेज़ बनाने के लिए:

CREATE INDEX tbl_geog_gist ON tbl USING gist(geog);

प्रश्न:

SELECT *, ST_Distance(c.x, geog) AS distance  -- distance is optional
FROM   tbl t, (SELECT ST_GeographyFromText('SRID=4326;POINT(-72.63 42.06)')) AS c(x)
WHERE  ST_DWithin(c.x, geog, 8045)  -- distance in meter
ORDER  BY distance; -- order is optional, you did not ask for that

या आप अपने मूल कॉलम का उपयोग कर सकते हैं और एक कार्यात्मक अनुक्रमणिका बना सकते हैं ... यह और अन्य विवरण dba.SE पर इस निकट से संबंधित उत्तर में:

  • दूरी के आधार पर ऑर्डर करें


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL डेटाबेस बनाना

  2. WHERE क्लॉज में एक कॉलम नाम उपनाम का संदर्भ लें

  3. खाली सरणी के साथ रिकॉर्ड पुनर्प्राप्त करते समय समस्या

  4. एसक्यूएल - एकाधिक तालिकाओं से दृश्य बनाएं

  5. PostgreSQL में Oracle उच्च उपलब्धता अवधारणाएं