Maps JavaScript API v2 ২৬ মে, ২০২১ থেকে আর উপলভ্য নেই। এর ফলে, আপনার সাইটের v2 ম্যাপ কাজ করা বন্ধ করে দেবে এবং
JavaScript সংক্রান্ত সমস্যা দেখাবে। আপনার সাইটে ম্যাপ ব্যবহার করা চালিয়ে যেতে, Maps JavaScript API v3-এ মাইগ্রেট করুন। এই নির্দেশিকা আপনাকে প্রসেসটি সম্পূর্ণ করতে
সাহায্য করবে।
এক নজরে
প্রতিটি অ্যাপ্লিকেশনের মাইগ্রেশন প্রসেস কিছুটা আলাদা হবে;
তবে, কিছু ধাপ আছে যা সব প্রোজেক্টের ক্ষেত্রে একই:
- নতুন 'কী' পান। Maps JavaScript API এখন 'কী' ম্যানেজ করার জন্য
Google Cloud কনসোল ব্যবহার করে। আপনি এখনও v2 কী ব্যবহার করলে, মাইগ্রেশন শুরু করার আগে আপনার
নতুন API কী পেতে ভুলবেন না।
- আপনার API বুটস্ট্র্যাপ আপডেট করুন। বেশিরভাগ অ্যাপ্লিকেশন নিম্নলিখিত কোড ব্যবহার করে
Maps JavaScript API v3 লোড করবে:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
- আপনার কোড আপডেট করুন। কতটা পরিবর্তন করতে হবে তা আপনার অ্যাপ্লিকেশনের
উপর নির্ভর করে। সাধারণত যেসব পরিবর্তন করা হয়:
- সবসময় google.maps নেমস্পেস রেফারেন্স হিসেবে ব্যবহার করুন। v3-তে,
সব Maps JavaScript API কোড গ্লোবাল নেমস্পেসের পরিবর্তে
google.maps.* নেমস্পেসে
স্টোর করা হয়। এই প্রসেসের অংশ হিসেবে বেশিরভাগ অবজেক্টের নামও পরিবর্তন করা হয়েছে। যেমন, GMap2-এর পরিবর্তে, আপনি
এখন google.maps.Map লোড করবেন।
- পুরনো পদ্ধতির কোনও রেফারেন্স থাকলে তা সরিয়ে দিন। সাধারণ
উদ্দেশ্যে ব্যবহার করা হয় এমন বেশ কিছু ইউটিলিটি পদ্ধতি সরিয়ে দেওয়া হয়েছে, যেমন
GDownloadURL এবং GLog।
হয় এই কার্যকারিতা থার্ড-পার্টি ইউটিলিটি লাইব্রেরি দিয়ে পরিবর্তন করুন,
অথবা আপনার কোড থেকে এইসব রেফারেন্স সরিয়ে দিন।
- (ঐচ্ছিক) আপনার কোডে লাইব্রেরি যোগ করুন। অনেক
ফিচার ইউটিলিটি লাইব্রেরিতে এক্সটার্নালাইজ করা হয়েছে যাতে প্রতিটি
অ্যাপকে শুধুমাত্র API-এর সেই অংশগুলি লোড করতে হবে যা ব্যবহার করা হবে।
- (ঐচ্ছিক) v3 এক্সটার্ন ব্যবহার করার জন্য আপনার প্রোজেক্ট কনফিগার করুন।
v3 এক্সটার্ন ব্যবহার করে আপনার কোড Closure
Compiler-এর মাধ্যমে যাচাই করতে পারেন অথবা আপনার IDE-তে অটোমেটিক সম্পূর্ণ করার ফিচার ট্রিগার করতে পারেন।
Advanced Compilation এবং Externs সম্পর্কে আরও জানুন।
- পরীক্ষা ও আইটারেট করুন। এই পর্যায়ে আপনাকে এখনও
কিছু কাজ করতে হবে, তবে সুখবর হল যে আপনি আপনার নতুন v3 Maps অ্যাপ্লিকেশন
তৈরি করার পথে অনেকটাই এগিয়ে গেছেন!
Maps JavaScript API-এর V3-তে পরিবর্তন
মাইগ্রেশনের পরিকল্পনা করার আগে, Maps JavaScript API v2 এবং Maps JavaScript API v3-এর মধ্যে পার্থক্যগুলি বোঝার জন্য আপনার সময় নেওয়া উচিত। Maps JavaScript API-এর নতুন ভার্সনটি
একেবারে শুরু থেকে লেখা হয়েছে, যেখানে আধুনিক JavaScript
প্রোগ্রামিং টেকনিক, লাইব্রেরির আরও বেশি ব্যবহার এবং একটি সরলীকৃত API-এর উপর ফোকাস করা হয়েছে।
API-তে অনেক নতুন ফিচার যোগ করা হয়েছে এবং বেশ কিছু
পরিচিত ফিচার পরিবর্তন করা হয়েছে বা সরিয়ে দেওয়া হয়েছে। এই বিভাগে দুটি রিলিজের মধ্যে
কিছু মূল পার্থক্য হাইলাইট করা হয়েছে।
v3 API-তে করা কিছু পরিবর্তনের মধ্যে রয়েছে:
- একটি স্ট্রিমলাইনড কোর লাইব্রেরি। অনেক সাপ্লিমেন্টারি ফাংশন
লাইব্রেরিতে
সরিয়ে দেওয়া হয়েছে,
যা Core API-এর লোড ও পার্সিংয়ের সময় কমাতে সাহায্য করে, যার ফলে
যেকোনও ডিভাইসে আপনার ম্যাপ দ্রুত লোড হয়।
- পলিগন রেন্ডারিং ও মার্কার প্লেসমেন্টের মতো বিভিন্ন ফিচারের পারফর্ম্যান্স
উন্নত করা হয়েছে।
- মোবাইল প্রক্সি ও কর্পোরেট ফায়ারওয়াল দ্বারা ব্যবহৃত শেয়ার করা অ্যাড্রেস আরও ভালোভাবে ম্যানেজ করার জন্য
ক্লায়েন্ট-সাইড
ব্যবহারের সীমার ক্ষেত্রে নতুন পদ্ধতি।
- বেশ কিছু আধুনিক ব্রাউজার ও মোবাইল ব্রাউজারের
জন্য সহায়তা যোগ করা হয়েছে। Internet Explorer 6-এর জন্য সহায়তা
সরিয়ে দেওয়া হয়েছে।
- সাধারণ-উদ্দেশ্যের অনেক হেল্পার ক্লাস (
GLog বা
GDownloadUrl) সরিয়ে দেওয়া হয়েছে। বর্তমানে, অনেক
চমৎকার জাভাস্ক্রিপ্ট লাইব্রেরি আছে যা একই ধরনের কার্যকারিতা প্রদান করে,
যেমন Closure বা
jQuery।
- HTML5 Street View-এর প্রয়োগ যা যেকোনও মোবাইল ডিভাইসে লোড হবে।
- কাস্টম
Street View প্যানোরামা আপনার নিজস্ব ফটোর সাথে, যা আপনাকে স্কি স্লোপ, বিক্রির জন্য বাড়ি বা অন্যান্য আকর্ষণীয় জায়গার প্যানোরামা শেয়ার করতে দেয়।
- স্টাইল করা ম্যাপ কাস্টমাইজেশন আপনাকে বেস ম্যাপে এলিমেন্টের ডিসপ্লে পরিবর্তন করতে দেয়
যাতে আপনার অনন্য ভিজ্যুয়াল স্টাইলের সাথে তা ম্যাচ করে।
- বেশ কিছু নতুন পরিষেবার জন্য সহায়তা, যেমন
ElevationService
এবং Distance
Matrix।
- উন্নত দিকনির্দেশ পরিষেবা বিকল্প রুট, রুট
অপ্টিমাইজেশন (
ট্রাভেলিং সেলসপার্সন সমস্যার আনুমানিক সমাধান), সাইকেলের দিকনির্দেশ (
সাইকেলের লেয়ার সহ), ট্রানজিটের দিকনির্দেশ এবং
ড্র্যাগেবল দিকনির্দেশ প্রদান করে।
- Geocoding API v2 থেকে
accuracy ভ্যালুর চেয়ে
আরও সঠিক টাইপ সংক্রান্ত তথ্য প্রদান করে এমন
একটি আপডেট করা Geocoding ফর্ম্যাট।
- একটি ম্যাপে একাধিক
তথ্য
উইন্ডোর জন্য সহায়তা
আপনার অ্যাপ্লিকেশন আপগ্রেড করুন
আপনার নতুন 'কী'
Maps JavaScript API v3, v2 থেকে একটি নতুন কী সিস্টেম ব্যবহার করে। আপনি হয়ত আগে থেকেই
আপনার অ্যাপ্লিকেশনের সাথে v3 কী ব্যবহার করছেন, সেক্ষেত্রে কোনও পরিবর্তন করার প্রয়োজন নেই। যাচাই করতে,
যে URL থেকে Maps JavaScript API লোড করেন, সেটির
key প্যারামিটার চেক করুন। 'ABQIAA' দিয়ে 'কী' ভ্যালু শুরু হলে, আপনি
v2 'কী' ব্যবহার করছেন। আপনার কাছে v2 কী থাকলে, মাইগ্রেশনের অংশ হিসেবে আপনাকে অবশ্যই v3 কী-তে আপগ্রেড করতে হবে,
যা:
Maps JavaScript API v3 লোড করার সময় কী পাস করা হয়।
API কী তৈরি করা সম্পর্কে আরও জানুন।
মনে রাখবেন, আপনি Google Maps APIs for Work-এর গ্রাহক হলে,
key প্যারামিটার ব্যবহার করার পরিবর্তে
client প্যারামিটার সহ ক্লায়েন্ট আইডি ব্যবহার করতে পারেন। Maps JavaScript API v3-তে এখনও ক্লায়েন্ট আইডি কাজ করে এবং
'কী' আপগ্রেড করার প্রসেস সম্পূর্ণ করার প্রয়োজন হয় না।
API লোড করুন
আপনার কোডে প্রথম যে পরিবর্তনটি করতে হবে তা হল
আপনি কীভাবে API লোড করবেন। v2-এ, আপনি http://maps.google.com/maps-এ
অনুরোধের মাধ্যমে Maps JavaScript API
লোড করেন। আপনি যদি
Maps JavaScript API v3 লোড করেন, তাহলে আপনাকে নিম্নলিখিত
পরিবর্তনগুলি করতে হবে:
//maps.googleapis.com/maps/api/js থেকে API লোড করুন
file প্যারামিটার সরিয়ে দিন।
- আপনার নতুন v3 কী দিয়ে
key প্যারামিটার
আপডেট করুন। Google Maps APIs for Work গ্রাহকদের
client প্যারামিটার ব্যবহার করা উচিত।
- (শুধুমাত্র Google Maps Platform প্রিমিয়াম প্ল্যান)
Google Maps Platform প্রিমিয়াম প্ল্যান ডেভেলপার গাইডে
যেভাবে ব্যাখ্যা করা হয়েছে সেই অনুযায়ী
client প্যারামিটার দেওয়া হয়েছে কিনা তা যাচাই করুন।
- লেটেস্ট রিলিজ করা ভার্সনের জন্য অনুরোধ করতে
v প্যারামিটার সরান অথবা
v3 ভার্সনিং
স্কিম অনুযায়ী এর ভ্যালু পরিবর্তন করুন।
- (ঐচ্ছিক)
hl প্যারামিটারটি
language দিয়ে প্রতিস্থাপন করুন এবং এর মান সংরক্ষণ করুন।
- (ঐচ্ছিক) ঐচ্ছিক
লাইব্রেরি লোড করতে
libraries প্যারামিটার যোগ করুন।
সবচেয়ে সহজ ক্ষেত্রে, v3 বুটস্ট্র্যাপ শুধুমাত্র আপনার API কী প্যারামিটার নির্দিষ্ট করবে:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
নিচের উদাহরণে জার্মান ভাষায় Maps JavaScript API v2-এর লেটেস্ট ভার্সনের জন্য অনুরোধ করা হয়েছে:
<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>
নিচের উদাহরণটি v3-এর জন্য একটি সমতুল্য অনুরোধ।
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>
google.maps নেমস্পেস
Maps JavaScript API v3-তে সবচেয়ে উল্লেখযোগ্য পরিবর্তন হল
google.maps নেমস্পেসের সূচনা। v2 API ডিফল্ট হিসেবে গ্লোবাল নেমস্পেসে
সব অবজেক্ট প্লেস করে, যার ফলে নামের
মধ্যে সংঘর্ষ হতে পারে। v3-এর মধ্যে, সব অবজেক্ট
google.maps নেমস্পেসের মধ্যে থাকে।
v3-তে আপনার অ্যাপ্লিকেশন মাইগ্রেট করার সময়, নতুন নেমস্পেস ব্যবহার করার জন্য
আপনাকে কোড পরিবর্তন করতে হবে। "G" সার্চ করে
"google.maps." দিয়ে রিপ্লেস করলে সম্পূর্ণ কাজ হবে না; তবে, আপনার কোড পর্যালোচনা করার সময়
এটি প্রয়োগ করা একটি ভালো থাম্ব রুল। v2 এবং v3-তে সমতুল্য ক্লাসের
কিছু উদাহরণ নিচে দেওয়া হল।
| v2 |
v3 |
GMap2 |
google.maps.Map |
GLatLng |
google.maps.LatLng |
GInfoWindow |
google.maps.InfoWindow |
GMapOptions |
google.map.MapOptions |
G_API_VERSION |
google.maps.version |
GPolyStyleOptions |
google.maps.PolygonOptions or
google.maps.PolylineOptions |
পুরনো কোড সরান
Maps JavaScript API v3-এ v2-এর বেশিরভাগ কার্যকারিতার সমান্তরাল রয়েছে;
তবে, কিছু ক্লাস আছে যা আর
কাজ করে না। মাইগ্রেশনের অংশ হিসেবে, আপনাকে হয় থার্ড-পার্টি ইউটিলিটি লাইব্রেরির মাধ্যমে এইসব
ক্লাস পরিবর্তন করতে হবে অথবা আপনার কোড থেকে এইসব
রেফারেন্স সরিয়ে দিতে হবে। অনেক চমৎকার জাভাস্ক্রিপ্ট লাইব্রেরি আছে যা
একই ধরনের কার্যকারিতা প্রদান করে, যেমন Closure বা
jQuery।
Maps JavaScript API v3-তে নিম্নলিখিত ক্লাসগুলির কোনও সমান্তরাল নেই:
GBounds | GLanguage |
GBrowserIsCompatible | GLayer |
GControl | GLog |
GControlAnchor | GMercatorProjection |
GControlImpl | GNavLabelControl |
GControlPosition | GObliqueMercator |
GCopyright | GOverlay |
GCopyrightCollection | GPhotoSpec |
GDownloadUrl | GPolyEditingOptions |
GDraggableObject | GScreenOverlay |
GDraggableObjectOptions | GStreetviewFeatures |
GFactualGeocodeCache | GStreetviewLocation |
GGeoAddressAccuracy | GStreetviewOverlay |
GGeocodeCache | GStreetviewUserPhotosOptions |
GGoogleBar | GTileLayerOptions |
GGoogleBarAdsOptions | GTileLayerOverlayOptions |
GGoogleBarLinkTarget | GTrafficOverlayOptions |
GGoogleBarListingTypes | GUnload |
GGoogleBarOptions | GXml |
GGoogleBarResultList | GXmlHttp |
GInfoWindowTab | GXslt |
GKeyboardHandler | |
কোড তুলনা করুন
v2 এবং v3 API-এর মাধ্যমে লেখা দুটি অ্যাপ্লিকেশনের তুলনা এখানে দেওয়া হল।
<!DOCTYPE html>
<html>
<head>
<script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(
document.getElementById('map'));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
}
}
</script>
</head>
<body onload="initialize()" onunload="GUnload()">
<div id="map"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: new google.maps.LatLng(37.4419, -122.1419),
map: map
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
আপনি দেখতেই পাচ্ছেন যে দুটি অ্যাপ্লিকেশনের মধ্যে বেশ কিছু পার্থক্য
রয়েছে। উল্লেখযোগ্য পরিবর্তনের মধ্যে রয়েছে:
- যে ঠিকানা থেকে API লোড করা হয় সেটি পরিবর্তন করা হয়েছে।
- v3-তে
GBrowserIsCompatible() এবং GUnload()
পদ্ধতির আর প্রয়োজন নেই এবং API থেকে
সরিয়ে দেওয়া হয়েছে।
- API-তে সেন্ট্রাল অবজেক্ট হিসেবে
GMap2 অবজেক্টটি
google.maps.Map দ্বারা প্রতিস্থাপিত হয়।
- প্রপার্টি এখন বিকল্প ক্লাসের মাধ্যমে লোড করা হয়। উপরের
উদাহরণে, আমরা ম্যাপ লোড করার জন্য প্রয়োজনীয় তিনটি প্রপার্টি সেট করেছি —
center, zoom এবং mapTypeId
— ইনলাইন করা
MapOptions
অবজেক্ট ব্যবহার করে।
- v3-এ ডিফল্ট UI ডিফল্ট হিসেবে চালু থাকে। আপনি
MapOptions অবজেক্টে
disableDefaultUI প্রপার্টি
'সত্য' হিসেবে সেট করে
এটি বন্ধ করতে
পারবেন।
সারাংশ
এই পর্যায়ে আপনি Maps JavaScript API-এর v2 থেকে v3-তে মাইগ্রেট করার সাথে
জড়িত কিছু মূল পয়েন্ট সম্পর্কে জানতে পারবেন।
আরও কিছু তথ্য আছে যা আপনার জানা প্রয়োজন হতে পারে, তবে এটি আপনার অ্যাপ্লিকেশনের উপর
নির্ভর করবে। নিম্নলিখিত বিভাগে, আমরা নির্দিষ্ট কেসের জন্য মাইগ্রেশন সংক্রান্ত নির্দেশাবলী অন্তর্ভুক্ত করেছি
যা আপনার ক্ষেত্রে প্রযোজ্য হতে পারে। এছাড়াও, আপগ্রেড করার সময় কাজে লাগতে পারে
এমন কিছু রিসোর্স এখানে দেওয়া হল।
এই ডকুমেন্ট সম্পর্কে আপনার কোনও সমস্যা বা প্রশ্ন থাকলে, এই পৃষ্ঠার উপরে
মতামত পাঠান লিঙ্ক ব্যবহার করুন।
এই বিভাগে Maps JavaScript API-এর v2 এবং v3 ভার্সনের সবচেয়ে জনপ্রিয় ফিচারগুলির
বিস্তারিত তুলনা করা হয়েছে। রেফারেন্সের
প্রতিটি বিভাগ আলাদাভাবে পড়ার জন্য ডিজাইন করা হয়েছে। আমরা সাজেস্ট করি
যে আপনি এই রেফারেন্সটি সম্পূর্ণভাবে পড়বেন না; পরিবর্তে, কেস-বাই-কেস ভিত্তিতে আপনার মাইগ্রেশনে সহায়তা করার জন্য এই
মেটেরিয়াল ব্যবহার করুন।
- ইভেন্ট - ইভেন্ট রেজিস্টার ও ম্যানেজ করা।
- কন্ট্রোল - ম্যাপে দেখানো নেভিগেশনাল কন্ট্রোল
পরিবর্তন করা।
- ওভারলে - ম্যাপে অবজেক্ট যোগ করা এবং
এডিট করা।
- ম্যাপের ধরন - বেসম্যাপ তৈরি করে এমন টাইল।
- লেয়ার - গ্রুপ হিসেবে কন্টেন্ট যোগ ও এডিট করা, যেমন KML বা ট্রাফিক লেয়ার।
- পরিষেবা - Google-এর জিওকোডিং,
দিকনির্দেশ বা Street View পরিষেবার সাথে কাজ করা।
ইভেন্ট
Maps JavaScript API v3-এর ইভেন্ট মডেল v2-এর মতোই,
যদিও এর ব্যাকগ্রাউন্ডে অনেক পরিবর্তন করা হয়েছে।
MVC সহায়তার জন্য নতুন ইভেন্ট
v3 API, MVC স্ট্যাটাস পরিবর্তন দেখানোর জন্য নতুন ধরনের ইভেন্ট যোগ করে। এখন
দুই ধরনের ইভেন্ট আছে:
- ব্যবহারকারীর ইভেন্ট (যেমন "ক্লিক" মাউস ইভেন্ট) DOM থেকে Maps JavaScript API-তে
প্রোপ্যাগেট করা হয়। এইসব ইভেন্ট স্ট্যান্ডার্ড DOM ইভেন্ট থেকে
আলাদা ও স্বতন্ত্র।
- MVC স্টেট পরিবর্তন সংক্রান্ত বিজ্ঞপ্তি Maps API অবজেক্টে পরিবর্তন দেখায়
এবং
property_changed
কনভেনশন ব্যবহার করে নামকরণ করা হয়।
প্রতিটি Maps API অবজেক্ট একাধিক নামযুক্ত ইভেন্ট এক্সপোর্ট করে। নির্দিষ্ট ইভেন্টে আগ্রহী অ্যাপ্লিকেশনগুলিকে
সেই ইভেন্টগুলির জন্য ইভেন্ট লিসেনার রেজিস্টার করতে হবে
এবং সেই ইভেন্টগুলি রিসিভ করার সময় কোড এক্সিকিউট করতে হবে। এই
ইভেন্ট-চালিত মেকানিজম Maps JavaScript API
v2 এবং v3, দুটিতেই একই, শুধু নেমস্পেস
GEvent থেকে
google.maps.event-এ পরিবর্তিত হয়েছে:
GEvent.addListener(map, 'click', function() {
alert('You clicked the map.');
});
google.maps.event.addListener(map, 'click', function() {
alert('You clicked the map.');
});
ইভেন্ট লিসনার সরান
পারফর্ম্যান্সের কারণে, কোনও ইভেন্ট লিসনারের আর প্রয়োজন না থাকলে, সেটি সরিয়ে দেওয়াই
সবচেয়ে ভালো। v2 এবং v3-তে ইভেন্ট লিসনার সরানোর পদ্ধতি একই:
- আপনি যখন কোনও ইভেন্ট লিসনার তৈরি করেন, তখন একটি অস্বচ্ছ অবজেক্ট (v2-তে GEventListener, v3-তে MapsEventListener)
ফেরত দেওয়া হয়।
- আপনি ইভেন্ট লিসনার সরাতে চাইলে, ইভেন্ট লিসনার সরানোর জন্য এই অবজেক্টটি
removeListener() পদ্ধতিতে (v2-তে GEvent.removeListener()
বা v3-তে google.maps.event.removeListener())
পাস করুন।
DOM ইভেন্ট শুনুন
আপনি যদি DOM (ডকুমেন্ট অবজেক্ট মডেল) ইভেন্ট ক্যাপচার করতে এবং তার উত্তর দিতে চান, তাহলে v3 google.maps.event.addDomListener()
স্ট্যাটিক পদ্ধতি প্রদান করে, যা v2-এর GEvent.addDomListener()
পদ্ধতির সমতুল্য।
ইভেন্টে পাস করা আর্গুমেন্ট ব্যবহার করা
UI ইভেন্ট প্রায়ই একটি ইভেন্ট আর্গুমেন্ট পাস করে যা পরে ইভেন্ট লিসেনার
অ্যাক্সেস করতে পারে। v3-তে বেশিরভাগ ইভেন্ট আর্গুমেন্ট সরলীকৃত করা হয়েছে
যাতে API-তে অবজেক্টের উপর আরও সামঞ্জস্যপূর্ণ হয়। (বিস্তারিত জানতে
v3 রেফারেন্স
দেখুন।)
v3 ইভেন্ট লিসনারে কোনও overlay আর্গুমেন্ট নেই। আপনি
v3 ম্যাপে click ইভেন্ট রেজিস্টার করলে, ব্যবহারকারী বেস ম্যাপে ক্লিক করলেই
কলব্যাক হবে। ক্লিক করা যায় এমন ওভারলেতে আপনি অতিরিক্ত
কলব্যাক রেজিস্টার করতে পারেন, যদি আপনাকে সেইসব ক্লিকে প্রতিক্রিয়া জানাতে হয়।
// Passes an overlay argument when clicking on a map
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
GEvent.addListener(map,'click', function(overlay, latlng) {
if (latlng) {
var marker = new GMarker(latlng);
map.addOverlay(marker);
}
});
// Passes only an event argument
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
google.maps.event.addListener(map, 'click', function(event) {
var marker = new google.maps.Marker({
position: event.latLng,
map: map
});
});
কন্ট্রোল
Maps JavaScript API এমন UI কন্ট্রোল দেখায় যা ব্যবহারকারীদের আপনার ম্যাপের সাথে
ইন্টার্যাক্ট করার অনুমতি দেয়। এইসব কন্ট্রোল কীভাবে দেখানো হবে তা কাস্টমাইজ করতে আপনি API ব্যবহার করতে
পারবেন।
কন্ট্রোলের ধরনে পরিবর্তন
v3 API-এর সাথে control-এর ধরনে কিছু পরিবর্তন
করা হয়েছে।
- v3 API-তে অতিরিক্ত
ম্যাপের ধরন
কাজ করে, যার মধ্যে টেরেন ম্যাপ এবং কাস্টম ম্যাপের ধরন যোগ করার ক্ষমতা অন্তর্ভুক্ত।
- v2 হায়ারার্কিক্যাল কন্ট্রোল,
GHierarchicalMapTypeControl, আর উপলভ্য নেই।
আপনি google.maps.MapTypeControlStyle.HORIZONTAL_BAR কন্ট্রোল ব্যবহার করে একই ধরনের এফেক্ট
পেতে পারেন।
- v2-এ
GMapTypeControl-এর দেওয়া হরাইজন্টাল লেআউট
v3-এ উপলভ্য নয়।
ম্যাপে কন্ট্রোল যোগ করা
Maps JavaScript API v2-এর মাধ্যমে আপনি ম্যাপ অবজেক্টের addControl() পদ্ধতির সাহায্যে
ম্যাপে কন্ট্রোল যোগ করতে
পারবেন। v3-এ, সরাসরি কন্ট্রোল অ্যাক্সেস বা পরিবর্তন করার পরিবর্তে,
আপনি সংশ্লিষ্ট MapOptions অবজেক্ট পরিবর্তন করেন। নিচের
স্যাম্পেল থেকে জানতে পারবেন যে নিম্নলিখিত কন্ট্রোল যোগ করার জন্য কীভাবে ম্যাপ কাস্টমাইজ করতে
হয়:
- বোতাম যা ব্যবহারকারীকে উপলভ্য ম্যাপের প্রকারের মধ্যে টগল করতে দেয়
- একটি ম্যাপ স্কেল
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add controls
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add controls
mapTypeControl: true,
scaleControl: true
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
ম্যাপে পজিশন কন্ট্রোল
v3-তে পজিশনিং কন্ট্রোল অনেক পরিবর্তিত হয়েছে। v2-তে, addControl() পদ্ধতিটি একটি ঐচ্ছিক দ্বিতীয় প্যারামিটার নেয়
যা আপনাকে ম্যাপের কোণের সাপেক্ষে কন্ট্রোলের অবস্থান নির্দিষ্ট করতে দেয়।
v3-তে, আপনি কন্ট্রোল বিকল্পের position প্রপার্টির মাধ্যমে
কন্ট্রোলের পজিশন সেট করেন। এইসব কন্ট্রোলের
পজিশনিং অ্যাবসোলিউট নয়; পরিবর্তে, API প্রদত্ত সীমাবদ্ধতার (যেমন ম্যাপের সাইজ) মধ্যে
বিদ্যমান ম্যাপ এলিমেন্টের চারপাশে "ফ্লো" করার মাধ্যমে
কন্ট্রোলগুলিকে বুদ্ধিমত্তার সাথে লেআউট করে।
এই লেআউট নিশ্চিত করে যে ডিফল্ট কন্ট্রোল আপনার কন্ট্রোলের সাথে মানানসই।
আরও তথ্যের জন্য v3-তে কন্ট্রোল
পজিশনিং দেখুন।
নিম্নলিখিত কোডটি উপরের স্যাম্পেল থেকে কন্ট্রোলকে আবার পজিশন করে:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add map type control
map.addControl(new GMapTypeControl(), new GControlPosition(
G_ANCHOR_TOP_LEFT, new GSize(10, 10)));
// Add scale
map.addControl(new GScaleControl(), new GControlPosition(
G_ANCHOR_BOTTOM_RIGHT, new GSize(20, 20)));
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add map type control
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_LEFT
},
// Add scale
scaleControl: true,
scaleControlOptions: {
position: google.maps.ControlPosition.BOTTOM_RIGHT
}
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
কাস্টম কন্ট্রোল
কাস্টম নেভিগেশনাল কন্ট্রোল তৈরি করতে Maps JavaScript API ব্যবহার করুন।
v2 API-এর মাধ্যমে কন্ট্রোল কাস্টমাইজ করতে, আপনাকে
GControl ক্লাস সাবক্লাস করতে হবে এবং initialize() ও getDefaultPosition() পদ্ধতির জন্য হ্যান্ডলারের সংজ্ঞা দিতে হবে।
v3-তে GControl ক্লাসের সমতুল্য কিছু নেই। পরিবর্তে,
কন্ট্রোলগুলি DOM এলিমেন্ট হিসেবে দেখানো হয়। v3 API-এর মাধ্যমে কাস্টম কন্ট্রোল
যোগ করতে, Node-এর চাইল্ড হিসেবে (যেমন,
<div> এলিমেন্ট) কনস্ট্রাক্টরে কন্ট্রোলের জন্য DOM স্ট্রাকচার তৈরি করুন এবং যেকোনও
DOM ইভেন্ট ম্যানেজ করতে ইভেন্ট লিসেনার যোগ করুন। আপনার ম্যাপে কাস্টম কন্ট্রোলের ইনস্ট্যান্স যোগ করতে,
ম্যাপের controls[position] অ্যারেতে
Node পুশ করুন।
উপরে উল্লেখ করা ইন্টারফেসের প্রয়োজনীয়তা মেনে চলে এমন একটি HomeControl ক্লাস ইমপ্লিমেন্টেশন দেওয়া হল (বিস্তারিত জানতে কাস্টম কন্ট্রোল ডকুমেন্টেশন দেখুন), নিম্নলিখিত কোড স্যাম্পেল থেকে জানা যায় যে কীভাবে ম্যাপে কাস্টম কন্ট্রোল যোগ করতে হয়।
map.addControl(new HomeControl(),
GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
var homeControlDiv = document.createElement('DIV');
var homeControl = new HomeControl(homeControlDiv, map);
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(
homeControlDiv);
ওভারলে
ওভারলেতে সেইসব অবজেক্ট দেখানো হয় যেগুলি আপনি ম্যাপে "যোগ" করেন, যেমন পয়েন্ট, লাইন, এলাকা বা অবজেক্টের সংগ্রহ।
ওভারলে যোগ করা ও সরিয়ে দেওয়া
v2 এবং v3-এর মধ্যে ওভারলে দ্বারা উপস্থাপিত অবজেক্টের ধরন একই, তবে সেগুলি আলাদাভাবে ম্যানেজ করা হয়।
v2 API-তে ওভারলেগুলি GMap2 অবজেক্টের
addOverlay() এবং removeOverlay() পদ্ধতি ব্যবহার করে
ম্যাপে যোগ করা এবং সরানো হয়েছিল। v3-তে, আপনি সংশ্লিষ্ট ওভারলে বিকল্প ক্লাসের map প্রপার্টি ব্যবহার করে
ওভারলেতে ম্যাপ অ্যাসাইন করেন।
এছাড়াও, আপনি সরাসরি ওভারলে অবজেক্টের setMap() পদ্ধতি কল করে এবং আপনার পছন্দের ম্যাপ নির্দিষ্ট করে ওভারলে যোগ করতে বা সরাতে পারবেন। ওভারলে সরাতে ম্যাপ প্রপার্টি null-এ সেট করুন।
v3-তে কোনও clearOverlays() পদ্ধতি নেই।
আপনি যদি ওভারলে-এর একটি সেট ম্যানেজ করতে চান, তাহলে ওভারলে ধরে রাখার জন্য
আপনাকে একটি অ্যারে তৈরি করতে হবে। এই অ্যারে ব্যবহার করে, আপনি অ্যারের প্রতিটি ওভারলেতে
setMap() কল করতে পারবেন (সেগুলি সরাতে চাইলে
null পাস করতে হবে)।
ড্র্যাগ করা যায় এমন মার্কার
ডিফল্ট হিসেবে, মার্কার ক্লিক করা যায় কিন্তু ড্র্যাগ করা যায় না। নিম্নলিখিত
দুটি স্যাম্পেল একটি ড্র্যাগেবল মার্কার যোগ করে:
var myLatLng = new GLatLng(-25.363882, 131.044922);
var map = new GMap2(document.getElementById('map'));
map.setCenter(myLatLng, 4);
var marker = new GMarker(latLng, {
draggable: true
});
map.addOverlay(marker);
var myLatLng = new google.maps.LatLng(-25.363882, 131.044922);
var map = new google.maps.Map(
document.getElementById('map'), {
center: myLatLng,
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: myLatLng,
draggable: true,
map: map
});
আইকন
ডিফল্ট মার্কারের জায়গায় দেখানোর জন্য আপনি কাস্টম আইকন নির্ধারণ করতে পারবেন।
v2-তে কাস্টম ছবি ব্যবহার করতে, আপনি G_DEFAULT_ICON type থেকে একটি GIcon
ইনস্ট্যান্স তৈরি করতে এবং এটি পরিবর্তন করতে পারবেন। আপনার
ছবি ডিফল্ট আইকনের চেয়ে বড় বা ছোট হলে, আপনাকে অবশ্যই
GSize ইনস্ট্যান্সের মাধ্যমে তা উল্লেখ করতে হবে।
v3 API এই প্রসেসকে কিছুটা সহজ করে তোলে।
আপনার কাস্টম ছবির URL-এ মার্কারের icon
প্রপার্টি সেট করুন এবং API অটোমেটিক আইকনের সাইজ নির্ধারণ করবে।
Maps JavaScript API জটিল আইকনের জন্যও সহায়তা প্রদান করে।
একটি জটিল আইকনে একাধিক টাইল, জটিল আকার অন্তর্ভুক্ত থাকতে পারে,
অথবা অন্যান্য ওভারলে-এর সাপেক্ষে ছবিগুলি কীভাবে প্রদর্শন করা উচিত তার "স্ট্যাক অর্ডার" নির্দিষ্ট করতে পারে। v2-তে মার্কারের সাথে কোনও আকার যোগ করতে, আপনাকে
প্রতিটি GIcon ইনস্ট্যান্সে অতিরিক্ত প্রপার্টি নির্দিষ্ট করতে হবে
এবং এটি GMarker কনস্ট্রাক্টরে বিকল্প হিসেবে
পাস করতে হবে। v3-তে, এইভাবে নির্দিষ্ট করা আইকনগুলির
icon প্রপার্টি Icon ধরনের অবজেক্টে
সেট করা উচিত।
v3-তে মার্কার শ্যাডো কাজ করে না।
নিচের উদাহরণে অস্ট্রেলিয়ার বন্ডি বিচে একটি বিচ ফ্ল্যাগ দেখানো হয়েছে, আইকনের স্বচ্ছ অংশে ক্লিক করা যাবে না:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
var flagIcon = new GIcon(G_DEFAULT_ICON);
flagIcon.image = '/images/beachflag.png';
flagIcon.imageMap = [1, 1, 1, 20, 18, 20, 18 , 1];
var bbLatLng = new GLatLng(-33.890542, 151.274856);
map.addOverlay(new GMarker(bbLatLng, {
icon: flagIcon
}));
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'
};
var bbLatLng = new google.maps.LatLng(-33.890542, 151.274856);
var bbMarker = new google.maps.Marker({
icon: '/images/beachflag.png'
shape: shape,
position: bbLatLng,
map: map
});
পলিলাইন
পলিলাইনে LatLng-এর একটি অ্যারে এবং একটি সিরিজ থাকে
লাইন সেগমেন্টের যা সেই লোকেশনগুলিকে একটি ক্রমিক ক্রমে সংযুক্ত করে।
v3-তে Polyline অবজেক্ট তৈরি ও ডিসপ্লে করা
v2-তে GPolyline অবজেক্ট ব্যবহার করার মতোই। নিম্নলিখিত স্যাম্পেল
জুরিখ থেকে সিঙ্গাপুর হয়ে সিডনি পর্যন্ত একটি অর্ধ-স্বচ্ছ, ৩-পিক্সেল চওড়া, জিওডেসিক পলিলাইন
আঁকে:
var polyline = new GPolyline(
[
new GLatLng(47.3690239, 8.5380326),
new GLatLng(1.352083, 103.819836),
new GLatLng(-33.867139, 151.207114)
],
'#FF0000', 3, 0.5, {
geodesic: true
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: [
new google.maps.LatLng(47.3690239, 8.5380326),
new google.maps.LatLng(1.352083, 103.819836),
new google.maps.LatLng(-33.867139, 151.207114)
],
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
geodesic: true
});
polyline.setMap(map);
এনকোড করা পলিলাইন
এনকোড করা
পলিলাইন থেকে সরাসরি Polyline অবজেক্ট
তৈরি করার জন্য v3-তে কোনও সহায়তা নেই। পরিবর্তে, The Geometry Library
পলিলাইন এনকোড ও ডিকোড করার পদ্ধতি প্রদান করে। এই লাইব্রেরি কীভাবে লোড করতে হয় সেই সম্পর্কে আরও তথ্য পেতে v3 Maps
API-তে লাইব্রেরি দেখুন।
নিচের উদাহরণগুলি একই এনকোড করা পলিলাইন আঁকে; v3 কোড
google.maps.geometry.encoding নেমস্পেস থেকে
decodePath() পদ্ধতি ব্যবহার করে।
var polyline = new GPolyline.fromEncoded({
points: 'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H',
levels: 'PPP',
zoomFactor: 2,
numLevels: 18,
color: '#ff0000',
opacity: 0.8,
weight: 3
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: google.maps.geometry.encoding.decodePath(
'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H'),
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
});
polyline.setMap(map);
বহুভুজ
পলিগন একটি বন্ধ লুপের মধ্যে একটি অঞ্চলকে সংজ্ঞায়িত করে। Polyline অবজেক্টের
মতোই, Polygon অবজেক্টে
ক্রমানুযায়ী সাজানো পয়েন্টের সিরিজ থাকে। v3
Polygon ক্লাসটি v2
GPolygon ক্লাসের মতোই, তবে উল্লেখযোগ্য ব্যতিক্রম
হল যে লুপ বন্ধ করার জন্য আপনাকে আর
পাথের শেষে শুরুর ভার্টেক্সটি পুনরাবৃত্তি করতে হবে না। v3 API
অটোমেটিক যেকোনও পলিগন বন্ধ করে দেবে, এর জন্য এটি শেষ কোঅর্ডিনেট থেকে প্রথম কোঅর্ডিনেট পর্যন্ত
একটি স্ট্রোক আঁকবে। নিম্নলিখিত কোড স্নিপেট
বারমুডা ট্রায়াঙ্গেলকে দেখানোর জন্য একটি বহুভুজ তৈরি করে:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(24.886436, -70.268554), 5);
var bermudaTriangle = new GPolygon(
[
new GLatLng(25.774252, -80.190262),
new GLatLng(18.466465, -66.118292),
new GLatLng(32.321384, -64.75737),
new GLatLng(25.774252, -80.190262)
],
'#FF0000', 2, 0.8, '#FF0000', 0.35);
map.addOverlay(bermudaTriangle);
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(24.886436, -70.268554),
mapTypeId: google.maps.MapTypeId.TERRAIN,
zoom: 5
});
var bermudaTriangle = new google.maps.Polygon({
paths: [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.75737)
],
strokeColor: '#FF0000',
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: '#FF0000',
fillOpacity: 0.35
});
bermudaTriangle.setMap(map);
ব্যবহারকারী এডিট করতে পারবেন এমন শেপ
পলিলাইন ও পলিগন ব্যবহারকারী-এডিটযোগ্য করা যেতে পারে। নিম্নলিখিত কোড
স্নিপেটগুলি একই রকম:
map.addOverlay(polyline);
polyline.enableEditing();
polyline.setMap(map);
polyline.setEditable(true);
আরও উন্নত ড্রয়িং ক্ষমতার জন্য, v3 ডকুমেন্টেশনে
ড্রয়িং লাইব্রেরি
দেখুন।
তথ্য উইন্ডো
InfoWindow ম্যাপের উপরে একটি ফ্লোটিং উইন্ডোতে কন্টেন্ট
দেখায়। v2 এবং v3 তথ্য উইন্ডোর মধ্যে কয়েকটি মূল পার্থক্য রয়েছে:
- v2 API-তে ম্যাপ প্রতি শুধু
GInfoWindow কাজ করে, যেখানে
v3 API-তে প্রতিটি ম্যাপে একাধিক, একইসাথে InfoWindow
কাজ করে।
- আপনি ম্যাপে ক্লিক করলে v3
InfoWindow খোলা
থাকবে। আপনি ম্যাপে ক্লিক করলে v2 GInfoWindow
অটোমেটিক বন্ধ হয়ে যায়। আপনি Map অবজেক্টে
click লিসেনার যোগ করে v2
আচরণ অনুকরণ করতে পারেন।
- v3 API-তে ট্যাব করা
InfoWindow-এর জন্য বিল্ট-ইন সহায়তা
প্রদান করা হয় না।
গ্রাউন্ড ওভারলে
ম্যাপে কোনও ছবি প্লেস করতে, আপনাকে
GroundOverlay অবজেক্ট ব্যবহার করতে হবে। GroundOverlay-এর কনস্ট্রাক্টর
v2 এবং v3-তে মূলত একই: এটি
প্যারামিটার হিসেবে ছবির URL এবং ছবির সীমানা
নির্দিষ্ট করে।
নিম্নলিখিত উদাহরণটি ম্যাপে ওভারলে হিসেবে
নিউআর্ক, এনজে-এর একটি প্রাচীন ম্যাপ দেখায়:
var bounds = new GLatLngBounds(
new GLatLng(40.716216, -74.213393),
new GLatLng(40.765641, -74.139235));
var overlay = new GGroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
map.addOverlay(overlay);
var bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(40.716216, -74.213393),
new google.maps.LatLng(40.765641, -74.139235));
var overlay = new google.maps.GroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
overlay.setMap(map);
ম্যাপের ধরন
v2 এবং v3-তে উপলভ্য ম্যাপের ধরনগুলি কিছুটা আলাদা, তবে সব
মৌলিক ম্যাপের ধরন API-এর উভয় ভার্সনেই উপলভ্য। ডিফল্ট হিসেবে, v2
স্ট্যান্ডার্ড "পেইন্ট করা" রোড ম্যাপ টাইল ব্যবহার করে। তবে, v3-এর ক্ষেত্রে google.maps.Map অবজেক্ট তৈরি করার সময় নির্দিষ্ট ম্যাপের ধরন উল্লেখ করতে হয়।
সাধারণ ম্যাপের ধরন
v2 এবং v3, দুটিতেই চার ধরনের বেসিক ম্যাপ উপলভ্য:
MapTypeId.ROADMAP (G_NORMAL_MAP-এর পরিবর্তে)
রোড ম্যাপ ভিউ দেখায়।
MapTypeId.SATELLITE (G_SATELLITE_MAP-এর পরিবর্তে)
Google Earth স্যাটেলাইট ছবি দেখায়।
MapTypeId.HYBRID (G_HYBRID_MAP-এর পরিবর্তে)
সাধারণ ও স্যাটেলাইট ভিউয়ের মিশ্রণ দেখায়।
MapTypeId.TERRAIN (G_PHYSICAL_MAP-এর পরিবর্তে)
ভূখণ্ডের তথ্যের উপর ভিত্তি করে একটি ফিজিক্যাল ম্যাপ দেখায়।
v2 এবং v3-এর জন্য ম্যাপকে ভূখণ্ড ভিউতে সেট করার উদাহরণ নিচে দেওয়া হল:
map.setMapType(G_PHYSICAL_MAP);
map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
Maps JavaScript API v3-এ কম ব্যবহৃত ম্যাপের ধরনের ক্ষেত্রেও কিছু পরিবর্তন করা হয়েছে:
- পৃথিবী ছাড়া অন্যান্য মহাজাগতিক বস্তুর জন্য ম্যাপ টাইলস
v3 API-তে ম্যাপের ধরন হিসেবে উপলভ্য নয়, তবে কাস্টম ম্যাপের ধরন হিসেবে
অ্যাক্সেস করা যেতে পারে। উদাহরণস্বরূপ, এই
কাস্টম ম্যাপের প্রকারের উদাহরণ দেখুন।
- v3-তে এমন কোনও বিশেষ ম্যাপের ধরন নেই যা v2-এর
G_SATELLITE_3D_MAP ধরনকে প্রতিস্থাপন করে। পরিবর্তে,
এই
লাইব্রেরি ব্যবহার করে আপনার v3 ম্যাপে Google Earth প্লাগ-ইন ইন্টিগ্রেট করতে পারেন।
সর্বাধিক জুম করা ছবি
স্যাটেলাইট ইমেজ সবসময় হাই জুম লেভেলে উপলভ্য থাকে না। জুম লেভেল সেট করার আগে
আপনি যদি উপলভ্য সর্বোচ্চ জুম লেভেল জানতে চান,
তাহলে google.maps.MaxZoomService ক্লাস ব্যবহার করুন। এই ক্লাস v2 থেকে
GMapType.getMaxZoomAtLatLng() পদ্ধতিকে প্রতিস্থাপন করে।
var point = new GLatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new GMap2(document.getElementById("map"));
map.setUIToDefault();
map.setCenter(point);
map.setMapType(G_HYBRID_MAP);
map.getCurrentMapType().getMaxZoomAtLatLng(point,
function(response) {
if (response.status) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
var myLatlng = new google.maps.LatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new google.maps.Map(
document.getElementById("map"),{
zoom: 0,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.HYBRID
});
var maxZoomService = new google.maps.MaxZoomService();
maxZoomService.getMaxZoomAtLatLng(
myLatlng,
function(response) {
if (response.status == google.maps.MaxZoomStatus.OK) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
এরিয়াল পার্সপেক্টিভ ইমেজারি
v3-তে এরিয়াল ইমেজ চালু করার সময়, কন্ট্রোল v2
GLargeZoomControl3D কন্ট্রোলের মতোই হয়, সাথে থাকে একটি অতিরিক্ত ইন্টারস্টিশিয়াল
ঘোরানোর কন্ট্রোল যা দিয়ে কাজ করে এমন দিকে ঘোরানো যায়।
আপনি কাজ করে এমন শহরের ম্যাপ থেকে
৪৫° ছবি উপলভ্য আছে এমন শহর ট্র্যাক করতে পারবেন। ৪৫° ছবি উপলভ্য হলে, Maps API স্যাটেলাইট বোতামে
একটি সাবমেনু বিকল্প যোগ করা হয়।
লেয়ার
লেয়ার হল ম্যাপের অবজেক্ট যা এক বা একাধিক ওভারলে নিয়ে
তৈরি হয়। এগুলি একটি ইউনিট হিসেবে ব্যবহার করা যায় এবং সাধারণত অবজেক্টের সংগ্রহ
দেখায়।
যেসব লেয়ার কাজ করে
v3 API বিভিন্ন লেয়ারে অ্যাক্সেস প্রদান করে। এইসব লেয়ার
নিম্নলিখিত এলাকায় v2 GLayer
ক্লাসের সাথে ওভারল্যাপ করে:
-
KmlLayer অবজেক্ট KML এবং GeoRSS এলিমেন্টকে
v3 ওভারলেতে রেন্ডার করে, v2 GeoXml লেয়ারের
সমতুল্য প্রদান করে।
TrafficLayer অবজেক্টটি v2 GTrafficOverlay ওভারলের মতো ট্রাফিক পরিস্থিতি
বর্ণনা করে একটি লেয়ার রেন্ডার করে।
এইসব লেয়ার v2-এর থেকে আলাদা। পার্থক্যগুলি নিচে
বর্ণনা করা হয়েছে। setMap() কল করে এগুলি ম্যাপে যোগ করা যেতে পারে,
Map অবজেক্ট পাস করে যার উপর
লেয়ার দেখানো হবে।
কাজ করে এমন লেয়ার সম্পর্কে আরও তথ্য
লেয়ার ডকুমেন্টেশনে উপলভ্য।
KML এবং GeoRSS লেয়ার
Maps JavaScript API ভৌগোলিক তথ্য দেখানোর জন্য KML এবং GeoRSS ডেটা ফর্ম্যাট
সমর্থন করে। আপনি কোনও ম্যাপে KML বা GeoRSS ফাইল অন্তর্ভুক্ত করতে চাইলে,
সেগুলি সর্বজনীনভাবে অ্যাক্সেসযোগ্য হতে হবে। v3-তে, এই
ডেটা ফর্ম্যাটগুলি KmlLayer-এর একটি ইনস্ট্যান্স ব্যবহার করে দেখানো হয়,
যা v2 থেকে GGeoXml অবজেক্টকে প্রতিস্থাপন করে।
KML রেন্ডার করার সময় v3 API আরও বেশি ফ্লেক্সিবল হয়, যা আপনাকে
InfoWindows বন্ধ করতে এবং ক্লিক রেসপন্স পরিবর্তন করতে দেয়। আরও তথ্যের জন্য v3 KML এবং GeoRSS লেয়ার ডকুমেন্টেশন দেখুন।
KmlLayer রেন্ডার করার সময়,
সাইজ ও জটিলতা সংক্রান্ত বিধিনিষেধ প্রযোজ্য হয়;
বিস্তারিত জানতে KmlLayer ডকুমেন্টেশন
দেখুন।
নিম্নলিখিত স্যাম্পেলগুলি KML ফাইল কীভাবে লোড করতে হয় তা তুলনা করে।
geoXml = new GGeoXml(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml');
map.addOverlay(geoXml);
var layer = new google.maps.KmlLayer(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml', {
preserveViewport: true
});
layer.setMap(map);
ট্রাফিক লেয়ার
v3-তে, আপনি TrafficLayer অবজেক্ট ব্যবহার করে আপনার ম্যাপে রিয়েল-টাইম ট্রাফিক তথ্য (যেখানে কাজ করে)
যোগ করতে পারবেন। অনুরোধ করার সময় ট্রাফিক সংক্রান্ত তথ্য
প্রদান করা হয়। এই উদাহরণগুলি লস অ্যাঞ্জেলেসের
ট্রাফিক তথ্য দেখায়:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(34.0492459, -118.241043), 13);
map.setUIToDefault();
var trafficOptions = {incidents:false};
trafficInfo = new GTrafficOverlay(trafficOptions);
map.addOverlay(trafficInfo);
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(34.0492459, -118.241043),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 13
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
v2-এর মতো v3-তে TrafficLayer
কনস্ট্রাক্টরের জন্য কোনও বিকল্প নেই। v3-এ ঘটনা উপলভ্য নেই।
পরিষেবা
জিওকোডিং
ব্যবহারকারীর ইনপুট থেকে ডায়নামিকভাবে ঠিকানা জিওকোড করার জন্য Maps JavaScript API একটি geocoder অবজেক্ট প্রদান করে। আপনি যদি
স্ট্যাটিক, পরিচিত ঠিকানা জিওকোড করতে চান, তাহলে
Geocoding API
ডকুমেন্টেশন দেখুন।
Geocoding API-কে
উল্লেখযোগ্যভাবে আপগ্রেড ও উন্নত করা হয়েছে, নতুন ফিচার যোগ করা হয়েছে এবং
ডেটা কীভাবে দেখানো হয় তা পরিবর্তন করা হয়েছে।
v2 API-তে GClientGeocoder ফরওয়ার্ড ও রিভার্স জিওকোডিংয়ের জন্য দুটি আলাদা পদ্ধতি
প্রদান করে, এর পাশাপাশি জিওকোডিং কীভাবে করা হয়েছে তা প্রভাবিত করার জন্য
অতিরিক্ত পদ্ধতিও প্রদান করে। এর বিপরীতে, v3
Geocoder অবজেক্ট শুধুমাত্র একটি geocode()
পদ্ধতি প্রদান করে, যা ইনপুট শব্দ (জিওকোডিং
অনুরোধ অবজেক্টের আকারে) এবং একটি কলব্যাক পদ্ধতি সহ একটি অবজেক্ট লিটারেল গ্রহণ করে। অনুরোধে টেক্সট সংক্রান্ত address অ্যাট্রিবিউট বা
LatLng অবজেক্ট আছে কিনা তার উপর নির্ভর করে, Geocoding API ফরওয়ার্ড বা
রিভার্স জিওকোডিং উত্তর দেবে। জিওকোডিং অনুরোধে অতিরিক্ত ফিল্ড যোগ করে আপনি জিওকোডিং কীভাবে
করা হবে তা প্রভাবিত করতে পারেন:
- টেক্সট
address অন্তর্ভুক্ত করলে ফরোয়ার্ড জিওকোডিং ট্রিগার হয়,
যা getLatLng() পদ্ধতি কল করার সমতুল্য।
latLng অবজেক্ট অন্তর্ভুক্ত করলে রিভার্স জিওকোডিং ট্রিগার হয়,
যা getLocations() পদ্ধতি কল করার সমতুল্য।
bounds অ্যাট্রিবিউট অন্তর্ভুক্ত করলে Viewport
Biasing চালু হয়, যা setViewport() মেথড কল করার সমতুল্য।
region অ্যাট্রিবিউট অন্তর্ভুক্ত করলে অঞ্চল
কোড বায়াসিং চালু হয়, যা setBaseCountryCode() পদ্ধতি
কল করার সমতুল্য।
v3-তে জিওকোডিং
উত্তর v2-এর উত্তর থেকে অনেক আলাদা। v3 API
v2-এর নেস্টেড স্ট্রাকচারকে আরও ফ্ল্যাট স্ট্রাকচার দিয়ে রিপ্লেস করে, যা
পার্স করা আরও সহজ। এছাড়াও, v3-এর উত্তর আরও বিস্তারিত: প্রতিটি
ফলাফলে একাধিক ঠিকানার
কম্পোনেন্ট থাকে যা প্রতিটি ফলাফলের রেজোলিউশন
সম্পর্কে আরও ভাল ধারণা দিতে সাহায্য করে।
নিম্নলিখিত কোডটি টেক্সট অ্যাড্রেস নেয় এবং জিওকোডিং থেকে প্রথম ফলাফল
দেখায়:
var geocoder = new GClientGeocoder();
var infoPanel;
var map;
var AccuracyDescription = [
'Unknown accuracy', 'country level accuracy',
'region level accuracy', 'sub-region level accuracy',
'town level accuracy', 'post code level accuracy',
'street level accuracy', 'intersection level accuracy',
'address level accuracy', 'premise level accuracy',
];
function geocode_result_handler(response) {
if (!response || response.Status.code != 200) {
alert('Geocoding failed. ' + response.Status.code);
} else {
var bounds = new GLatLngBounds(new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.south,
response.Placemark[0].ExtendedData.LatLonBox.west
), new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.north,
response.Placemark[0].ExtendedData.LatLonBox.east
));
map.setCenter(bounds.getCenter(),
map.getBoundsZoomLevel(bounds));
var latlng = new GLatLng(
response.Placemark[0].Point.coordinates[1],
response.Placemark[0].Point.coordinates[0]);
infoPanel.innerHTML += '<p>1st result is <em>' +
// No info about location type
response.Placemark[0].address +
'</em> of <em>' +
AccuracyDescription[response.Placemark[0].
AddressDetails.Accuracy] +
'</em> at <tt>' + latlng + '</tt></p>';
var marker_title = response.Placemark[0].address +
' at ' + latlng;
map.clearOverlays();
var marker = marker = new GMarker(
latlng,
{'title': marker_title}
);
map.addOverlay(marker);
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.getLocations(address, geocode_result_handler);
}
function initialize() {
map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(38, 15), 2);
map.setUIToDefault();
infoPanel = document.getElementById('info-panel');
}
var geocoder = new google.maps.Geocoder();
var infoPanel;
var map;
var marker;
function geocode_result_handler(result, status) {
if (status != google.maps.GeocoderStatus.OK) {
alert('Geocoding failed. ' + status);
} else {
map.fitBounds(result[0].geometry.viewport);
infoPanel.innerHTML += '<p>1st result for geocoding is <em>' +
result[0].geometry.location_type.toLowerCase() +
'</em> to <em>' +
result[0].formatted_address + '</em> of types <em>' +
result[0].types.join('</em>, <em>').replace(/_/, ' ') +
'</em> at <tt>' + result[0].geometry.location +
'</tt></p>';
var marker_title = result[0].formatted_address +
' at ' + latlng;
if (marker) {
marker.setPosition(result[0].geometry.location);
marker.setTitle(marker_title);
} else {
marker = new google.maps.Marker({
position: result[0].geometry.location,
title: marker_title,
map: map
});
}
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.geocode({'address': address}, geocode_result_handler);
}
function initialize() {
map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(38, 15),
zoom: 2,
mapTypeId: google.maps.MapTypeId.HYBRID
});
infoPanel = document.getElementById('info-panel');
}
দিকনির্দেশ
Maps JavaScript API v3, v2 থেকে GDirections
ক্লাসকে DirectionsService ক্লাস দিয়ে পরিবর্তন করে
দিকনির্দেশ গণনা করার জন্য।
v3-এর route() পদ্ধতি v2 API-এর
load() এবং loadFromWaypoints() পদ্ধতিকে
প্রতিস্থাপন করে। এই পদ্ধতিতে ইনপুট শব্দ সহ একটি DirectionsRequest অবজেক্ট লিটারাল
এবং উত্তর পাওয়ার পরে কার্যকর করার জন্য একটি কলব্যাক পদ্ধতি
ব্যবহার করা হয়। এই অবজেক্ট লিটারাল-এ বিকল্প দেওয়া হতে পারে,
v2-এ GDirectionsOptions অবজেক্ট লিটারাল-এর মতো।
Maps JavaScript API v3-তে, দিকনির্দেশ সংক্রান্ত অনুরোধ জমা দেওয়ার কাজ
রেন্ডারিং সংক্রান্ত অনুরোধের কাজ থেকে আলাদা করা হয়েছে, যা এখন
DirectionsRenderer ক্লাস দিয়ে ম্যানেজ করা হয়। আপনি setMap() এবং
setDirections() পদ্ধতির মাধ্যমে যেকোনও ম্যাপ বা
DirectionsResult অবজেক্টের সাথে
DirectionsRenderer অবজেক্ট টাই করতে পারবেন। রেন্ডারার একটি
MVCObject হওয়ার কারণে, এটি এর প্রপার্টিতে হওয়া যেকোনও পরিবর্তন শনাক্ত করবে এবং
সংশ্লিষ্ট দিকনির্দেশ পরিবর্তন হলে ম্যাপ আপডেট করবে।
নিম্নলিখিত কোড থেকে বোঝা যায় যে কীভাবে কোনও ঠিকানা থেকে পথচারীদের জন্য নির্দিষ্ট পথ ব্যবহার করে
নির্দিষ্ট লোকেশনে যাওয়ার জন্য হাঁটার দিকনির্দেশ অনুরোধ করতে হয়। মনে রাখবেন যে শুধুমাত্র
v3 ডাবলিনের চিড়িয়াখানায় পথচারীদের হাঁটার পথের দিকনির্দেশ
দিতে পারে।
var map;
var directions;
var directionsPanel;
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsPanel = document.getElementById("route");
map = new GMap2(document.getElementById('map'));
map.setCenter(origin, 10);
map.setUIToDefault();
directions = new GDirections(map, directionsPanel);
directions.loadFromWaypoints(
[origin, destination], {
travelMode: 'G_TRAVEL_MODE_WALKING',
});
}
var map;
var directionsRenderer;
var directionsService = new google.maps.DirectionsService();
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsRenderer = new google.maps.DirectionsRenderer();
map = new google.maps.Map(
document.getElementById('map'), {
center: origin,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
directionsRenderer.setPanel(document.getElementById("route"));
directionsRenderer.setMap(map);
directionsService.route({
origin: origin,
destination: destination,
travelMode: google.maps.DirectionsTravelMode.WALKING
}, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
}
});
}
Street View
Google Street View, কভারেজ এরিয়ার মধ্যে নির্দিষ্ট লোকেশন থেকে
ইন্টার্যাক্টিভ, ৩৬০° ভিউ প্রদান করে। v3 API ব্রাউজারের মধ্যে
Street View-কে নেটিভভাবে সাপোর্ট করে, v2-এর মতো নয়, যেখানে Street View ছবি দেখানোর জন্য
Flash® প্লাগ-ইন প্রয়োজন ছিল।
Street View ছবি v3-তে StreetViewPanorama অবজেক্ট
অথবা v2-তে GStreetviewPanorama অবজেক্ট
ব্যবহারের মাধ্যমে কাজ করে। এই ক্লাসগুলির
বিভিন্ন ইন্টারফেস আছে, কিন্তু তারা একই ভূমিকা পালন করে: div কন্টেনারকে Street View ছবির সাথে কানেক্ট করা এবং
আপনাকে Street View প্যানোরামার লোকেশন এবং POV (পয়েন্ট অফ ভিউ) নির্দিষ্ট করতে
দেওয়া।
function initialize() {
var fenwayPark = new GLatLng(42.345573, -71.098326);
panoramaOptions = {
latlng: fenwayPark,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new GStreetviewPanorama(
document.getElementById('pano'),
panoramaOptions);
GEvent.addListener(myPano, "error", handleNoFlash);
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
function initialize() {
var fenway = new google.maps.LatLng(42.345573, -71.098326);
var panoramaOptions = {
position: fenway,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'),
panoramaOptions);
}
Street View ডেটা সরাসরি অ্যাক্সেস করা সম্ভব v3-তে
StreetViewService অবজেক্ট বা v2-তে একই ধরনের
GStreetviewClient অবজেক্টের মাধ্যমে। Street View ডেটার উপলভ্যতা চেক করা বা তা ফিরিয়ে আনার জন্য
দুটিই একই ধরনের ইন্টারফেস প্রদান করে এবং
লোকেশন বা প্যানোরামা আইডি দিয়ে সার্চ করার অনুমতি দেয়।
v3-এ Street View ডিফল্ট হিসেবে চালু করা থাকে। ম্যাপটি Street View পেগম্যান কন্ট্রোলের সাথে দেখা যাবে এবং API, StreetView প্যানোরামা দেখানোর জন্য ম্যাপ div আবার ব্যবহার করবে। Street View প্যানোরামা আলাদা div-এ ভাগ করে কীভাবে v2 আচরণ এমুলেট করতে হয় তা
নিম্নলিখিত কোডে দেখানো হয়েছে।
var marker;
var panoClient = new GStreetviewClient();
function initialize() {
if (GBrowserIsCompatible()) {
var myPano = new GStreetviewPanorama(
document.getElementById('pano'));
GEvent.addListener(myPano, 'error', handleNoFlash);
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(42.345573, -71.098326), 16);
map.setUIToDefault();
GEvent.addListener(map, 'click', function(overlay, latlng) {
if (marker) {
marker.setLatLng(latlng);
} else {
marker = new GMarker(latlng);
map.addOverlay(marker);
}
var nearestPano = panoClient.getNearestPanorama(
latlng, processSVData);
});
function processSVData(panoData) {
if (panoData.code != 200) {
alert("Panorama data not found for this location.");
}
var latlng = marker.getLatLng();
var dLat = latlng.latRadians()
- panoData.location.latlng.latRadians();
var dLon = latlng.lngRadians()
- panoData.location.latlng.lngRadians();
var y = Math.sin(dLon) * Math.cos(latlng.latRadians());
var x = Math.cos(panoData.location.latlng.latRadians()) *
Math.sin(latlng.latRadians()) -
Math.sin(panoData.location.latlng.latRadians()) *
Math.cos(latlng.latRadians()) * Math.cos(dLon);
var bearing = Math.atan2(y, x) * 180 / Math.PI;
myPano.setLocationAndPOV(panoData.location.latlng, {
yaw: bearing
});
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
}
}
// Load the API with libraries=geometry
var map;
var marker;
var panorama;
var sv = new google.maps.StreetViewService();
function radians(degrees) { return Math.PI * degrees / 180.0 };
function initialize() {
panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano"));
map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(42.345573, -71.098326),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 16
});
google.maps.event.addListener(map, 'click', function(event) {
if (!marker) {
marker = new google.maps.Marker({
position: event.latLng,
map: map
});
} else {
marker.setPosition(event.latLng);
}
sv.getPanoramaByLocation(event.latLng, 50, processSVData);
});
}
function processSVData(panoData, status) {
if (status == google.maps.StreetViewStatus.OK) {
alert("Panorama data not found for this location.");
}
var bearing = google.maps.geometry.spherical.computeHeading(
panoData.location.latLng, marker.getPosition());
panorama.setPano(panoData.location.pano);
panorama.setPov({
heading: bearing,
pitch: 0,
zoom: 1
});
panorama.setVisible(true);
marker.setMap(panorama);
}