मौजूदा linestrings में कोने कैसे जोड़ें?


10

अगर मेरे पास

Linestring(1 2, 1 5, 1 9)

और एक

Point(1 3)

क्या कोई ऐसा कार्य है जो लिनेस्ट्रिंग को मर्ज कर सकता है और ऑर्डर को संरक्षित कर सकता है ताकि आउटपुट हो:

Linestring(1 2, 1 3, 1 5, 1 9)

तो आप मौजूदा लाइनों में वर्टिकल जोड़ देंगे?
आरके

हां, मौजूदा लिनेस्ट्रिंग में वर्टिस जोड़ें, जिसके परिणामस्वरूप लिनेस्ट्रिंग होता है।
बोरिस टीटी

आपको इसे btw करने की आवश्यकता क्यों है?
आरके

जवाबों:


8

यदि LineString को दिए गए बिंदु के सबसे निकट की स्थिति में उप-विभाजित किया जाना है, तो आप ऐसा कर सकते हैं जो आप इसके साथ चाहते हैं (दिए गए बिंदु पर LineString निकटतम बिंदु पर विभाजित करता है और बाद में दो क्रमों को फिर से जोड़ता है)

SELECT ST_AsText(
         ST_LineMerge(
           ST_Union(
             ST_Line_Substring(line, 0, ST_Line_Locate_Point(line, point)),
             ST_Line_Substring(line, ST_Line_Locate_Point(line, point), 1)
       )))
FROM  ST_GeomFromText('Linestring(1 2, 1 5, 1 9)') as line, 
      ST_GeomFromText('Point(1 3)') as point;

हालाँकि, यदि आपके पॉइंट को लाइनस्ट्रिंग पर प्रोजेक्ट नहीं किया जाना है, तो यह काम नहीं करेगा।


2

PostGIS में ST_AddPoint है जो आपको ऐसा करने की अनुमति देनी चाहिए, हालांकि आपको यह बताना होगा कि बिंदु को कहां जोड़ना है।

ST_AddPoint - बिंदु (0-आधारित इंडेक्स) से पहले एक लाइनस्ट्रीमिंग के लिए एक बिंदु जोड़ता है।

उदाहरण:

--guarantee all linestrings in a table are closed
        --by adding the start point of each linestring to the end of the line string
        --only for those that are not closed
        UPDATE sometable
        SET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom))
        FROM sometable
        WHERE ST_IsClosed(the_geom) = false;

        --Adding point to a 2-d line
        SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(1 2, 1 5, 1 9)'), ST_MakePoint(1, 3), 1));

        --result
        st_asewkt
        ----------
        LINESTRING(1 2, 1 3, 1 5, 1 9)

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