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

पोस्टगिस में बहुभुज के भीतर सभी बिंदुओं को कैसे खोजें?

आप उपयोग कर सकते हैं

SELECT POINT_LOCATION 
FROM LOCATIONS_TABLE 
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);

नोट:बहुभुज बंद होना चाहिए (अर्थात अंतिम निर्देशांक ==प्रथम निर्देशांक)। दूसरा पैरामीटर POINT_LOCATION आपकी बिंदु तालिका में ज्यामिति स्तंभ होना चाहिए।

अद्यतन:मैंने अपने पीजी डेटाबेस में आपके चरणों को फिर से चलाने की कोशिश की है। मैंने 2 टेबल बनाए, LOCATIONS_TABLE (id, geom) और POLYGON (id, geom)। उसके बाद मैंने LOCATIONS_TABLE को 2 अंकों से भर दिया

SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)

उसके बाद मैंने पॉलीगॉन टेबल में पॉलीगॉन डाला

SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375  (...)

मैंने qgis में स्थिति की कल्पना की, नीचे चित्र देखें:

जैसा कि आप देख सकते हैं, 2 बिंदु बहुभुज के अंदर हैं। इसलिए मैंने मैन्युअल रूप से बहुभुज के बाहर एक बिंदु बनाया। उसके बाद, आप निम्न sql क्वेरी का उपयोग करके देख सकते हैं कि क्या बिंदु बहुभुज के अंदर हैं:

SELECT ST_Contains(polygon.geom, point.geom) 
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon

यह अंदर के 2 बिंदुओं के लिए t लौटाता है और तीसरे बिंदु के लिए गलत है।




  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 क्वेरी से sqlalchemy के साथ पंडों का डेटाफ्रेम लौटाएं

  2. Oracle से PostgreSQL:इसके साथ प्रारंभ/कनेक्ट करें

  3. Postgresql व्यू में दिनों और घंटों में दो डेटाटाइम फ़ील्ड अंतर कैसे प्राप्त करें?

  4. माइग्रेशन में रॉ क्वेरी निष्पादित करें - सीक्वेलाइज़ 3.30

  5. उन मूल्यों के लिए क्वेरी कैसे करें जिनके पास पोस्टग्रेएसक्यूएल में सबसे ज्यादा वोट गिनती है और कोई झंडे नहीं हैं?