গিলস গার্ডাম তার উত্তরের জন্য ধন্যবাদ জানায়, তবে এটি কেবল দ্রাঘিমাংশকে নয় অক্ষাংশকেই সম্বোধন করে। একটি সম্পূর্ণ সমাধানটি দ্রাঘিমাংশের জন্য প্রয়োজনীয় জুম স্তর এবং দ্রাঘিমাংশের জন্য প্রয়োজনীয় জুম স্তর গণনা করতে হবে এবং তারপরে দুটিটির আরও ছোট (আরও বাইরে) নেওয়া উচিত।
এখানে একটি ফাংশন যা অক্ষাংশ এবং দ্রাঘিমাংশ উভয়ই ব্যবহার করে:
function getBoundsZoomLevel(bounds, mapDim) {
var WORLD_DIM = { height: 256, width: 256 };
var ZOOM_MAX = 21;
function latRad(lat) {
var sin = Math.sin(lat * Math.PI / 180);
var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
}
function zoom(mapPx, worldPx, fraction) {
return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);
}
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;
var lngDiff = ne.lng() - sw.lng();
var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;
var latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
var lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);
return Math.min(latZoom, lngZoom, ZOOM_MAX);
}
Demo on jsfiddle
পরামিতি:
"সীমানা" প্যারামিটার মান একটি google.maps.LatLngBounds
বস্তু হওয়া উচিত ।
"ম্যাপডিম" পরামিতি মানটি "উচ্চতা" এবং "প্রস্থ" বৈশিষ্ট্যযুক্ত একটি বস্তু হওয়া উচিত যা মানচিত্রটি প্রদর্শন করে এমন ডিওএম উপাদানটির উচ্চতা এবং প্রস্থকে উপস্থাপন করে। আপনি প্যাডিং নিশ্চিত করতে চাইলে আপনি এই মানগুলি হ্রাস করতে চাইতে পারেন। এটি হ'ল আপনি চাইবেন না যে সীমান্তের মধ্যে মানচিত্রের চিহ্নিতকারীগুলি মানচিত্রের প্রান্তের খুব কাছাকাছি থাকুক।
আপনি jQuery লাইব্রেরি ব্যবহার করছেন, mapDim
মান নিম্নলিখিত হিসাবে প্রাপ্ত করা যেতে পারে:
var $mapDiv = $('#mapElementId');
var mapDim = { height: $mapDiv.height(), width: $mapDiv.width() };
আপনি যদি প্রোটোটাইপ লাইব্রেরি ব্যবহার করেন তবে ম্যাপডিম মানটি নীচের হিসাবে পাওয়া যাবে:
var mapDim = $('mapElementId').getDimensions();
ফেরত মূল্য:
রিটার্ন মান হ'ল সর্বাধিক জুম স্তর যা এখনও সম্পূর্ণ সীমা প্রদর্শন করবে। এই মানটি 0
অন্তর্ভুক্ত সহ সর্বোচ্চ জুম স্তরের মধ্যে হবে।
সর্বাধিক জুম স্তরটি 21. (আমি বিশ্বাস করি এটি গুগল ম্যাপস এপিআই v2 এর জন্য মাত্র 19
ব্যাখ্যা:
গুগল মানচিত্র একটি মার্কেটর প্রক্ষেপণ ব্যবহার করে। একটি মার্কেটর প্রক্ষেপণে দ্রাঘিমাংশের রেখাগুলি সমানভাবে ব্যবধানযুক্ত, তবে অক্ষাংশের রেখাগুলি নয়। নিরক্ষীয় रेखा থেকে মেরুতে যাওয়ার সময় অক্ষাংশের রেখার মধ্যকার দূরত্ব বৃদ্ধি পায়। মেরুতে পৌঁছানোর সাথে সাথে দূরত্বটি অনন্তের দিকে ঝুঁকছে। গুগল মানচিত্রের মানচিত্রটি, প্রায় 85 ডিগ্রি উত্তর বা প্রায় -85 ডিগ্রি দক্ষিণের নীচে অক্ষাংশ প্রদর্শন করে না। ( রেফারেন্স ) (আমি +/- 85.05112877980658 ডিগ্রিতে প্রকৃত কাটফোন গণনা করি))
এটি দ্রাঘিমাংশের চেয়ে অক্ষাংশের জন্য সীমার জন্য ভগ্নাংশের গণনাটিকে আরও জটিল করে তোলে। অক্ষাংশ ভগ্নাংশ গণনা করতে আমি উইকিপিডিয়া থেকে একটি সূত্র ব্যবহার করেছি । আমি ধরে নিচ্ছি এটি গুগল ম্যাপের ব্যবহৃত প্রোজেকশনের সাথে মেলে। সর্বোপরি, আমি উপরে উল্লিখিত গুগল ম্যাপস ডকুমেন্টেশন পৃষ্ঠাতে একই উইকিপিডিয়া পৃষ্ঠার লিঙ্ক রয়েছে।
অন্যান্য নোট:
- জুম স্তরগুলি সর্বোচ্চ জুম স্তর থেকে শুরু করে। জুম স্তর 0 হ'ল মানচিত্রটি পুরোপুরি জুম আউট। উচ্চতর স্তরগুলি আরও মানচিত্র জুম করে। ( রেফারেন্স )
- জুম স্তর 0 এ পুরো পৃথিবী এমন একটি অঞ্চলে প্রদর্শিত হতে পারে যা 256 x 256 পিক্সেল। ( রেফারেন্স )
- প্রতিটি উচ্চতর জুম স্তরের জন্য একই ক্ষেত্রের প্রস্থ এবং উচ্চতা উভয়কে দ্বিগুণ করে একই ক্ষেত্রটি প্রদর্শন করতে প্রয়োজনীয় পিক্সেলের সংখ্যা। ( রেফারেন্স )
- মানচিত্রগুলি দ্রাঘিমাংশীয় দিকের মোড়কে, তবে অক্ষাংশীয় পথে নয়।