পোস্টজিআইএস পুনর্বিবেচনামূলক প্রশ্ন লাইন সংযোগের উপর ভিত্তি করে


9

আমার জিজ্ঞাসা নিয়ে সমস্যা হচ্ছে। আমার কাছে লাইনস্ট্রিংয়ের একটি নেটওয়ার্ক রয়েছে, যার প্রতিটি এন_ টাইপ কলামে একটি মান রয়েছে। এটি মুষ্টিমেয় বিকল্পগুলির মধ্যে একটি হতে পারে। আমি একটি নতুন টেবিল তৈরি করতে চাই যা একই ধরণের যে কোনও লাইনস্ট্রিংগুলিকে গ্রুপ করে এবং এটি একটি অবিচ্ছিন্ন লাইন তৈরি করে।

আগে:

এখানে চিত্র বর্ণনা লিখুন

পরে:

এখানে চিত্র বর্ণনা লিখুন

আমি এখন পর্যন্ত যা পেয়েছি তা এখানে। এটি ফলাফলগুলি দেয় কিন্তু তারা কোনও ধারণা দেয় না - প্রকারগুলি মেলে না এবং এটি অনেকগুলি বৈশিষ্ট্য ফেরত দেয়।

দয়া করে নোট করুন যে আমি তার প্রতিবেশীর 5 ফুটের মধ্যে কোনও লাইন হিসাবে "ধারাবাহিক" সংজ্ঞায়িত করেছি এবং 30 ডিগ্রি কোণে মিটিং করেছি।

WITH RECURSIVE all_links (i, pk_uid, n_type, geom) AS (
    SELECT  1 AS i,
            pk_uid,
            n_type,
            geom
    FROM    network
    WHERE   n_type != 'none'

    UNION ALL

    SELECT  a.i + 1,
            b.pk_uid,
            b.n_type,
            b.geom
    FROM    network b, all_links a
    WHERE   b.n_type = a.n_type
    AND     b.geom <#> a.geom <= 5  --lines are continuous if within 5 feet of neighbor
    AND     ABS( DEGREES( 3*pi() - st_azimuth(st_startpoint(a.geom),st_endpoint(a.geom)) + st_azimuth(st_startpoint(b.geom),st_endpoint(b.geom)))::int % 360 - 180) <= 30 )  --only take links within 30 degrees of the same angle

SELECT i, n_type, ST_Union(the_geom) FROM all_links GROUP BY i, n_type

আমি ধরে নিয়েছি যে একটি পুনরাবৃত্তি ক্যোয়ারী যাওয়ার উপায়, তবে আমি এতে ভুল প্রমাণিত হতে পেরে খুশি। পুনরাবৃত্তিগুলি কুঁচকানো একটু কঠিন।

সম্পাদনা করুন: আমার আরও যোগ করা উচিত যে আমি ইতিমধ্যে ST_Uionion এবং ST_Line विसর ব্যবহার করে একত্রিত করার চেষ্টা করেছি এবং তারপরে ফলাফলটি ডাম্পিং করছি। এই ধরনের কাজ করে তবে 30 ডিগ্রি ছেদ করার জন্য অ্যাকাউন্ট করে না এবং সংযোগের জন্য পাঁচ ফুট সহনাকে সম্মানও করতে পারে না।


এটি গভীরভাবে খোঁড়াখুঁড়ি না করে কয়েকটা পর্যবেক্ষণ। আপনার নির্বাচিত ধারাটিতে আপনাকে a.geom এবং b.geom একত্রিত করতে হবে। আপনার সম্ভবত এটি নিশ্চিত হওয়া উচিত যে আপনি চেষ্টা করে নিজের সাথে একটি লাইনে যোগদান না করেa.pk_uid != b.pk_uid
MickyT

@ মিকিটি ধন্যবাদ আমার উল্লেখ করা উচিত ছিল যে আমি গত সেলেক্ট ক্লজে ইউনিয়নটি করতে পারি তবে আপাতত সবেমাত্র নির্বাচন করা হয়েছে * যাতে আমি সমস্ত ফলাফল দেখতে পারি। আমি আমার কোড স্নিপেটটি পরিবর্তন করে দেখাব যা শেষ পর্যন্ত এটি দেখতে কেমন হবে should
স্পেনসারেকারনেস

পুনরাবৃত্তিমূলক জিজ্ঞাসা করা খুব কঠিন। লোল এবং +1
জন পাওয়েল

একটি দ্রুত চেহারা আপনাকে আপনার বেস / অ্যাঙ্কর ক্যোয়ারিতে সমস্যা থাকতে পারে বলে পরামর্শ দেয়। আপনার প্রতিটি লাইন, এ, বি, সি ইত্যাদির জন্য সূচনা পয়েন্ট নির্বাচন করা দরকার যা আপনি পুনরাবৃত্ত অংশে তৈরি করেন। সম্ভবত আপনাকে অ্যাঙ্কর ক্যোয়ারিতে কোনও ধরণের ক্রম যুক্ত করতে হবে (সম্ভবত x বা y, দিক - ডেটা না দেখলে জানা শক্ত)। আমি এটিকে ভেঙে ফেলি এবং নিশ্চিত করব যে পুনরাবৃত্তির অংশটি চালিয়ে যাওয়ার আগে আমি প্রথমে বুদ্ধিমান শুরুর পয়েন্ট পাচ্ছি। সাম্প্রতিক সময়ে টাইম সিরিজের রেখা খুঁজে পেতে আমি একটি পুনরাবৃত্ত ক্যোয়ারী ব্যবহার করেছি এবং একবার আমি অ্যাঙ্কার পয়েন্টগুলি সঠিকভাবে সনাক্ত করতে পারলাম, বাকিটি সহজ ছিল (ইশ)
জন পাওয়েল

@dbaston। ভাল পয়েন্ট, তবে আপনি এটি একটি পুনরাবৃত্ত ক্যোয়ারী দিয়েও করতে পারেন এবং প্রত্যেকেরই এটি ইনস্টল নেই।
জন পাওয়েল

উত্তর:


1

আপনার সমাধানটি হ'ল জন বারিয়া যেমন বলেছে তেমন লাইন উপাদানগুলির প্রাক-অর্ডারিং অনুপস্থিত।

আমি বলব পুনরাবৃত্তিমূলক প্রশ্নগুলি খুব, খুব কঠিন।

আপনাকে অবশ্যই একটি নতুন ডাটাবেস ফাংশনে ST_ লাইনরমের আচরণটি প্রতিলিপি করার চেষ্টা করতে হবে। আমি প্রথমে একটি এসT_লাইনরম্রিম বাস্তবায়নের উত্সটি দেখার চেষ্টা করব এবং এটির পরিবর্তন করে 30 ডিগ্রি অ্যাঙ্গেল টুইচ তৈরি করব।

সমষ্টি থেকে বাদ দেওয়ার জন্য <30 ডিগ্রি ডিগ্রি কোণে নয় এমন বিভাগগুলি, আপনাকে অবশ্যই তাদের একটি সমষ্টি লুপের মধ্যে তুলনা করতে হবে।

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