কিভাবে ST_PointOnSurface গণনা করা হয়?


21

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

পোস্টজিআইএস-এর এই ভূমিকাটি একটি দুর্দান্ত তুলনা এবং এর বিপরীতে সরবরাহ ST_Centroidকরে ST_PointOnSurfaceএবং বলেছে যে "[ST_PointOnSurface] সেন্ট্রয়েড অপারেশনের চেয়ে উল্লেখযোগ্য পরিমাণে বেশি ব্যয়বহুল"।

কীভাবে ST_PointOnSurfaceগণনা করা হয় তার আরও বিশদ ব্যাখ্যা আছে ? আমি ব্যবহার করছি ST_Centroid, তবে আমার ডেটাতে এমন কিছু প্রান্তের মুখোমুখি হয়েছি যেখানে সেন্ট্রয়েড জ্যামিতির বাইরে। আমি বিশ্বাস করি যে ST_PointOnSurfaceএটি সঠিক বিকল্প, তবে ফাংশনটির নাম এবং ডকুমেন্টেশনটি অনিশ্চয়তার জায়গা ছেড়ে দেয়।

আরও, ST_PointOnSurfaceসেন্ট্রয়েড ইতিমধ্যে জ্যামিতির মধ্যে থাকা থাকলেও কি গণনার ব্যয় ব্যয় হয়?


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

জিআইএস.এস. এই প্রশ্নটি কি সেখানে স্থানান্তরিত করার কোনও উপায় আছে? উভয় ফাংশন কেন বিদ্যমান তা আমি বুঝতে পারি। আমি নামটি বিভ্রান্তিকর বলে মনে করি কারণ বহুভুজ গমেট্রিগুলির সাথে আমি যে পৃষ্ঠায় কাজ করছি তার পৃষ্ঠতলে অনেকগুলি পয়েন্ট রয়েছে। যাইহোক, এই পয়েন্টগুলির মধ্যে কেবল একটি ছোট উপসেটই আমার উদ্দেশ্যটি পরিবেশন করে। আমি জানতে চাই যে আমি একটি পয়েন্ট পাচ্ছি যা আমি এটি কীভাবে ব্যবহার করতে চাই তার জন্য বোধগম্য।

উত্তর:


24

কয়েকটি পরীক্ষার উপর ভিত্তি করে, আমি মনে করি ST_PointOnSurface()জ্যামিতিটি যদি বহুভুজ হয়:

  1. বহুভুজটির উত্তর ও দক্ষিণ প্রান্তের মাঝখানে অর্ধপথের মধ্যে একটি পূর্ব-পশ্চিম রশ্মির সন্ধান করুন।
  2. বহুভুজকে ছেদ করে এমন রশ্মির দীর্ঘতম বিভাগটি সন্ধান করুন।
  3. অর্ধ-উপায়ে থাকা বিন্দুটি সেগমেন্টের সাথে ফিরে করুন।

এটি বোধগম্য নয়, সুতরাং এখানে একটি বহুভুজ একটি স্কেচ রয়েছে যা একটি রে দিয়ে একটি উত্তর এবং দক্ষিণ অংশে বিভক্ত করেছে:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

সুতরাং, ST_PointOnSurface()এবং ST_Centroid()সাধারণত বিভক্ত বহুভুজ এমনকি বিভিন্ন পয়েন্ট হয়।

নামটির "পৃষ্ঠ" এর একমাত্র কারণ, আমি মনে করি, জ্যামিতির যদি 3 ডি লাইন থাকে তবে ফলাফলটি কেবল শিখার এক হতে পারে।

আমি সম্মত হব যে আরও ব্যাখ্যা (এবং আরও ভাল নামকরণ) কার্যকর হত এবং আশা করি কোনও জিইওএস প্রোগ্রামার বিষয়টি সম্পর্কে আরও কিছু আলোকপাত করতে পারে।


3
এ খুঁজছি libgeos কোড , আমি বিশ্বাস করি আপনি ঠিক। অনুভূমিক দ্বিখণ্ডকটি পাওয়া যায়, তারপরে আরও প্রশস্ত ছেদটির মধ্যবিন্দু ব্যবহৃত হয়।
মজব্রায়েন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.