কীভাবে বিদ্যমান লাইনস্ট্রিংগুলিতে উল্লম্ব যোগ করবেন?


10

যদি আমার থাকে

Linestring(1 2, 1 5, 1 9)

এবং ক

Point(1 3)

এমন কোনও ফাংশন রয়েছে যা লাইনস্ট্রিং এবং পয়েন্টটি অর্ডার সংরক্ষণ করে বিন্যাস করতে পারে যাতে আউটপুটটি হ'ল:

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

সুতরাং আপনি কি বিদ্যমান লাইনগুলিতে উল্লম্ব যোগ করবেন?
আর কে

হ্যাঁ, বিদ্যমান লাইনস্ট্রিংয়ে উল্লম্ব যোগ করুন, যার ফলে একটি লাস্টারিং থাকে।
বোরিস্ট

আপনার এটি বিটিডব্লিউ করার দরকার কেন?
আর কে

উত্তর:


8

যদি লাইন স্ট্রিংটি কেবলমাত্র নির্দিষ্ট পয়েন্টের নিকটবর্তী অবস্থানে বিভক্ত করা হয়, আপনি এটি দিয়ে যা করতে চান তা করতে পারেন (প্রদত্ত পয়েন্টের নিকটতম পয়েন্টে লাইনস্ট্রিংকে বিভক্ত করুন এবং দুটি বিভাগকে মনে রাখবেন)

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

পোস্টজিআইএস-এসT_এডপয়েন্ট রয়েছে যা আপনাকে এই বিন্দুটি কোথায় যুক্ত করতে হবে তা নির্দিষ্ট করতে চাইলেও এটি করার অনুমতি দেওয়া উচিত।

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)

হ্যাঁ, আমি এই ফাংশনটির জন্য জানি তবে আমার নতুন পয়েন্টটি কোথায় রাখা উচিত তা আমি জানি না।
বোরিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.