2013-05-07 10 views
6

के लिए बाउंडिंग बॉक्स मेरे पास लगभग 40,000 बहुभुज हैं जो मेरी तालिका में ज्यामिति के रूप में संग्रहीत हैं। अब मैं उस ज्यामिति कॉलम पर स्थानिक इंडेक्स बनाना चाहता हूं। स्थानिक सूचकांक बनाते समय यह मुझे बाउंडिंग बॉक्स मानों के लिए पूछ रहा है। क्या आप मेरी बाध्यता को खोजने के तरीके पर मेरी मदद कर सकते हैं। मेरे बाध्यकारी बॉक्स को पाने के लिए मुझे अपना xmin, ymin, xmax, ymax ढूंढना होगा।पॉलीगॉन

धन्यवाद

+1

दोहराएं, दूर छोड़ दिया का ट्रैक रखने, दूर सही, ऊपर दूर और XS और वाईएस नीचे दूर के रूप में आप कर सकते हैं। (या इसे पहली बार बनाते समय करें, अगर यह बहुत धीमा है) – Patashu

उत्तर

7

संपादित करें: आप UnionAggregate और निश्चित रूप से STEnvelope के स्थान पर EnvelopeAggregate इस्तेमाल कर सकते हैं ...


आप एक UnionAggregate सब बहुभुज पर प्रदर्शन कर सकते हैं, उनके आसपास एक STEnvelope रख दिया और XMin, YMin, XMax, YMax मानों को दृढ़ता से चुनें। बेशक आप बाउंडिंग बॉक्स के STAsText के कुछ टीएसक्यूएल मैनिपुलेशन कर सकते हैं, लेकिन मैं इसे मैन्युअल अभ्यास के रूप में छोड़ दूंगा।

यह आपको एक बॉक्स देता है जो आपके मौजूदा बहुभुज को कवर करता है, लेकिन आपको यह समझना चाहिए कि आपको कितना पैडिंग चाहिए या भविष्य के डेटा के लिए कौन सी सीमाएं आवश्यक हैं।

नमूना: सभी vertexes से अधिक

use tempdb; 
create table GeometryTest(id int identity primary key, geom Geometry); 
insert GeometryTest values ('POLYGON((-130 54, -130 23, -60 23, -60 54, -130 54))'); 
insert GeometryTest values ('POLYGON((1 0, 0 0, 0 1, 1 1, 3 5, 1 0))'); 
insert GeometryTest values ('POLYGON((0 0, -100 5, 0 60, 70 70, 3 5, 0 0))'); 

select geometry::UnionAggregate (geom).STEnvelope().STAsText() 
from GeometryTest; 

--------------------------------------------------------------- 
POLYGON ((-130 0, 70 0, 70 70, -130 70, -130 0)) 
--------------------------------------------------------------- 

create spatial index six_GeometryTest_geom on GeometryTest(geom) 
    WITH (BOUNDING_BOX = (-130, 0, 70, 70)); 
+0

प्रतिभा! उसके लिए धन्यवाद। मैं वेलिंगटन से हूं –

+0

क्या एसक्यूएल सर्वर 2008 में ऐसा करने का कोई तरीका है? UnionAggregate और लिफाफाएग्रेगेट अभी तक मौजूद नहीं है .. – Philipp

+0

@ फिलिप यह *** *** एसक्यूएल सर्वर 2008 है। शायद आप 2005 या 2008 का मतलब किसी अन्य संगतता मोड के साथ कर सकते हैं? – RichardTheKiwi

संबंधित मुद्दे