গুগল ম্যাপস এপিআই ভি 3: আমি ফিটবাউন্ডের পরে জুম সেট করতে পারি?


201

আমার এম্বেড থাকা গুগল ম্যাপে (এপিআই ভি 3) প্লট করতে চাই এমন পয়েন্টগুলির একটি সেট রয়েছে। জুম স্তরটি খুব কম না হলে (যেমন, খুব বেশি জুম আউট করা) না থাকলে আমি সমস্ত পয়েন্টের সীমানা যুক্ত করতে চাই। আমার পন্থাটি এরকম হয়েছে:

var bounds = new google.maps.LatLngBounds();

// extend bounds with each point

gmap.fitBounds(bounds); 
gmap.setZoom( Math.max(6, gmap.getZoom()) );

এটি কাজ করে না। শেষ লাইন "gmap.setZoom ()" মানচিত্রের জুম স্তর পরিবর্তন করে না যদি ফিটবাউন্ডসের পরে সরাসরি ডাকা হয়।

মানচিত্রটিতে প্রয়োগ না করে কোনও সীমার জুম স্তর পাওয়ার কোনও উপায় আছে কি? এটি সমাধান করার জন্য অন্যান্য ধারণা?


1
Stackoverflow.com/questions/4523023/using-setzoom-after-using-fitbounds-with-google-maps-api-v3 দেখুন
Mawg বলেছেন পুনর্বহাল মনিকা

উত্তর:


337

সম্পাদনা করুন : নীচে ম্যাট ডায়মন্ডের মন্তব্য দেখুন।

বুঝেছি! এটা চেষ্টা কর:

map.fitBounds(bounds);
var listener = google.maps.event.addListener(map, "idle", function() { 
  if (map.getZoom() > 16) map.setZoom(16); 
  google.maps.event.removeListener(listener); 
});

আপনার প্রয়োজনে পরিবর্তন করুন।


76
দুর্দান্ত সমাধান, পুরোপুরি আমাকে অনেক ঝামেলা বাঁচিয়েছে। কেবল যুক্ত করতে চেয়েছিলেন যে আপনি অ্যাডলিস্টনারঅনস পদ্ধতিটি ব্যবহার করে আরও সহজ করতে পারেন ... এইভাবে, আপনাকে শ্রোতাদের সংরক্ষণ করতে হবে না এবং ম্যানুয়ালি এটি মুছে ফেলতে হবে না, কারণ পদ্ধতিটি আপনার জন্য এটি যত্ন নেবে।
ম্যাট ডায়মন্ড

9
"স্কিপ" মানচিত্রটি দেখার আচরণ এখানে রয়েছে। পরিবর্তে "জুম_চেঞ্জ" ইভেন্টটি শুনুন এবং ফিটবাউন্ডগুলি () কল করার আগে এটি সেট আপ করুন। নীচে আমার উত্তরটি দেখুন
বেনিয়ামিন সুসমান

ধন্যবাদ! google.maps.event.addListenerOnce (মানচিত্র, "অলস", ফাংশন () {} -> সুগার সিআরএম এর জন্য আমার মানচিত্রের প্যাকেজের জন্য দুর্দান্ত কাজ করেছে
jjwdesign

শ্রোতা আমার জন্য ট্রিগার হয় না। আমি এটি ডকুমেন্ট.ডিআর এবং উইন্ডো.লোডে চেষ্টা করেছি। কোন ধারনা? মানচিত্র অবজেক্ট ঠিক আছে এবং অ্যাডলিস্টনার চেষ্টা করেও: `var map = $ (" # js-main-map-canvas "); var শ্রোতা = google.maps.event.addListenerOnce (মানচিত্র, "নিষ্ক্রিয়", ফাংশন () {সতর্কতা ('হ্যালো');}); `
হেনরিক এরল্যান্ডসন

হেনরিক, $ ("# জেএস-মেইন-ম্যাপ-ক্যানভাস") [0] বা try ("# ​​জেএস-মেইন-ম্যাপ-ক্যানভাস") ব্যবহার করে দেখুন (0);
রাফায়েল

68

আমি আমার অ্যাপ্লিকেশনগুলির একটিতে একই ধরণের সমস্যার সমাধান করেছি। আপনার সমস্যার বর্ণনা দিয়ে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম তবে আমার মনে হয় আপনার আমার একই লক্ষ্য ছিল ...

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

সমাধানটি ছিল যখন অনেকগুলি পয়েন্ট ছিল তখন ফিটবাউন্ডগুলি ব্যবহার করা এবং যখন কেবলমাত্র একটি পয়েন্ট থাকত সেটসেন্টার + সেটজুম।

if (pointCount > 1) {
  map.fitBounds(mapBounds);
}
else if (pointCount == 1) {
  map.setCenter(mapBounds.getCenter());
  map.setZoom(14);
}

5
আপনার উত্তরটি Google মানচিত্র ভি 3 এর সাথে আমার সমস্যার সমাধান করেছে। ধন্যবাদ!
এফআর

1
আমি ঠিক একই সমস্যা ছিল, এবং আপনার সমাধান কাজ করে! ধন্যবাদ!
manubkk

আমি নিজেই একই পদ্ধতির চেষ্টা করছিলাম কিন্তু এটি কার্যকর হয়নি কারণ জুম স্থাপনের আগে আমি সেট সেন্টার () কে আহ্বান করছিলাম না ... আমি এখনও ভাবছি কেন এই পদক্ষেপের প্রয়োজন, তবে যাইহোক এখন এটি কার্যকর হয় ... ধন্যবাদ একটি অনেক জিম!
ডেভনকোড

মানচিত্র কেন্দ্র আমার যে সমস্যাটি ছিল তা সমাধান করেছে! দুর্দান্ত এক +1
পাইটর কুলা

1
আপনার ভাল উত্তরের জন্য ধন্যবাদ +1
ভারত চোদবদিয়া

44

উত্তর পেতে আমি এই পৃষ্ঠায় একাধিকবার এসেছি এবং বিদ্যমান সমস্ত উত্তর অত্যন্ত সহায়ক হলেও তারা আমার সমস্যার ঠিক সমাধান করেনি।

google.maps.event.addListenerOnce(googleMap, 'zoom_changed', function() {
    var oldZoom = googleMap.getZoom();
    googleMap.setZoom(oldZoom - 1); //Or whatever
});

মূলত আমি দেখতে পেলাম যে 'জুম_চেন্জড' ইভেন্টটি মানচিত্রের ইউআইটিকে "এড়িয়ে যাওয়া" থেকে আটকাচ্ছে যা ঘটেছে যখন আমি 'নিষ্ক্রিয়' ইভেন্টের জন্য অপেক্ষা করছিলাম।

আশা করি এটি কারও সাহায্য করবে!


4
দুর্দান্ত, আমারও 'স্কিপিং / অটো-জুমিং' আচরণ ছিল। ঠিক যেমন অন্য পাঠকদের জন্য একটি দ্রষ্টব্য: বেনজমিন "অ্যাডলিস্টনার" এর পরিবর্তে উপরের মতো "অ্যাডলিস্টনারঅনস" ব্যবহার করতে ভুলবেন না, বা আপনার ব্রাউজারটি কেন সবসময় ক্র্যাশ হয় সে সম্পর্কে আপনার মাথাটি ভেঙে দিন ;-)
-এ গের্ত-জানু

6
এছাড়াও মনে রাখবেন শ্রোতাদের fitBounds()যদি কল করার আগে ফোন করার আগে যুক্ত করা উচিতzoom_changed
জ্যাপল

1
এর জন্য ধন্যবাদ, দেখে মনে হচ্ছে ভি 4-র একটি ফিটবাউন্ডস (সীমানা, মিনিজমিয়েভেল) হওয়া উচিত :)
রিচার্ড

3
বেনিয়ামিন, আমি মনে করি এটি ব্যবহার করা ভাল bounds_changed, কারণ জুম স্তর zoom_changedরাখার ক্ষেত্রে ক্ষেত্রে ট্রিগার করতে হবে না fitBounds। আমার প্রচেষ্টা jsfiddle.net/rHeMp/10 এটি নিশ্চিত করে না, তবে একটিকে অপরিজ্ঞাত আচরণের উপর নির্ভর করা উচিত নয়।
টিএমএস

10

আগেই সর্বোচ্চ জুম সেট করে আমি এটি ঠিক করেছি, তারপরে এটি সরিয়ে ফেলছি। উদাহরণ স্বরূপ:

map.setOptions({ maxZoom: 15 });
map.fitBounds(bounds);
map.setOptions({ maxZoom: null });

খুব বেশি জুম করা প্রতিরোধের জন্য সেরা সমাধান। সহজ এবং স্বজ্ঞাত। কোনও অঙ্কন এবং মানচিত্রের পুনরায় অঙ্কন নয়।
ব্যবহারকারী2605793

এটি প্রকৃতপক্ষে এখন পর্যন্ত সেরা ওয়ালকারআউন্ড।
ডাউনহিলসকি

2
আমি খুঁজে পেয়েছি যে ফিটবাউন্ডগুলি কল করার সাথে সাথে আপনি ম্যাক্সজুম পুনরায় সেট করুন তবে এটি কাজ করে না, কারণ জুমটি তাত্পর্যপূর্ণ হয়ে যায় (সুতরাং ম্যাক্সজুমটি জুমটি শেষ হওয়ার সাথে সাথে আবার বাতিল হয়ে যায়)। এটি পুনরায় সেট করতে "অলস" না হওয়া পর্যন্ত অপেক্ষা করা এটি ঠিক করে দেবে যদিও আমার ধারণা।
ব্যবহারকারী 987356

4

আমি যদি ভুল না হয়ে থাকি তবে আমি ধরে নিচ্ছি যে আপনি চান যে আপনার সমস্ত পয়েন্ট মানচিত্রে সর্বাধিক সম্ভব জুম স্তরের সাথে দৃশ্যমান হোক। আমি মানচিত্রের জুম স্তরটি 16 এ শুরু করে এটি সম্পাদন করেছি (এটি V3- এ সর্বোচ্চ সম্ভাব্য জুম স্তর কিনা তা নিশ্চিত নয়)।

var map = new google.maps.Map(document.getElementById('map_canvas'), {
  zoom: 16,
  center: marker_point,
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

তারপরে আমি সীমাবদ্ধ জিনিসগুলি করেছি:

var bounds = new google.maps.LatLngBounds();

// You can have a loop here of all you marker points
// Begin loop
bounds.extend(marker_point);
// End loop

map.fitBounds(bounds);

ফলাফল: সাফল্য!


3

আমি ব্যবহার করি:

gmap.setZoom(24); //this looks a high enough zoom value
gmap.fitBounds(bounds); //now the fitBounds should make the zoom value only less

এটি আপনার কোড অনুসারে 24 এর চেয়ে ছোট এবং প্রয়োজনীয় জুম স্তরটি ব্যবহার করবে, তবে এটি সম্ভবত যেভাবেই হোক জুম পরিবর্তন করে এবং আপনি কতটা জুম আউট করেছেন সে সম্পর্কে কোনও চিন্তা করে না।


আমি এটি বলতে ঘৃণা করি, তবে উত্তরটি যতটা অদ্ভুত লাগছিল, এটি এখন পর্যন্ত কাজ করা একমাত্র জিনিস এবং আমি 3 দিনের ব্যবধানে 4-5 ঘন্টা অনুসন্ধান করেছি। এখনও আরও ভাল সমাধান অনুসন্ধান করা হবে।
আলভ

3

দয়া করে এটি চেষ্টা করুন:

map.fitBounds(bounds);

// CHANGE ZOOM LEVEL AFTER FITBOUNDS
zoomChangeBoundsListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
  if (this.getZoom()){
    this.setZoom(15);
  }
});
setTimeout(function(){
  google.maps.event.removeListener(zoomChangeBoundsListener)
}, 2000);

2

আমার একই সমস্যা ছিল এবং আমি নিম্নলিখিত কোডটি ব্যবহার করে এটি সমাধান করতে সক্ষম হয়েছি। এই শ্রোতা ( google.maps.addListenerOnce()) ইভেন্টটি map.fitBounds()মৃত্যুদন্ড কার্যকর হওয়ার পরে, কেবল একবার বরখাস্ত করা হবে । সুতরাং, কোন প্রয়োজন নেই

  1. শ্রোতার ট্র্যাক রাখুন এবং ম্যানুয়ালি মুছে ফেলুন, বা
  2. মানচিত্রটি না হওয়া পর্যন্ত অপেক্ষা করুন idle

এটি প্রাথমিকভাবে উপযুক্ত জুম স্তর নির্ধারণ করে এবং ব্যবহারকারীকে প্রাথমিক জুম স্তরটি জুম ইন এবং আউট করতে দেয় কারণ ইভেন্ট শ্রোতার মেয়াদ শেষ হয়ে গেছে। উদাহরণস্বরূপ, যদি কেবল কল google.maps.addListener()করা হয়, তবে ব্যবহারকারী কখনই জুম-ইন করতে পারবেন না বর্ণিত জুম স্তরের (ক্ষেত্রে, 4) অতীতে past যেহেতু আমরা প্রয়োগ করেছি google.maps.addListenerOnce(), ব্যবহারকারী তার / তার পছন্দ অনুযায়ী যে কোনও স্তরে জুম করতে সক্ষম হবে।

map.fitBounds(bounds);

var zoom_level_for_one_marker = 4;

google.maps.event.addListenerOnce(map, 'bounds_changed', function(event){
   if (this.getZoom() >= zoom_level_for_one_marker){  
       this.setZoom(zoom_level_for_one_marker) 
   }
});

2

একই সমস্যা ছিল, মানচিত্রে অনেকগুলি চিহ্নিতকারীকে ফিট করতে হবে। এটি আমার ক্ষেত্রে সমাধান করেছে:

  1. সীমা ঘোষণা করুন
  2. কোডেরয়েড দ্বারা সরবরাহিত স্কিম ব্যবহার করুন (প্রতিটি চিহ্নিতকারী সেট জন্য bounds.extend(objLatLng))
  3. মানচিত্রটি সম্পূর্ণ হওয়ার পরে ফিটবাউন্ডগুলি কার্যকর করুন:

    google.maps.event.addListenerOnce(map, 'idle', function() { 
        map.fitBounds( bounds );
    });

2

আমি এমন একটি সমাধান পেয়েছি যা কল fitBoundsকরার আগে যাচাই করে যা আপনি জুম ইন করেন না এবং হঠাৎ জুম আউট করেন

var bounds = new google.maps.LatLngBounds();

// extend bounds with each point

var minLatSpan = 0.001;
if (bounds.toSpan().lat() > minLatSpan) {
    gmap.fitBounds(bounds); 
} else {
    gmap.setCenter(bounds.getCenter());
    gmap.setZoom(16);
}

আপনি যেখানে চান সেখানে পেতে আপনাকে মিনিট্যাটস্প্যান ভেরিয়েবলের সাথে কিছুটা খেলতে হবে। এটি জুম-লেভেল এবং মানচিত্রের ক্যানভাসের মাত্রার উভয়ের ভিত্তিতে পৃথক হবে।

আপনি অক্ষাংশের পরিবর্তে দ্রাঘিমাংশ ব্যবহার করতে পারেন


আমার জন্য কাজ করে, তবে আমি মিনিল্যাটস্প্যান ব্যবহার করছি না - মানচিত্রটিতে কেবলমাত্র 1 টি চিহ্নিতকারী থাকাকালীন আমাকে জুম সেট করতে হবে। সুতরাং আমি কেবল আরও 1 জন চিহ্নিতকারী আছে কিনা তা পরীক্ষা করছি।
মাইক্রার

2

আমি অনেকগুলি ভুল বা খুব জটিল সমাধান দেখেছি, সুতরাং একটি কার্যকরী, মার্জিত সমাধান পোস্ট করার সিদ্ধান্ত নিয়েছি ।

setZoom()আপনার প্রত্যাশার মতো কারণটি কাজ করে না এটি fitBounds()হ'ল অ্যাসিনক্রোনাস, সুতরাং এটি কোনও গ্যারান্টি দেয় না যে এটি তাত্ক্ষণিকভাবে জুম আপডেট করবে, কিন্তু আপনার কলটি setZoom()নির্ভর করে।

আপনি যা বিবেচনা করতে পারেন তা হ'ল minZoomকল করার আগে মানচিত্রের বিকল্পটি সেট করা fitBounds()এবং এটি সম্পূর্ণ হওয়ার পরে এটি পরিষ্কার করা (যাতে ব্যবহারকারীরা এখনও চাইলে তারা ম্যানুয়ালি জুম আউট করতে পারেন):

var bounds = new google.maps.LatLngBounds();
// ... (extend bounds with all points you want to fit)

// Ensure the map does not get too zoomed out when fitting the bounds.
gmap.setOptions({minZoom: 6});
// Clear the minZoom only after the map fits the bounds (note that
// fitBounds() is asynchronous). The 'idle' event fires when the map
// becomes idle after panning or zooming.
google.maps.event.addListenerOnce(gmap, 'idle', function() {
  gmap.setOptions({minZoom: null});
});

gmap.fitBounds(bounds);

এছাড়াও, আপনি যদি সর্বাধিক জুমকেও সীমাবদ্ধ করতে চান তবে আপনি maxZoomসম্পত্তিটির সাথে একই কৌশলটি প্রয়োগ করতে পারেন ।

মানচিত্রের ডকগুলি দেখুন ।


1

জুম স্তরটি কোনও সেট স্তরের বেশি না হয় তা নিশ্চিত করতে আমি এটি ব্যবহার করি যাতে আমি জানি যে উপগ্রহ চিত্র পাওয়া যাবে।

zoom_changedইভেন্টটিতে শ্রোতা যুক্ত করুন । এটি ইউআইতেও জুম নিয়ন্ত্রণ নিয়ন্ত্রণ করার অতিরিক্ত সুবিধা রয়েছে।

setZoomআপনার প্রয়োজন হলে কেবল সম্পাদন করুন , সুতরাং একটি ifবিবৃতি Math.maxবা তার চেয়ে বেশি পছন্দযোগ্যMath.min

   google.maps.event.addListener(map, 'zoom_changed', function() { 
      if ( map.getZoom() > 19 ) { 
        map.setZoom(19); 
      } 
    });
    bounds = new google.maps.LatLngBounds( ... your bounds ... )
    map.fitBounds(bounds);

খুব দূরে জুম করা রোধ করতে:

   google.maps.event.addListener(map, 'zoom_changed', function() { 
      if ( map.getZoom() < 6 ) { 
        map.setZoom(6); 
      } 
    });
    bounds = new google.maps.LatLngBounds( ... your bounds ... )
    map.fitBounds(bounds);

1

এই ফাংশনে, আপনাকে জ্যামিতির ধরণের সঞ্চয় করতে গতিশীলভাবে মেটাডেটা যুক্ত করতে হবে কারণ ফাংশনটি কোনও জ্যামিতি গ্রহণ করে।

"ফিটGeometries" একটি JSON ফাংশন যা মানচিত্রের অবজেক্টকে প্রসারিত করে।

"জ্যামিতিগুলি" একটি জেনারিক জাভাস্ক্রিপ্ট অ্যারে, এমভিসিএআর্রেই নয় ()।

geometry.metadata = { type: "point" };
var geometries = [geometry];

fitGeometries: function (geometries) {
    // go and determine the latLngBounds...
    var bounds = new google.maps.LatLngBounds();
    for (var i = 0; i < geometries.length; i++) {
        var geometry = geometries[i];
        switch (geometry.metadata.type)
        {
            case "point":
                var point = geometry.getPosition();
                bounds.extend(point);
                break;
            case "polyline":
            case "polygon": // Will only get first path
                var path = geometry.getPath();
                for (var j = 0; j < path.getLength(); j++) {
                    var point = path.getAt(j);
                    bounds.extend(point);
                }
                break;
        }
    }
    this.getMap().fitBounds(bounds);
},

পর্যায়ক্রমে, আমি ল্যাটলংবাউন্ডস অবজেক্টে একটি বর্ধিত () পদ্ধতি আছে তা জেনেও সমস্ত কাজ করেছি। এটি অনেক সহজ হবে।
ক্রেজিইনিগমা

1

এই কাজটি আমার জন্য এপিআই ভি 3 দিয়ে তবে স্থির জুম সেট করার সাথে:

var bounds = new google.maps.LatLngBounds();
// extend bounds with each point

gmap.setCenter(bounds.getCenter()); 
gmap.setZoom( 6 );

1

আমার মতো, আপনি যদি শ্রোতাদের সাথে খেলতে ইচ্ছুক না হন তবে এটিই একটি সহজ সমাধান যা আমি এনেছি: মানচিত্রে এমন একটি পদ্ধতি যুক্ত করুন যা আপনার প্রয়োজন অনুসারে কঠোরভাবে কাজ করে:

    map.fitLmtdBounds = function(bounds, min, max){
        if(bounds.isEmpty()) return;
        if(typeof min == "undefined") min = 5;
        if(typeof max == "undefined") max = 15;

        var tMin = this.minZoom, tMax = this.maxZoom;
        this.setOptions({minZoom:min, maxZoom:max});
        this.fitBounds(bounds);
        this.setOptions({minZoom:tMin, maxZoom:tMax});
    }

তারপরে আপনি সংজ্ঞায়িত জুম রেঞ্জের অধীনে সীমানা সেট করার map.fitLmtdBounds(bounds)পরিবর্তে map.fitBounds(bounds)... বা map.fitLmtdBounds(bounds,3,5)জুম রেঞ্জটিকে ওভাররাইড করার জন্য কল করতে পারেন ..


0

এটি চেষ্টা করুন।

// Find out what the map's zoom level is
zoom = map.getZoom();
if (zoom == 1) {
  // If the zoom level is that low, means it's looking around the
world.
  // Swap the sw and ne coords
  viewportBounds = new
google.maps.LatLngBounds(results[0].geometry.location, initialLatLng);
  map.fitBounds(viewportBounds);
}

এটি যদি আপনার পক্ষে সহায়ক হয়।

শুভকামনা


0

সীমানা গণনার পরে আপনি উপরের বাম এবং নীচে ডান কোণার মধ্যবর্তী দূরত্বটি পরীক্ষা করতে পারেন; তারপরে আপনি দূরত্বটি পরীক্ষা করে জুম স্তর বুঝতে পারবেন (যদি দূরত্বটি খুব বেশি জুমের স্তর কম থাকে) তবে আপনি সেটবাউন্ড পদ্ধতি বা সেটজুম ব্যবহার করে চাকা নির্বাচন করতে পারেন ..


0

আমি এটির পরামর্শ দিতে পছন্দ করি না তবে আপনার যদি অবশ্যই চেষ্টা করা হয় - প্রথমে কল করুন

gmap.fitBounds(bounds);

তারপরে একটি নতুন থ্রেড / অ্যাসিঙ্কটাস্ক তৈরি করুন, এটি 20-50 মিমি বা তার জন্য ঘুমান এবং তারপরে কল করুন

gmap.setZoom( Math.max(6, gmap.getZoom()) );

ইউআই থ্রেড থেকে (হ্যান্ডলার বা onPostExecuteঅ্যাসিঙ্কটাস্কের পদ্ধতিটি ব্যবহার করুন)।

আমি জানি না এটি কাজ করে, কেবলমাত্র একটি পরামর্শ। এর বাইরে আপনাকে নিজের পয়েন্ট থেকে কোনওভাবে জুম লেভেলটি গণনা করতে হবে, এটি খুব কম কিনা তা পরীক্ষা করে দেখুন, এটি সংশোধন করুন এবং তারপরে কেবল কল করুনgmap.setZoom(correctedZoom)


0

যদি 'সীমানা_চেন্জড' সঠিকভাবে গুলি চালাচ্ছে না (কখনও কখনও গুগল স্থানাঙ্কগুলি পুরোপুরি গ্রহণ করে না বলে মনে হয়), তবে পরিবর্তে 'কেন্দ্রে_চেন্জড' ব্যবহারের বিষয়টি বিবেচনা করুন।

'সেন্টার_চেঞ্জড' ইভেন্টটি প্রতিবার ফিটবাউন্ডস () নামে ডাকা হয়, যদিও তা অবিলম্বে চলে এবং মানচিত্রটি সরানোর পরে অগত্যা নয়।

সাধারণ ক্ষেত্রে, 'নিষ্কলুষ' এখনও ইভেন্টের সেরা শ্রোতা, তবে এটি কয়েকজন লোককে তাদের ফিটবাইন্ডস () কলগুলির সাথে অদ্ভুত সমস্যাগুলির মধ্যে দৌড়ে সহায়তা করতে পারে।

দেখুন Google মানচিত্র fitBounds কলব্যাক


0

অন্য একটি সমাধানের সাথে মিল রেখে - আমি দেখতে পেয়েছি যে "সীমানা_চেনা ইভেন্টের জন্য শুনুন এবং তারপরে নতুন জুম সেট করুন" পদ্ধতিটি আমার পক্ষে নির্ভরযোগ্যভাবে কাজ করে না। আমি মনে করি যে fitBoundsমানচিত্রটি সম্পূর্ণরূপে শুরু হওয়ার আগে আমি কখনও কখনও কল করেছিলাম এবং সূচনাটি fitBoundsসীমানা এবং জুম স্তর পরিবর্তন করার আগে শ্রোতাদের ব্যবহার করতে পারে এমন একটি বাউন্ড_চেঞ্জড ইভেন্ট ঘটাচ্ছে । আমি এই কোডটি দিয়ে শেষ করেছি, যা এখনও পর্যন্ত কাজ করে বলে মনে হচ্ছে:

// If there's only one marker, or if the markers are all super close together,
// `fitBounds` can zoom in too far. We want to limit the maximum zoom it can
// use.
//
// `fitBounds` is asynchronous, so we need to wait until the bounds have
// changed before we know what the new zoom is, using an event handler.
//
// Sometimes this handler gets triggered by a different event, before
// `fitBounds` takes effect; that particularly seems to happen if the map
// hasn't been fully initialized yet. So we don't immediately remove the
// listener; instead, we wait until the 'idle' event, and remove it then.
//
// But 'idle' might happen before 'bounds_changed', so we can't set up the
// removal handler immediately. Set it up in the first event handler.

var removeListener = null;
var listener = google.maps.event.addListener(map, 'bounds_changed', () => {
  console.log(map.getZoom());
  if (map.getZoom() > 15) {
    map.setZoom(15);
  }

  if (!removeListener) {
    removeListener = google.maps.event.addListenerOnce(map, 'idle', () => {
      console.log('remove');
      google.maps.event.removeListener(listener);
    });
  }
});

0

আমার কাছে সবচেয়ে সহজ সমাধানটি ছিল:

map.fitBounds(bounds);

function set_zoom() {
    if(map.getZoom()) {map.setZoom(map.getZoom() - 1);}
    else {setTimeout(set_zoom, 5);}
}
setTimeout(set_zoom, 5);

-1
google.maps.event.addListener(marker, 'dblclick', function () {
    var oldZoom = map.getZoom(); 
    map.setCenter(this.getPosition());
    map.setZoom(parseInt(oldZoom) + 1);
});

-3

আমি যা করেছি তা হ'ল:

map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

এবং এটি ভি 3 এপিআইতে কাজ করে।


map.setCenter কেবল একটি বৈশিষ্ট্য গ্রহণ করে, ল্যাটল্যাং করে এবং মানচিত্রের getBoutsZoomLevel এর মতো কোনও কার্য নেই
ভিক্টর

আমি ভেবেছিলাম এই পোস্টটি দেখার পরে getBoundsZoomLevel এর মতো কোনও ফাংশন আছে এবং আমি বুঝতে পারি না যে সেখানে নেই।
সেদ্রান

আমার মনে হয় getBoundsZoomLevel () গুগল ম্যাপস ভি 2 এপিআই তে উপলব্ধ ছিল এবং ভি 3 এপিআই তে নেই
কুশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.