Bounding box হল যেকোনো mapping stack-এ সবচেয়ে সহজ, সবচেয়ে উপকারী spatial primitive। এটি চারটি সংখ্যা যা ল্যাটিচিউড এবং লংগিচিউড space-এ একটি rectangle বর্ণনা করে এবং আপনি ব্যবহার করা প্রায় প্রতিটি API call, GeoJSON file এবং map library-তে দেখা যায়।
এই গাইডে bounding box কী, আপনার জানা প্রয়োজন ফরম্যাট convention, production pattern যেখানে এটি কাজ করে এবং প্রতিটি ডেভেলপারকে অন্তত একবার ধরা খাওয়া সমস্যা ব্যাখ্যা করা হয়েছে।
সংজ্ঞা
Bounding box (bbox) হল সবচেয়ে ছোট axis-aligned rectangle যা কোনো feature বা point-এর সেট ধারণ করে। "Axis-aligned" মানে এর পাশগুলো ল্যাটিচিউড এবং লংগিচিউড axis বরাবর চলে; rectangle rotated নয়। Bbox চারটি সংখ্যা দ্বারা বর্ণনা করা হয়: পশ্চিম লংগিচিউড, দক্ষিণ ল্যাটিচিউড, পূর্ব লংগিচিউড এবং উত্তর ল্যাটিচিউড।
Paris-এর জন্য official municipal bbox মোটামুটি [2.224, 48.8156, 2.4699, 48.9022]। Mainland France-এর জন্য মোটামুটি [-5.142, 41.333, 9.560, 51.089]। পুরো planet-এর জন্য [-180, -90, 180, 90]।
Bbox সবসময় দুটি opposite corner। এটি non-rectangular shape বর্ণনা করতে পারে না, কিন্তু যেকোনো shape wrap করা rectangle বর্ণনা করতে পারে, যা দ্রুত spatial filtering-এর জন্য যথেষ্ট।
ফরম্যাট প্রশ্ন
System জুড়ে bbox-এর ফরম্যাট convention inconsistent, এবং inconsistency-ই বেশিরভাগ bbox bug-এর উৎস।
GeoJSON, OGC standard এবং বেশিরভাগ আধুনিক API: [west, south, east, north], সমতুল্যভাবে [minLng, minLat, maxLng, maxLat]। লংগিচিউড আগে, ল্যাটিচিউড দ্বিতীয়, উভয়ই WGS84-এ।
কিছু web mapping library (Leaflet, Mapbox GL bounds object): _southWest এবং _northEast corner সহ একটি LatLngBounds object। Lat আগে, তারপর lng।
অনেক পুরনো API এবং CSV export: [south, west, north, east] (lat আগে)। Spec পড়ুন।
Tile service এবং WMS: tile EPSG:3857-এ হলে projection-এর unit (Web Mercator metre, lat/lng নয়) এ bbox।
নিরাপদ নিয়ম: আপনার নিজের code-এ bare 4-element array কখনো ব্যবহার করবেন না। Named field সহ typed object-এ wrap করুন ({ west, south, east, north }) যাতে ক্রম explicit। API boundary-তে convert করুন।
Bounding Box কোথায় কাজ করে
Bbox হল সবচেয়ে দ্রুততম possible spatial filter। তিনটি classic ব্যবহার:
কোনো feature-এ map fit করা। ব্যবহারকারী search result-এ land করলে, আপনি map.fitBounds(bbox) call করেন এবং map zoom এবং pan করে appropriate padding সহ feature দেখায়। প্রতিটি আধুনিক map library এই primitive আছে।
Area দ্বারা API query filter করা। Database engine এবং search API bbox খুব efficiently index করে। "এই viewport-এ সব জায়গা দেখাও" এর মতো একটি query visible bbox server-এ পাঠায়, যা শুধুমাত্র matching record ফেরত দিতে spatial index ব্যবহার করে। এটি viewport-based search-এর ভিত্তি।
Autocomplete এবং geocoding bias করা। ব্যবহারকারীর current map bbox viewport bias হিসেবে pass করুন। Geocoder bbox-এর ভেতরের result বেশি weight করে, তাই New York viewport-এর ভেতরে "Liberty" টাইপ করলে বিশ্বের অন্য কোনো Liberty-র আগে Statue of Liberty ফেরত আসে।
একটি চতুর্থ, কম স্পষ্ট ব্যবহার: bbox হল vector tile system-এর bookkeeping unit। প্রতিটি tile জানা zoom-এ পরিচিত bbox cover করে এবং renderer সেগুলো দৃশ্যমান map-এ composite করে।
API কী ফেরত দেয়
বেশিরভাগ geocoding API প্রতিটি match-এর সাথে bbox ফেরত দেয়, কারণ এটি matched feature-এর আকার উভয় বলে (একটি দেশের bbox বিশাল, একটি ভবনের bbox ক্ষুদ্র) এবং map কীভাবে fit করতে হয়। "France"-এর geocoding response একটি national-scale bbox ফেরত দেয়; "10 Downing Street"-এর response একটি building-scale bbox ফেরত দেয়।
ফেরত আসা bbox-এর আকার precision-এর sanity check হিসেবে ব্যবহার করতে পারেন। "country" precision-এ match করা query যদি building-sized bbox ফেরত দেয় সেটি সন্দেহজনক। "rooftop" precision-এ match করা query যদি city-sized bbox ফেরত দেয় সেটি broken।
Antimeridian অতিক্রমকারী Bounding Box
একটি subtle সমস্যা: ১৮০-ডিগ্রি antimeridian অতিক্রমকারী bbox (যেমন রাশিয়া, Pacific, Fiji-এর জন্য) west < east হিসেবে বর্ণনা করা যায় না কারণ এটি wrap around করে। Convention ভিন্ন:
- কিছু system এই ধরনের bbox দুটি টুকরায় split করে, antimeridian-এর প্রতিটি পাশের জন্য একটি।
- কিছু system
west > eastঅনুমতি দেয় এবং "wrap around" হিসেবে interpret করে। - GeoJSON wrap-around অনুমতি দেয় কিন্তু interoperability-র জন্য split করার সুপারিশ করে।
বেশিরভাগ European বা single-country use case-এর জন্য এটি কখনো আসে না। Global product (airline route, shipping, fisheries) তৈরি করলে explicitly antimeridian case test করুন।
Bounding Box বনাম Polygon
Bbox হল একটি rectangle। বাস্তব feature কদাচিৎ rectangular। France-এর bbox Atlantic Ocean এবং Spain-এর অংশ অন্তর্ভুক্ত করে। Manhattan-এর bbox New Jersey এবং Queens-এর অংশ অন্তর্ভুক্ত করে।
Rectangle approximation যথেষ্ট হলে (map fit, দ্রুত pre-filtering), bbox সঠিক tool। একটি বিন্দু আসলে feature-এর ভেতরে কিনা জানতে হলে, real boundary geometry-র বিপরীতে point-in-polygon গণিত দরকার। একটি সাধারণ production pattern: আগে bbox দিয়ে filter করুন (দ্রুত, indexable, ৯৯% record বাদ দেয়), তারপর survivors-এ point-in-polygon চালান (ধীর কিন্তু নির্ভুল)। এই দুই-পর্যায়ের approach হল বেশিরভাগ spatial database-এর আড়ালে কাজ করার উপায়।
Computer Vision-এ Bounding Box
Object detection, robotics বা 3D rendering-এ "oriented bounding box" উল্লেখ দেখতে পাবেন। এটি ভিন্ন concept: OBB feature axis-aligned box-এর চেয়ে আরও tightly fit করতে rotated। Geospatial কাজে axis-aligned bbox হল standard কারণ তারা cleanly index করে, tile grid-এ slot করে এবং overlap test করা trivial। Oriented bbox mapping-এ বিরল কিন্তু computer vision-এ সাধারণ।
MapAtlas কীভাবে Bounding Box ব্যবহার করে
Geocoding API এবং Search API-এর প্রতিটি result WGS84 লংগিচিউড/ল্যাটিচিউড ক্রমে matched feature-এর extent সহ একটি bbox field ফেরত দেয়, ঠিক সেই ফরম্যাট GeoJSON এবং আধুনিক map library আশা করে। Geocoding-কে viewport-এ bias করতে একটি boundary.rect.* parameter pass করতে পারেন, এবং Isochrone API নিজে গণনা না করে map fit করতে পারেন তার travel-time polygon wrapping bbox সহ ফেরত দেয়।
GeoJSON এবং bbox কীভাবে বৃহত্তর spatial data picture-এ fit করে তার হাতে-কলমে পরিচয়ের জন্য What Is GeoJSON এবং What Is a Geocode দেখুন।
সাধারণ জিজ্ঞাসা
Bounding box কী?
Bounding box (প্রায়ই bbox সংক্ষেপ করা হয়) হল সবচেয়ে ছোট axis-aligned rectangle যা একটি geographic feature বা point-এর সেট ধারণ করে। এটি চারটি সংখ্যা দ্বারা বর্ণনা করা হয়: minimum এবং maximum লংগিচিউড এবং minimum এবং maximum ল্যাটিচিউড। Bounding box mapping-এ সর্বত্র ব্যবহৃত হয়: একটি feature-এ map fit করতে, area দ্বারা database query filter করতে, একটি tile-এর extent define করতে এবং geocoding result কোনো region-এ bias করতে। এগুলো production code-এ সবচেয়ে সহজ, দ্রুততম spatial primitive।
Bounding box-এর standard ফরম্যাট কী?
GeoJSON এবং বেশিরভাগ আধুনিক API [west, south, east, north] ক্রম ব্যবহার করে, [minLng, minLat, maxLng, maxLat] হিসেবেও লেখা হয়। এটিই আপনার default হওয়া উচিত। কিছু পুরনো API এবং CSV export [south, west, north, east] (অর্থাৎ lat আগে) ব্যবহার করে এবং কিছু চারটি আলাদা field ব্যবহার করে। সর্বদা নির্দিষ্ট API বা ফরম্যাটের docs যাচাই করুন।
Bounding box এবং oriented bounding box-এর মধ্যে পার্থক্য কী?
নিয়মিত bounding box axis-aligned: এর পাশগুলো ল্যাটিচিউড এবং লংগিচিউড axis বরাবর চলে। Oriented bounding box (OBB, computer vision এবং game engine-এ সাধারণ) feature আরও tightly fit করতে rotated, যা ছোট area দেয় কিন্তু জটিল গণিত। Geospatial কাজে axis-aligned bbox হল standard কারণ তারা spatial database-এ cleanly index করে, tile grid-এ slot করে এবং overlap সহজে test করা যায়।
Geocoding API filter করতে bounding box কীভাবে ব্যবহার করব?
Bbox একটি viewport bias parameter হিসেবে pass করুন। MapAtlas Geocoding API-এ আপনি `boundary.rect.min_lon`, `boundary.rect.min_lat`, `boundary.rect.max_lon`, `boundary.rect.max_lat` পাঠান এবং geocoder সেই area-র ভেতরের result বাইরের চেয়ে বেশি rank করে। এটি map-এর ভেতরে autocomplete-এর জন্য অপরিহার্য: ব্যবহারকারী pan করার সাথে, আপনি bbox update করেন যাতে suggestion তারা যা দেখছে তার সাথে মিলে। Bbox bias ছাড়া, 'Springfield'-এর জন্য autocomplete সর্বোচ্চ global popularity-র Springfield ফেরত দেয়, যা বিরলভাবে ব্যবহারকারী যা বোঝায় তা।

