2012-10-10 16 views
5

मेरे पास पोस्टग्रेएसक्यूएल/पोस्टजीआईएस में दो टेबल ज्यामिति कॉलम के साथ 'ट्रिप' नामक एक टेबल है: 'source_geom' ('POINT') और 'destination_geom' ('POINT') शुरू करने का संकेत है और एक यात्रा के अंत स्थान।पोस्टजीआईएस: अन्य बिंदुओं से कुछ त्रिज्या के भीतर अंक ढूंढना

मेरे पास ज्यामिति कॉलम 'office_geom' ('POINT') के साथ 'व्यवसाय' नामक एक और अलग तालिका है जो कार्यालयों का स्थान इंगित करती है।

मेरा लक्ष्य तालिका 'यात्रा' से रिकॉर्ड्स का चयन करना है जिसका गंतव्य से 1000 मीटर के भीतर किसी कार्यालय स्थान से है।

मुझे आवश्यक परिणामों को प्राप्त करने के लिए मुझे किस प्रश्न की आवश्यकता है?

उत्तर

2

यह सबक्वायरी या जॉइन का उपयोग करके किया जा सकता है। उपक्वायरी का उपयोग उदाहरण:

SELECT * FROM business 
WHERE EXISTS(
    SELECT 1 FROM trip 
    WHERE ST_Distance_Sphere(trip.destination_geom, business.office_geom) < 1000 
) 

लेकिन यह क्वेरी इंडेक्स का उपयोग नहीं करेगी और बड़े डेटासेट पर लंबा समय ले सकती है। आप इस की जरूरत है, तो आप, geometry से geography कॉलम बना भूगोल स्तंभों पर स्थानिक अनुक्रमित बनाते हैं, और उपयोग कर सकते हैं ST_DWithin:

select * 
    from business b 
    join trip t on ST_DWithin(trip.destination_geogr, business.office_geogr, 1000) 
संबंधित मुद्दे