পোস্টজিআইএস-এ একটি কেন্দ্র রেখার সাথে সমান্তরাল লাইনগুলি গণনা করুন


10

আমার পোস্টগ্রিজ এসকিউএল ডাটাবেসে রাস্তার (রোড সেন্টার লাইন) এবং বহুভুজ টেবিলগুলি তৈরি করেছি। নমুনা পরিস্থিতি নিম্নরূপ:

নমুনা দৃশ্য

সমস্যা:

রাস্তার চারপাশে 50 মিটার বাফারের মোড়ে এবং উভয় পক্ষের নিকটতম বিল্ডিং বহুভুজটির মোড়ে রাস্তার সাথে সমান্তরাল রেখাগুলি আমার গুনতে হবে। কাঙ্ক্ষিত আউটপুট দৃশ্য:

পছন্দসই আউটপুট দৃশ্য

আমি যা চেষ্টা করেছি:

আমার পন্থাটি ছিল:

 1) Generate 50m buffer around street layer
 2) get the intersection of buffer and polygons
 3) Compute the distance
 4) Draw offset curves (parallel lines) at both sides of street layer
 5) Merge both curves to get parallel lines at the intersection

এখানে আমার প্রচেষ্টা:

    WITH street_buffer AS (
     SELECT
      street.gid street_id,
      street.geom street_geom,
      ST_Buffer(street.geom, 50, 'endcap=square join=round') geom1,
      building.geom  geom2  
     FROM street
     LEFT JOIN building on ST_DWithin(building.geom, street.geom, 50)
     ORDER BY street_id
    ),
    selected_buildings AS (
     SELECT
      street_id,
      street_geom,
      ST_Intersection(geom1, geom2) geom
     FROM street_buffer
    ),
    distance AS (
     SELECT 
      street_id,
      street_geom,
      ST_Distance(street_geom, geom) as dist
     FROM selected_buildings 
    ),
    curves AS (
     SELECT 
      street_id,
      ST_OffsetCurve(ST_LineMerge(street_geom), dist) as curve1,
      ST_OffsetCurve(ST_LineMerge(street_geom), -dist) as curve2
     FROM distance
     ORDER BY street_id
    )
    SELECT 
     street_id,
     ST_Union(curve1, curve2) geom 
    FROM curves
    ORDER BY street_id

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

EDIT_1:

উপরের কোডের আসল আউটপুটটি হ'ল:

code_output

যদিও উপরের আউটপুটে কেবল হলুদ সমান্তরাল রেখাগুলি (রাস্তার উভয় পাশের নিকটবর্তী বহুভুজগুলিতে অফসেট কার্ভগুলি) প্রয়োজন:

প্রকৃত আউটপুট প্রয়োজনীয় লাইন

কেউ আমাকে কীভাবে পছন্দসই আউটপুট পেতে পারেন তা বলতে পারেন?


আপনি কি সত্যিকারের আউটপুটটির চিত্রও যুক্ত করতে পারেন? এটি সমস্যা বুঝতে সহায়তা করে।
ঢাল

@ ফিল্ট: আমি প্রশ্নটি সম্পাদনা করেছি। আসল আউটপুটে সবেমাত্র আসল আউটপুট এবং প্রয়োজনীয় সমান্তরাল লাইন যুক্ত হয়েছে।
খাজলক

বিষয়টি আপনার ভাবার চেয়ে জটিল। তৃষ্ণার্ত আপনাকে রাস্তার কোন দিকে বাড়িগুলি রয়েছে তা খুঁজে বের করতে হবে। তবেই আপনি উভয় পক্ষের নিকটতম সন্ধান করতে পারেন । এখানে একটি পোস্ট রয়েছে যার সঠিক দিকটি সন্ধানের
টিল্ট করুন

বাস্তবে, এমন ঘটনা ঘটতে পারে যখন বিল্ডিংগুলি কেবল একদিকে থাকে (আমি এটিকে ব্যতিক্রম বলব)। আমি একবার আমার কাঙ্ক্ষিত আউটপুটটিতে পৌঁছতে পারলে ব্যতিক্রমগুলি পরিচালনা করতে আমার কোডটি পরিবর্তন করতে পারি। উপরে, আপনি এখনও উভয় পক্ষের বহুভুজ নির্মাণ দেখতে পাবেন। এই মুহুর্তে, আমার প্রয়োজনীয়তা হ'ল রাস্তার উভয় দিকে সমান্তরাল লাইন পাওয়া (যা আমি চিত্রে দেখিয়েছি তার মতো)। আপনার লিঙ্কটি সম্পর্কে, আমি সম্ভবত আমার পরবর্তী কোডটি উন্নত করতে উদাহরণ কোডটি ব্যবহার করতে পারি।
খাজলক

একটি জিনিস আমি দেখতে পাচ্ছি যে বাফারটি অতিরিক্ত কাজ করে। আপনি কেবল স্টডউইথিন ব্যবহার করতে পারেন এবং দূরত্ব হিসাবে 50 ব্যবহার করতে পারেন। (রাস্তাঘাট, ভবনগুলি নির্বাচন করুন যেখানে st_dwithin (রাস্তাঘাট, বিল্ডিংস, 50%))
জাবাল্ক

উত্তর:


1

আপনি যদি দূরত্ব সিটিইকে নিম্নরূপে পরিবর্তন করে থাকেন:

distance AS (
 SELECT 
  street_id,
  street_geom,
  MIN(ST_Distance(street_geom, geom)) as dist
 FROM selected_buildings
 GROUP BY street_id, street_geom
)

তারপরে প্রতিটি রাস্তার জন্য কেবল স্বল্পতম দূরত্বই ফিরে আসবে এবং সেই দূরত্বে এক জোড়া অফসেট লাইন তৈরি করা হবে।


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

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