PostGIS में बिंदु सम्मिलित करना?


49

मैंने अपने पोस्टजीआईएस नट में एक तालिका बनाई है मैं बिंदु नहीं डाल सकता।

मेरे प्रश्न में क्या गलत है?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

अंतिम क्वेरी के बाद यह कुछ त्रुटि दिखाता है ..

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


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

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

मैं पहले से ही अपने PostGIS संस्करण की जाँच करता हूँ।

SELECT PostGIS_full_version();

मुझे निम्न आउटपुट मिला है ..

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"

जवाबों:


84

आप SQL और WKT (प्रसिद्ध पाठ ) को भ्रमित कर रहे हैं । WKT आकार का वर्णन करने के लिए एक ज्यामिति भाषा की तरह है, लेकिन यह SQL नहीं है, जो डेटाबेस को क्वेरी और हेरफेर करने के लिए एक भाषा है। SQL क्वेरी में WKT के साथ काम करते समय, यह पाठ होना चाहिए , और SQL के साथ मिश्रित नहीं होना चाहिए ।

यदि आप ठीक से WKT ("," हटाएं) और SRID सेट करते हैं तो आपकी क्वेरी काम करती है। इस विधि के लिए, ST_GeomFromText(wkt, srid)अच्छी तरह से काम करता है:

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

यदि आपके पास संख्यात्मक देशांतर / अक्षांश वाले स्तंभ हैं, तो आप सीधे एक बिंदु ज्यामिति बना सकते हैं:

ST_SetSRID(ST_MakePoint(long, lat), 4326);

मैनुअल में अन्य ज्यामिति निर्माणकर्ताओं की जाँच करें ।


@ Vik86 के अनुरोध के लिए, the_geomतालिका में अद्यतन किया जा सकता appसांख्यिक स्तंभ से longऔर latका उपयोग कर:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

क्या आप इस सुविधा का उपयोग करने के बारे में विस्तार से बता सकते हैं, "यदि आपके पास संख्यात्मक देशांतर अक्षांश के साथ कॉलम हैं, तो आप सीधे एक POINT ज्यामिति बना सकते हैं: ST_SetSRID (ST_MakePoint (लंबा, अव्यक्त), 4326);" अभी मेरे पास एक अक्षांश और लंबी तालिका है। PostGIS एपीआई का उपयोग करने के लिए मुझे बिंदु प्रारूप में इसकी आवश्यकता है। इसलिए मैं जानना चाहता हूं कि मैं इस सुविधा का उपयोग करके पॉइंट कॉलम को कैसे अपडेट करूं। धन्यवाद विक्रम
२२

@ विकी ने अपडेट किया जवाब देखें
माइक टी।

1

यदि आप जावा क्लाइंट के साथ काम कर रहे हैं तो मेरी सलाह है कि डेटा ट्रांसफर करने के लिए बाइनरी टाइप्स का इस्तेमाल करें। स्मृति से, मैंने 10% का प्रदर्शन सुधार दर्ज किया जब मैंने ST_AsEWKT विधि से यह परिवर्तन किया।

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