পোস্টজিআইএস সহ মেরু-মোড়ক উপকূলরেখার সাথে পয়েন্ট স্যাম্পলিং


11

আমি এমন একটি কার্যক্রমে কাজ করছি যার জন্য উপকূলরেখাগুলি সহ প্রতি 1000 কিলোমিটার দূরে আমার স্যাম্পল পয়েন্ট পেতে হবে এবং অ্যান্টার্কটিকার কোনও সমস্যায় পড়েছি। আমি যা বলতে পারি তা থেকে, এটি কার্যকরীগুলিতে জ্যামিতির ব্যবহারের সাথে একটি সমস্যা বলে মনে হয় , যখন সত্যই আমি মনে করি এই অপারেশনের জন্য ভূগোলটি ব্যবহার করা উচিত।

থেকে ফাংশন ব্যবহার করে এই অনুরূপ প্রশ্ন , আমি একটি ফলাফলের সৌন্দর্য এটি পছন্দ যে উত্পাদন করতে সক্ষম am: খারাপ ফল

যেমন আপনি দেখতে পাচ্ছেন, ST_AddMeasure()এবং ST_LocateAlong()জ্যামিতিটিকে গোলকভাবে চিকিত্সা করবেন বলে মনে হয় না, যার ফলস্বরূপ দক্ষিণ মেরুতে বসে থাকা অনেকগুলি পয়েন্টের ফলস্বরূপ। এমনকি তারিখের রেখা (বাম দিক) সহ ক্লিপটিতে একটি পয়েন্ট যুক্ত করা হয়েছিল। এই দুটি ফাংশনের ডকুমেন্টেশন অনুযায়ী, কেবল জ্যামিতি ব্যবহার করা যেতে পারে।

বহুভুজ এবং পয়েন্টগুলি তৈরি করতে ব্যবহৃত কোডটি এখানে পাওয়া যাবে , তবে এটি পয়েন্টগুলি তৈরি করতে ব্যবহৃত এসকিউএল:

CREATE TABLE atest AS WITH line AS 
  (SELECT
      id,
      ST_ExteriorRing((ST_Dump(geom)).geom) AS geom
    FROM line_sample_test),
linemeasure AS
    (SELECT
        ST_AddMeasure(line.geom, 0, (ST_Length(line.geom))::int) AS linem,
    generate_series(0, (ST_Length(line.geom))::int, 10) AS i
FROM line),

geometries AS (
    SELECT
        i,
        ST_LocateAlong(linem, i) AS geom 
    FROM linemeasure)

SELECT
    * from geometries;

এই উপকূলরেখা ধরে আমি কীভাবে প্রতি 1000 কিলোমিটারে পয়েন্ট তৈরি করতে পারি?


আপনি কি ST_Segmentize চেষ্টা করেছেন? এটি কেবল জ্যামিতির ক্ষেত্রেও কাজ করতে পারে তবে কমপক্ষে পয়েন্টগুলি উত্পন্ন করার একটি দ্রুত পদ্ধতির মতো বলে মনে হচ্ছে। যাইহোক, কেন শুধু মেরুতে পয়েন্টগুলি সরাবেন না? এটি বাগের চেয়ে ব্যবহৃত প্রজেকশনটির পার্শ্ব প্রতিক্রিয়াটির মতো দেখায়।
lynxlynxlynx

5
আপনার ছবি থেকে দেখে মনে হচ্ছে আপনার ইপিএসজি: 4326 তে আপনার জ্যামিতি রয়েছে। অ্যান্টার্কটিকা ইপিএসজি: 3031 এর মতো একটি মেরু স্টেরিওগ্রাফিক প্রক্ষেপণের পক্ষে আরও উপযুক্ত। তারপরেও, দেখে মনে হচ্ছে আপনার ডেট লাইন ধরে মেরু এবং পিছনে একটি কাটা লাইন নিয়ে কাজ করার দরকার হতে পারে।
টবি স্পিড

উত্তর:


3

একটি মন্তব্যে যেমন পরামর্শ দেওয়া হয়েছে, আমি প্রথমে ইনপুট জ্যামিতিকে একটি মেরু স্টেরিওগ্রাফিক প্রজেকশনে রূপান্তর করব।

প্রথাগতভাবে, ফলস্বরূপ কাটা লাইনটি পরিত্রাণ পেতে আপনি ST_Bufferএটিতে (একটি পরিমাণ সহ 0) ব্যবহার করতে চাইবেন ।

সুতরাং এটি আপনার পছন্দসই ফলাফল পেতে পারে:

-- ST_Transform(geom,3031) reprojects to south polar stereographic,
-- in meters.  ST_Buffer(...) doesn't change the shape, but removes
-- the cut line to the pole (at 180 degrees).
WITH line AS (
    SELECT ST_ExteriorRing(
        ST_Buffer(ST_Transform(geom, 3031), 0)
    ) AS geom
    FROM line_sample_test
),

-- This just generates a table of numbers.  In this case, from 0
-- to the geometry length, counting by 1,000,000 (1000 km).
linemeasure AS (
    SELECT generate_series(0, ST_Length(geom)::int, 1000000) AS i
    FROM line
),

-- Convert those values to a fraction of the overall length (for
-- use as input to ST_LineInterpolatePoint)
linefraction AS (
    SELECT i / ST_Length(geom) AS fraction
    FROM line, linemeasure
),

-- Do the interpolation
geometries AS (
    SELECT ST_LineInterpolatePoint(l.geom, lf.fraction) AS geom
    FROM linefraction lf, line l
),

-- Convert back to EPSG:4326 (i.e. lat/lon coords)
geometries_4326 AS (
    SELECT ST_Transform(geom, 4326) AS geom FROM geometries
)
SELECT * FROM geometries_4326

নোট করুন যে এই ক্যোয়ারীটি ধরে নিয়েছে যে line_sample_testটেবিলের মধ্যে কেবল একটি সারি রয়েছে, সুতরাং আপনার আসল ইনপুট ডেটার জন্য প্রয়োজনীয়ভাবে টুইট করুন।


ST_Buffer(geom, 0)কাট-লাইনটি দূর করার কৌশলটি আমি জানতাম না - এটি দরকারী!
টবি স্পিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.