PostGIS का उपयोग करके बाउंडिंग बॉक्स का चयन करें?


36

मैं सभी तरीकों और उनके नोड्स का चयन करने के लिए एक क्वेरी बनाना चाहता हूं जो पोस्टगिस का उपयोग करके एक बाउंडिंग बॉक्स के भीतर मौजूद हैं। बाउंडिंग बॉक्स में ऑस्मोसिस "- इनबाउंडिंग-बॉक्स" कमांड के रूप में सभी विवरण शामिल होंगे।

क्या उसे करने का कोई तरीका है?

जवाबों:


36

ऑस्मोसिस डॉक्स के लिए, मैं कमांड विकल्प देखता हूं :

--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201

PostGIS के लिए आप एक बाउंडिंग बॉक्स बनाने के लिए ST_MakeEvelopvelop (बाएँ, नीचे, दाएं, ऊपर, श्रीड) का उपयोग कर सकते हैं , फिर &&बाउंडिंग बॉक्स ऑपरेटर को यह पता लगाने के लिए कि बाउंडिंग बॉक्स कहाँ प्रतिच्छेद करें:

SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);

SRID 4326 WGS84 Lat / Long के लिए है, और केवल PostGIS 1.5 के लिए आवश्यक है; इसे बाद के संस्करणों के लिए छोड़ा जा सकता है।


धन्यवाद। ST_MakeEnvelope फ़ंक्शन को एक और पैरामीटर, srid की आवश्यकता है। मैं नहीं जानता कि वहाँ क्या रखा जाए .. कोई विचार?
यूरियाल

1
ऐसा लगता है कि आप PostGIS 1.5 का उपयोग कर रहे हैं, जिसके लिए उस पैरामीटर की आवश्यकता होती है। मुझे लगता है कि SRID को नजरअंदाज किया जाता है, इसलिए किसी भी मूल्य के समान परिणाम मिल सकते हैं। यदि आपके पास लेट / लॉन्ग डेटा है, तो आम तौर पर 4326 का एसआरआईडी का उपयोग करें।
माइक टी

1
जब आप इसे लोड करते हैं तो अधिकांश उपकरण इन दिनों आपको OSM डेटा के लिए SRID चुनने देते हैं। डिफ़ॉल्ट OSM SRID 3857 (गोलाकार व्यापारी) है। अधिकांश लेट / लोन डेटा के लिए डिफ़ॉल्ट SRID SRID 4326 (Lat / Lon AKA WGS84) है। यदि आप SRID 3857 के साथ डेटा लोड करते हैं, उदाहरण के लिए, आपको LAT / LON WGS84 से 3857 में रूपांतरण करना होगा: ST_Transform (ST_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857) कुछ उपकरण (जैसे imposm3) कर्ण केवल SRID 3857
जस्टिन स्वानहार्ट

ध्यान दें कि && ऑपरेटर आपके लिए SRID को रूपांतरित नहीं करता है। सुनिश्चित करें कि आप जो लिफाफा बनाते हैं, वह परीक्षण ज्यामिति के समान SRID में है, या फिर इसे स्वयं परिवर्तित करें। trac.osgeo.org/postgis/ticket/2320
नेल्सन

1
&& संचालक एसटी_इंटरसेक्ट्स की तुलना में कम्प्यूटेशनल रूप से धीमा है
caiohamamura

8

मुझे लगता है कि यह कुछ इस तरह होगा: PostGIS में बाउंडिंग बॉक्स द्वारा बनाया गया है

ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)

क्वेरी उप-वर्ग के साथ ST_Intersection का उपयोग करेगी।

SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom 
FROM (SELECT nodes.id, nodes.tag, 
   ST_Intersection(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )).geom AS nodes_geom
   FROM nodes 
   WHERE ST_Intersects(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;

मैंने कम या ज्यादा इसे पोस्टगिस मदद पृष्ठों से लिया है
एक दूसरी क्वेरी, तरीकों की मेज पर, ऊपर के समान डिज़ाइन की गई (लेकिन ST_Dimension () = 1) के तरीकों से मिलनी चाहिए।

HTH, मीका


धन्यवाद! क्या श्रीद? मुझे किस <sr> में डालने की आवश्यकता है? और ".geom" (पंक्ति 4) ऐसा लगता है कि यह अमान्य है, यह होना चाहिए?
यूरियाल

क्षमा करें, मैंने पिछले सप्ताह की आपकी टिप्पणी को याद किया। श्रीड कोऑर्डिनेट रेफरेंस सिस्टम कोड है। यानी 2039 में इजरायल के लिए। .Geom जोड़ एक "ज्योमेट्रीकोलेक्शन" के ज्यामिति भाग को निकालता है। आप सही हो सकते हैं कि यहां इसकी आवश्यकता नहीं है।
मीका

5

यहाँ एक विषय है जो यहाँ आपके प्रश्न के समान है ...

ST_Intersection - (T) एक ज्यामिति लौटाता है जो जियोमा और जियोमबी के साझा हिस्से का प्रतिनिधित्व करता है। भूगोल कार्यान्वयन, चौराहे को करने के लिए ज्यामिति में परिवर्तन करता है और फिर वापस WGS84 में बदल जाता है।

1. आप ज्यामिति निर्माण कार्यों के बारे में भी कुछ जानकारी यहाँ प्राप्त कर सकते हैं ।

SELECT ST_AsText(ST_Intersection(
  ST_Buffer('POINT(0 0)', 2),
  ST_Buffer('POINT(3 0)', 2)
));

चौराहा

2. गहन जानकारी के बारे में यहां गहन जानकारी : PostGIS - ST_Intersects, ST_Intersection ...

SELECT b.the_geom As bgeom, p.the_geom As pgeom, 
        ST_Intersection(b.the_geom, p.the_geom) As intersect_bp
    FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
    WHERE ST_Overlaps(b.the_geom, p.the_geom)
    LIMIT 1;

चौराहा

मुझे उम्मीद है इससे आपको मदद मिली होगी...


0

यह @ मीका के कोड पर एक टिप्पणी है।

के लिए समन्वय जोड़े POLYGONएक घड़ी की (या एक काउंटर दक्षिणावर्त) आदेश का पालन करना चाहिए: ऊपरी, बाएँ ऊपरी दाएँ, सही कम, छोड़ दिया, निचले ऊपरी फिर से छोड़ दिया है।

तो, दक्षिणावर्त, फ़ंक्शन कॉल होना चाहिए:

ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)

या दक्षिणावर्त काउंटर:

ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.