निर्देशांक के एक समूह के भीतर झूठ बोलने वाले बिंदु खोजें


9

मेरे पास एक PostGIS डीबी है, और मैं उन बिंदुओं को खोजना चाहता हूं जो कुछ क्षेत्र (एक बाउंडिंग बॉक्स) के भीतर स्थित हैं। मेरे पास निर्देशांक के दो सेट हैं, जिनसे मुझे बॉक्स (यदि आवश्यक हो) बनाने वाले सभी चार आयत बिंदु मिल सकते हैं। प्रश्न में मेरे डेटा कॉलम का नाम 'बिंदु' है और यह भी प्रकार बिंदु का है।

  • वहाँ वैसे भी निर्देशांक के चार सेट (lat / long) निर्दिष्ट करने और बॉक्स के भीतर झूठ बोलने वाले सभी बिंदुओं को प्राप्त करने के लिए है।
  • या दो बिंदु निर्दिष्ट करें और DB को आयत के कोनों को बाहर निकालने दें, और भीतर अंक लौटाएँ

बस मामले में मैं स्पष्ट नहीं हो रहा हूं कि मैं क्या हासिल करना चाहता हूं। 'वनीला' एसक्यूएल के बराबर अगर मेरे पास एक बिंदु के बजाय एक लंबा और लंबा क्षेत्र होगा:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

अद्यतन किए गए संस्करण:

मैं अंडरडार्क के समाधान की कोशिश कर रहा हूं। सबसे पहले मेरे पास ST_MakePoint कॉन्स्टेक्टर नहीं था (अब मैं करता हूं) और मुझे अभी भी एक समान त्रुटि मिलती है (बस एक अलग चरित्र पर)।

SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))

और मुझे यह त्रुटि मिल रही है:

ERROR:  function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
                                          ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


********** Error **********

ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39

संपादित करें:

छोटी अवधि में मैं इसे हल कर सकता हूं:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

लेकिन मुझे यह काम करना होगा कि पोस्टगिस कार्यों में से कोई भी मेरे लिए काम क्यों नहीं कर रहा है।


पसंदीदा तरीका केवल एक ही स्थान पर पोस्ट करना है। यदि वह स्थान अनुचित है या काम नहीं करता है, तो उसे आसानी से स्थानांतरित किया जा सकता है। मैं कोई कार्रवाई नहीं करने जा रहा हूं, क्योंकि जीआईएस वह है जहां आपका प्रश्न होना चाहिए, लेकिन मैं आपसे आग्रह करूंगा कि आप एसओ पर क्रॉस पोस्ट हटा दें।
whuber

1
@ शुभकर्ता .. हो गया।
अंकुर

करता है - ज्योमेट्रीफ्रॉमटेक्स्ट ('POLYGON (75 20,80 30,90 22,85 10,75 20)), 4326 का चयन करें - काम?
शॉन

मुझे स्पष्ट नहीं है आपका क्या मतलब है। मैंने आपके द्वारा कही गई विभिन्न भिन्नताओं की एक किस्म की कोशिश की और उन्होंने काम नहीं किया
अंकुर

"बिंदु" कॉलम क्या है ST_MakePoint (बिंदु) में संदर्भित
UnderDark

जवाबों:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<- आवश्यक के रूप में निर्देशांक बदलें


मूर्खतापूर्ण प्रश्न के लिए खेद है, लेकिन 'the_geom' क्या है ... क्या मैं अपने क्वेरी से चयन * को अन्य नाम देना चाहता हूं और क्या यह मान 'the_geom' बन जाता है
अंकुर

क्षमा करें, निश्चित रूप से यह खोजा जा रहा कॉलम है। मैं इसे db_column या ऐसा कुछ कहूंगा, लेकिन पोस्टगिस डॉक्स अन्यथा सोचते हैं ... यह समझ में आता है कि जब आप जानते हैं कि यह क्या है।
अंकुर

1
जब मैं इसे चलाता हूं, तो मुझे एक त्रुटि मिल रही है जो कहती है कि GeometryFromText मौजूद नहीं है। मैं पोस्टगिस 2.0 का उपयोग कर रहा हूं। मैंने st_geomfromtext भी आज़माया।
पिकारोड

@underdark शायद मैं गलत हूं, लेकिन ऐसा लगता है कि एक कोष्ठक गायब है।
Davide Pastore

3

लगता है जैसे आप अपने बिंदुओं से BBOX (बाउंडिंग बॉक्स) चाहते हैं - इसलिए ST_Extent अनुकूल होगा।

BBOX2D

http://www.bostongis.com/postgis_extent_expand_buffer_distance.snippet

http://postgis.net/docs/ST_Extent.htm पेज प्रदान करेगा, लेकिन सर्वर में समस्याएँ हैं


पुन: सर्वर ... मुझे पता है, मैं Google की कैश प्रतियाँ देखने की कोशिश कर रहा हूँ :)
अंकुर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.