শতকরা একটি পোস্টজিআইএস জ্যামিতি বৃদ্ধি করা


10

আমি পোস্টজিআইএস জ্যামিতির আশেপাশে একটি বাফার যুক্ত করার উপায় খুঁজছি, তবে বাফারের আকার জ্যামিতির আকারের উপর নির্ভর করবে। অর্থাত, আমি চাই প্রতিটি জ্যামিতি 5% দ্বারা বড় করা হোক।

ধারণাটি হল আমি জ্যামিতিগুলি ছেদ করার জন্য খুঁজছি, তবে আমি বিবেচনায় নিতে চাই এমন প্রত্যেকের সাথে যুক্ত 5% অবধি ত্রুটি থাকতে পারে।

কেউ কি এই সম্পর্কে ভাল উপায় জানেন?

ডাটাবেসটিতে মিলিয়ন মিলিয়ন সারি রয়েছে, তাই আমি এটিকে মোটামুটি দ্রুত হওয়া পছন্দ করি।


2
৫% কী? আপনি বহুভুজ ব্যবহার করছেন মনে করে, এটি কি সর্বকেন্দ্র প্রস্থের 5%, সংকীর্ণ প্রস্থ, সীমানা বাক্স, সেন্ট্রয়েড থেকে একটি শীর্ষের দূরত্ব ...? আপনি যদি পয়েন্ট বা লাইন সম্পর্কে কথা বলছেন, তবে এটি আরও কম বোধ করে!
মিরসিভিকিং

আমার অনুমান - ভার্টেক্স-সেন্ট্রয়েড দূরত্ব - বা সম্ভবত এলাকায় 5% বৃদ্ধিও ঠিক হবে। জ্যামিতিটি যদি স্ক্রিন করা হয় তবে বাউন্ডিং বক্সটি পূরণ করে বাউন্ডিং বক্সটি বাড়ানো ঠিক আছে। সমস্ত জ্যামিতিগুলি বহুভুজ (বিশাল সংখ্যাগরিষ্ঠ চতুর্ভুজ))
জেমস বেকার

উত্তর:


8

মন্তব্যগুলি নির্দেশ করে যে 5% উচ্চ নির্ভুলতার সাথে অর্জন করার প্রয়োজন নেই। (যদি এটা আছে, এটি একটি নিতে হবে দীর্ঘ সময় একটি মিলিয়ন বহুভুজ বাফার!) সুতরাং আমরা ডাকা যাবে পিজা নীতি : সুসংগত একটি 2 ডি বৈশিষ্ট্য একটি গুণক দ্বারা rescaling একটি rescales তার এলাকার একটি ^ 2।

যুক্তিটি কীভাবে চলে যায় তা এখানে:

  • যখন আকৃতিটি খুব বেশি সংশ্লেষিত হয় না - বিশেষত যদি এটি উত্তল হয় - তবে বাফারিংয়ের ফলে কেন্দ্রীয় বিন্দুর চারপাশে আকৃতিটি পুনরুদ্ধারের সাথে তুলনীয় ফলাফল পাওয়া যায়। (যদিও এটি বুঝতে গুরুত্বপূর্ণ যে বাফারিং ডিস্ক ব্যতীত অন্য কোনও আকারের জন্য পুনরুদ্ধারের সমতুল্য নয় some কিছু অবতল আকারের জন্য, উদ্ধারের মাধ্যমে গণনা করা একটি "বাফার" আসলে আসল আকারের অংশগুলি অন্তর্ভুক্ত নাও করতে পারে! সুতরাং শেষ পর্যন্ত আমরা আকারের একটি জেনুইন বাফার গণনা করব , তবে কেবলমাত্র কতটা বাফার করতে হবে তা অনুমান করার জন্য এই আনুমানিক সমতুল্যতাটিকে হিউরিস্টিক হিসাবে ব্যবহার করছি ))

  • যদি বাফার করা অঞ্চলটি 5% বেশি হতে হয়, তবে উদ্ধার করার পরিমাণটি স্কয়ার্ট (1 + 5/100) হওয়া উচিত, যা 1.025 এর কাছাকাছি: এটি হ'ল আমাদের সমস্ত দিকটি 2.5% দ্বারা প্রসারিত করতে হবে ।

  • সমানভাবে, আমরা যদি একটি "ব্যাস" (আড়াআড়ি একটি সাধারণ দূরত্ব সমান) হিসাবে আকৃতিটি মনে করি তবে এর ব্যাসার্ধ 2.5% বৃদ্ধি করা উচিত। এটি ব্যাসের 2.5% / 2 = 1.25% এর সমান।

  • আকারের সীমানা বাক্স থেকে আমরা একটি সাধারণ ব্যাস অনুমান করতে পারি। বাক্সের পাশের দৈর্ঘ্যের একটি গাণিতিক বা জ্যামিতিক গড় ব্যবহার করুন, বলুন।

এটি নিম্নলিখিত কর্মপ্রবাহের পরামর্শ দেয়:

  1. আকৃতির সীমানা বাক্সটি পান।

  2. যাক বাক্সের দিকে লেন্থ গড় হও।

  3. ই এর 1.25% দ্বারা আকারটি বাফার করুন ; যা (5/100) / 4 * ই এর মধ্যে দিয়ে

যেহেতু 1 এবং 2 পদক্ষেপগুলির জন্য খুব কম গণনা প্রয়োজন, এটি নিজেকে সবচেয়ে দ্রুত সমাধানের অন্যতম হিসাবে দ্রুত প্রস্তাব দেয়। নির্ভুলতার চেক হিসাবে, আপনি (অবশ্যই) বাফার্ড শেপের ক্ষেত্রগুলি গণনা করতে পারেন এবং তাদের মূল অঞ্চলগুলির সাথে তুলনা করতে পারেন যে তারা কাঙ্ক্ষিত 5% বৃদ্ধিতে কত ঘনিষ্ঠভাবে আসে see কখনও কখনও বাফারযুক্ত অঞ্চলগুলি 5% এরও বেশি বেশি হবে তবে এটি খুব কমই হবে এবং তাদের পক্ষে প্রশংসনীয় কম হওয়া অসম্ভব।

উদাহরণ

একটি চেক এবং চিত্র হিসাবে, আসুন কয়েকটি সহজ আকার বিবেচনা করা যাক।

  1. ব্যাসার্ধ একটি ডিস্ক দৈর্ঘ্য 2 পক্ষের সঙ্গে একটি সীমান্ত বক্স রয়েছে । আমাদের সূত্র গণনা = (5/100) / 4 * 2 * আর = আর / 40. বাফার আকারটি স্পষ্টতই ব্যাসার্ধের r + r / 40 = 1.025 আর এর একটি কেন্দ্রীভূত ডিস্ক । পুরাতন অঞ্চলটি পাই * আর ^ 2 ছিল যখন নতুন অঞ্চলটি পাই * (1.025 আর ) ^ 2 = পিআই * 1.0506 * আর ^ 2, যা 5.06% বেশি।

  2. পক্ষের লেন্থ এর স্থানাঙ্ক অক্ষ সমান্তরাল সঙ্গে একটি আয়তক্ষেত্র r এবং গুলি দেয় = ( + + গুলি ) / 2। আয়তক্ষেত্রটি বাফারিংয়ের অতিরিক্ত ক্ষেত্রটি প্রস্থের চারটি আয়তক্ষেত্র (5/100) / 4 = / 80 = ( আর + এস ) / 160 থেকে কোণার কোণে -80 এর ব্যাসার্ধের পাশাপাশি চারটি ত্রৈমাসিক বৃত্তাকার সীমানা থেকে আসে । কোয়ার্টারের চেনাশোনাগুলিকে অবহেলা করা, যা অন্যান্য অঞ্চলের তুলনায় ছোট হবে, মোট নতুন ক্ষেত্র সমান

    2 ( আর + এস ) * ( আর + এস ) / 160 = ( আর ^ 2 + এস ^ 2 + 2 আর * এস ) / 80।

    যখন আরগুলি খুব আলাদা না হয়, আমরা r ^ 2 + s ^ 2 আনুমানিক 2 আর * এস হিসাবে নির্ধারণ করতে পারি । এই সান্নিধ্যটি মোট নতুন ক্ষেত্রটিকে উদ্দেশ্য হিসাবে r * s এর মূল ক্ষেত্রের 4 r * s / 80 = 5% সরল করে ।


4

আমার মনে হয় আপনি ST_Scale ( http://postgis.net/docs/ST_Scale.html ) এবং ST_Translate ( http://postgis.net/docs/ST_Translate.html ) এর সংমিশ্রণটি ব্যবহার করতে চান । পোস্টজিআইএস ইন অ্যাকশনে এবং অধ্যায় ৮ এর মতোই এর একটি উদাহরণ রয়েছে If আপনার কাছে বইটি না থাকলে আপনি এই অধ্যায়টির কোডটি এখানে ডাউনলোড করতে পারেন:

http://www.postgis.us/chapter_08

বই থেকে স্নিপেট উদাহরণ 8.26 দেখুন:

    -- Listing 8.26 Combining Scale and Translation to maintain centroid
    SELECT xfactor, yfactor, 
       ST_Translate(ST_Scale(hex.the_geom, xfactor, yfactor), 
       ST_X(ST_Centroid(the_geom))*(1 - xfactor), 
       ST_Y(ST_Centroid(the_geom))*(1 - yfactor) ) As scaled_geometry
    FROM 
 ( SELECT ST_GeomFromText('POLYGON((0 0,64 64,64 128,0 192,-64 128,-64 64,0 0))') As the_geom)  As hex
    CROSS JOIN (SELECT x*0.5 As xfactor 
        FROM generate_series(1,4) As x) As xf
    CROSS JOIN (SELECT y*0.5 As yfactor
        FROM generate_series(1,4) As y) As yf;

কাজ করে। এখন এটিও আছে বলে মনে হচ্ছে ST_Transscaleতবে কোনওভাবেই কীভাবে কীভাবে এটি করা যায় তা আমি বুঝতে পারি না ...
n1000

0

পার্টিতে এটি খুব দেরি হয়ে গেছে তবে আমি সম্প্রতি একটি কাস্টম পোস্টজিআইএস ফাংশন তৈরি করেছি যা এটি করে, পাশাপাশি প্রয়োজনে এটি সঙ্কুচিত করে:

ST_Dilate

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