পোস্টজিআইএসে একতরফা বাফার বা সমান্তরাল লাইন তৈরি করছেন?


19

আমি পোস্টজিআইজে তথাকথিত একতরফা বাফার বা সমান্তরাল লাইন তৈরির জন্য একটি উপায় খুঁজছি। উদাহরণ: 1. বাফার, 2. এক-পক্ষ, 3. উভয় পক্ষ

বিকল্প পাঠ

আমি ২০০৯ সাল থেকে মেইলিং লিস্ট এবং জিইওএস-এ প্রয়োগ করা হয়েছে এমন তথ্য থেকে কিছু আলোচনা খুঁজে পেয়েছি , তবে বর্তমান পোস্টজিআইএসের স্থিতি সম্পর্কে কিছুই নেই।

যদি ফাংশনটি এখনও বাস্তবায়িত হয় না, আপনি কি কোনও কাজের ক্ষেত্র জানেন? একটি সাধারণ বাফারের একটি দিক কেটে ফেলা সম্ভব?


সুতরাং আপনি অটোক্যাডে "অফসেট" এর সমতুল্য সন্ধান করছেন?
dassouki

@ ডাসৌকি: দুঃখিত, আমি অটোক্যাড জানি না। তবে আমি মনে করি ইউএমএন ম্যাপসভারের একটি "অফসেট" বিকল্প রয়েছে যা আমি যা খুঁজছি তা করবে।
আন্ডার ডার্ক

Table০০ টি রেখা থাকা টেবিল থেকে কীভাবে একতরফা বাফার বা সমান্তরাল লাইন তৈরি করবেন?

সাইটে স্বাগতম। যদি উত্তরগুলির বর্তমান সেটটি আপনার সমস্যার সমাধান না করে তবে আপনি এটি একটি নতুন প্রশ্ন হিসাবে খোলা উচিত (এবং কেন এই প্রশ্নটি আপনার সমস্যার উত্তর দেয় না) তা জানান। সাইটের ফর্ম্যাটের মধ্যে এই বিবৃতি দেওয়ার পক্ষে এটি উপযুক্ত জায়গা নয়, কারণ এটি প্রশ্নের উত্তর নয়।
অ্যান্ডি ডাব্লু

আমি কীভাবে একটি বহুবিধ টেবিলে একটি সমান্তরাল রেখা তৈরি করতে পারি?
ফিলিপ কস্তা

উত্তর:


13

যথাযথ একতরফা বাফারগুলি 1.5 এ অবতরণ করার কথা ছিল , তবে এটি আমার কাছে মনে হয় যে শৈলীর অবতরণ করার সময় পার্শ্ববর্তীতা এটি তৈরি করতে পারেনি however তবে একটি বর্তমান প্যাচসেট রয়েছে যা GEOSSingleSidedBufferপ্রত্যাশা অনুযায়ী একতরফা বাফারকে প্রকাশ করে এবং সম্পাদন করে , নামে ST_OffsetCurve; টিকিট # 413 আরও পটভূমি দেখুন । ব্যাবহৃত হচ্ছে:

select ST_AsText(ST_OffsetCurve(
ST_GeomFromText('LINESTRING(10 10,10 20, 20 20 )'),
1,'right', 'join=mitre mitre_limit=5.0'));
--------------
LINESTRING(20 19,11 19,11 10)

হাই আমি এই সমাধানটি ব্যবহার করার চেষ্টা করছি তবে প্রায়শই পোস্টগিস ব্যবহার করি না - আমি এই কোয়েরিটি পরীক্ষা করেছি এবং কিছু আউটপুট মান পেয়েছি তবে কীভাবে আমি সেগুলি বৈশিষ্ট্যগুলিতে অনুবাদ করব? আমি শেষের দিকে লাইনগুলি চাই, হয় মূল টেবিলের অংশ হিসাবে, বা একটি নতুন একটি his এটি আমার প্রশ্ন: এস এসএসটেক্সট (এস_অফসেট কার্কভে (টেস্ট_ডাটা_জম, টেস্ট_ডেটা_বফার_ডিস, 'জয়েন = মিটার মাইট্রে_লিট = 5.0')) নির্বাচন করুন) টেস্ট_ডেটা_ থেকে;
kflaw

@ কেফ্লাও - আপনি সম্ভবত এটি ইতিমধ্যে খুঁজে পেয়েছেন, তবে আপনার সন্ধানের শুরুতে যুক্ত করতে হবে: "নতুন হিসাবে তৈরি করুন" বা একটি দর্শনের জন্য, "নির্বাচিত বিবৃতি অনুসারে নিউ ভিউ তৈরি করুন বা প্রতিস্থাপন করুন"।
জবল্ক

4

এই নমুনা একটি লাস্টেরিংয়ের উভয় পাশে দুটি বহুভুজ তৈরি করে। এটি পোস্টজিআইএস 1.5 বা তার বেশি প্রয়োজন। আমি নিশ্চিত নই যে এটি যে লাইনগুলি তাদের অতিক্রম করে তাদের মোকাবেলা করতে কতটা ভাল।

SELECT ST_AsText(geom)

FROM ST_Dump ((

SELECT 
  ST_Polygonize(GEOMUNION(ST_Boundary(ST_Buffer(the_geom, 0.5, 'endcap=flat join=round')), the_geom)) AS buffer_sides 
FROM
  (SELECT ST_GeomFromText('LINESTRING(1 1, 1 5, 5 5)') AS the_geom) AS table1

));

এটি ফলাফল:

                        st_astext

------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------
 POLYGON((0.5 5,0.509607359798385 5.09754516100806,0.538060233744357 5.19134171618254,0.584265193848727 5.2777851165098,
0.646446609406726 5.35355339059327,0.722214883490199 5.41573480615127,0.808658283817455 5.46193976625564,0.9024548389919
36 5.49039264020162,1 5.5,5 5.5,5 5,1 5,1 1,0.5 1,0.5 5))
 POLYGON((5 5,5 4.5,1.5 4.5,1.5 1,1 1,1 5,5 5))
(2 rows)

কোড নিম্নলিখিত পদ্ধতিতে কাজ করে:

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

ভবিষ্যতে স্ব-ক্রসিং লাইনগুলি মোকাবেলায় এটি উন্নত হতে পারে।

একটি ফ্লাফ এন্ডক্যাপ সহ একটি বাফারড লাস্টারিং


3

এই পরিবর্তনটি দুটি সমান্তরাল লাইনস্ট্রিং তৈরি করে। এটি পোস্টজিআইএস 1.5 বা তার বেশি প্রয়োজন।

প্রয়োজনীয় জ্যামিতি বা ডাব্লুপিটি, এবং বাফারে দূরত্ব


SELECT astext(
     st_removepoint( 
     st_removepoint(        st_linemerge(ST_Difference(st_boundary(geom),ST_GeomFromText('LINESTRING(1 1, 1 5, 5 5)')))         ,0),
      st_npoints(st_linemerge(ST_Difference(st_boundary(geom),ST_GeomFromText('LINESTRING(1 1, 1 5, 5 5)'))))-2)

    ) as parallel
    FROM ST_Dump ((
    SELECT 
    ST_Polygonize(st_union(ST_Boundary(ST_Buffer(geometria, 0.5, 'endcap=flat join=mitre mitre_limit=5.0')), geometria)) AS buffer_sides 
    FROM
    (SELECT ST_GeomFromText('LINESTRING(1 1, 1 5, 5 5)') 
        AS geometria) AS tabla))

-------------- ফলাফল

"LINESTRING(0.5 1,0.5 5.5,5 5.5)"
"LINESTRING(5 4.5,1.5 4.5,1.5 1)"


0

কারণ আমি এখনও এখানে মন্তব্য করতে পারি না, আমি এই উত্তরটি যুক্ত করছি

এসসিডাব্লু সেরা উত্তর দেয়,

select ST_AsText(ST_OffsetCurve(
ST_GeomFromText('LINESTRING(10 10,10 20, 20 20 )'),
1, 'right', 'join=mitre mitre_limit=5.0'));
--------------
LINESTRING(20 19,11 19,11 10)

তবে ফাংশন পরিবর্তনের মতো দেখে মনে হচ্ছে
http://postgis.refferences.net/docs/ST_OffsetCurve.html

এখন 'right'প্যারামিটার প্রয়োজন হয় না। ইতিবাচক দূরত্ব ব্যবহার করে বাম দিক তৈরি হবে এবং নেতিবাচক দূরত্ব ডান দিকটি তৈরি করবে

এছাড়াও আমার পোস্টগিসের সাথে কোনও প্যাচ দরকার নেই

SELECT PostGIS_full_version();
"POSTGIS="2.0.3 r11132" GEOS="3.3.8-CAPI-1.7.8" 
PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.2, 
released 2012/10/08" LIBXML="2.7.8" LIBJSON="UNKNOWN" RASTER"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.