পোস্টজিআইএস টেবিলের জন্য বাউন্ডিং বক্স


19

পোস্টজিআইএস-এ কোনও পুরো টেবিলের জন্য বাউন্ডিং বক্স পাওয়ার সহজ উপায় কি নেই?

উত্তর:



13

@Unddark উত্তর হিসাবে , ST_Exant কাজটি করবে, তবে মনে রাখবেন যে এটি জ্যামিতিটি ফেরায় না তবে a box2d। আপনার যদি জ্যামিতির ধরণের প্রয়োজন হয় তবে আপনার মতো কিছু ব্যবহার করা উচিত

SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;

এছাড়াও, আপনার যা প্রয়োজন তা যদি প্রতিটি সারিগুলির বাউন্ডিং বক্স পান তবে আপনি এটির মতো ST_Extentএকটি নকল ব্যবহার করতে পারেন GROUP BY:

SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;

অনুমান করা যে জিডটি টেবিলের প্রাথমিক কী

কিন্তু ST_Envelope একটি ভাল কাজ করতে হবে @ bugmenot123 মন্তব্য বিবৃত

SELECT ST_Envelope(geom) FROM your_table ;

1
আপনার যদি কোনও সংহতকরণ ছাড়াই প্রতিটি সারির জন্য একটি বাউন্ডিং বক্সের প্রয়োজন হয়, কেবল ব্যবহার করুন ST_Envelope! যদিও এটির জন্য জিজ্ঞাসা করা হয়েছিল তা নয়।
বাগম্যানোট 123

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

4

আর একটি সম্ভাবনা হ'ল ST_Envelopeফাংশনটি ব্যবহার করা , যা এসআরআইডি সহ একটি জ্যামিতি ফিরিয়ে দেয়,

এসT_ এনভেলপ - সরবরাহ করা জ্যামিতির সীমানা বাক্সকে উপস্থাপন করে এমন একটি জ্যামিতি ফিরিয়ে দেয়

, ST_Unionসমস্ত জ্যামিতির (বা তাদের নিজ নিজ খামের ইউনিয়ন) এর ইউনিয়ন পেতে সামগ্রিক ফাংশন সহ :

SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table

অথবা

SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table

দ্বিতীয় বিকল্পটি দ্রুত হওয়া উচিত কারণ এটি পৃথক জ্যামিতির খামগুলি ব্যবহার করে ইউনিয়ন পরিচালনা সহজ করে তোলে।

দেখতে উত্স


1
ST_Extent পন্থা মাত্রার যেমন সংখ্যার উপর বিশুদ্ধরূপে অপারেট করতে পারে এবং কোন জটিল জ্যামিতিক হিসাবগুলি হবে তা নয় দ্রুততর। আপনি যখনই পারেন এস এস ইউনিয়ন এড়িয়ে চলুন।
বাগম্যানোট 123

2

কোনও স্থানিক সংহতকরণ কার্যকর না করা দ্রুত হওয়া উচিত:

select
  min(ST_XMin(geom)) as l,
  min(ST_YMin(geom)) as b,
  max(ST_XMax(geom)) as r,
  max(ST_YMax(geom)) as t
from x

1
ST_Exant এছাড়াও স্থানিক কিছু করতে হবে না। এটি আমার ডেটা (k 400k বহুভুজ) এর জন্য আপনার পদ্ধতির চেয়ে 2-3 গুণ দ্রুত। সম্ভবত কারণ এটি একসাথে সব কিছু করতে পারে, তবে আপনার পদ্ধতির প্রতিটি ভূতিকার বিভিন্ন দিকের দিকে নজর দিতে হবে এবং তারপরে শেষ পর্যন্ত সমষ্টিগত।
বাগম্যানোট 123
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.