मैं पाइथन 3.5 पर sqlalchemy
और geoalchemy2
का उपयोग करके एक स्थानिक ऑपरेशन करने की कोशिश कर रहा हूं। मेरे पास geom
विशेषता के रूप में अंक वाली एक तालिका है। मैं पहले से ही मेज पढ़ सकते हैं और प्रलेखन निर्देशों का पालन किया है:त्रुटि स्थानिक रूप से सबसेटिंग और पोस्टजीआईएस डेटाबेस
metadata = MetaData()
table = Table('table',
metadata, autoload=True,
schema = "schema",
autoload_with=engine)
print(table.columns)
यह सही ढंग से मुझे मेरे तालिका के कॉलम का नाम देता है। अब, मैं डेटा के एक स्थानिक सबसेट को केवल पॉलीगॉन ऑब्जेक्ट के अंदर वाले बिंदुओं का चयन करना चाहता हूं। मैं ST_Contains
और ST_Intersection
साथ करने की कोशिश की:
# Create session for queries
Session = sessionmaker(bind=engine)
session = Session()
#SELECT * FROM table:
q = session.query(table).filter(table.c.geom.ST_Intersects(func.GeomFromEWKT(<POLYGON>)))
बहुभुज परिभाषित SRID=4326
के साथ एक वाली WKT- ज्यामिति है। मैंने पहले से ही उसी बहुभुज के विभिन्न रूपों के साथ प्रयास किया है, लेकिन कोई भी काम नहीं किया है। क्वेरी निष्पादित करते समय, निम्न त्रुटि लौटाती है:
(psycopg2.InternalError) geometry contains non-closed rings
HINT: "...140.965576171875 -11.11288507032144))" <-- parse error at position 166 within geometry
जहां मैं असफल रहा हूं?
अपने बहुभुज वाली WKT- डाल जोड़ सकते हैं। जैसा कि त्रुटि कहती है, एक अंगूठी शायद बंद नहीं होती है (उदाहरण के लिए प्रत्येक अंगूठी का पहला और अंतिम बिंदु समान होना चाहिए) – JGH
'wkt_string =" पॉलीगॉन ((141.0205078125 -9.166331387642987, 143.602294921875 -9.155485188844034, 143.67919921875 -11.112885070321443, 140.965576171875 -11.11288507032144)) "क्या पॉलीगॉन ऑब्जेक्ट है। जैसा कि आपने कहा था, पॉलीगॉन वास्तव में मान्य नहीं है। फिर भी, मैंने 'sqlalchemy.sql.func.ST_MakeValid' का उपयोग करने का प्रयास किया है और समस्या बनी रहती है। कोई विचार? –