javascript - خرائط جوجل v3: إنفاذ دقيقة. مستوى التكبير عند استخدام fitBounds



3 Answers

بدون تجربة ذلك ، أود أن أقول أنه يجب أن تكون قادرا على القيام بذلك فقط من خلال وجود fitBounds() قبل الحصول على مستوى التكبير ، أي

map.fitBounds(bounds);
var zoom = map.getZoom();
map.setZoom(zoom > 6 ? 6 : zoom);

إذا قمت بمحاولة ذلك ولم تنجح ، يمكنك إعداد الخريطة الخاصة بك مع minZoom في MapOptions (api-reference) MapOptions (api-reference) مثل هذا:

var map = new google.maps.Map(document.getElementById("map"), { minZoom: 6 });

هذا من شأنه أن يبقي على الخريطة من أي تكبير آخر عند استخدام fitBounds() .

javascript google-maps google-maps-api-3 fitbounds

أنا أرسم سلسلة من العلامات على خريطة (باستخدام الإصدار 3 من خرائط api).

في الإصدار الثاني ، كان لدي الشفرة التالية:

  bounds = new GLatLngBounds();

  ... loop thru and put markers on map ...
  bounds.extend(point);
  ... end looping

  map.setCenter(bounds.getCenter());
  var level = map.getBoundsZoomLevel(bounds);
  if ( level == 1 ) 
    level = 5;
  map.setZoom(level > 6 ? 6 : level);

ويعمل ذلك على ما يرام لضمان وجود مستوى مناسب من التفاصيل المعروضة على الخريطة.

أحاول تكرار هذه الوظيفة في الإصدار 3 ، ولكن يبدو أن setZoom و fitBounds لا يتعاونان:

... loop thru and put markers on the map
  var ll = new google.maps.LatLng(p.lat,p.lng);
  bounds.extend(ll);
... end loop

var zoom = map.getZoom();
map.setZoom(zoom > 6 ? 6 : zoom);
map.fitBounds(bounds);

لقد حاولت تجزئة مختلفة (نقل fitBounds قبل setZoom ، على سبيل المثال) ولكن لا شيء أقوم به مع setZoom يؤثر على الخريطة. هل فاتني شيء؟ هل هناك طريقة للقيام بذلك؟




يمكنك أيضًا تعيين خيار maxZoom قبل استدعاء fitBounds () وإعادة تعيين القيمة بعد ذلك:

if(!bounds.isEmpty()) {
    var originalMaxZoom = map.maxZoom;
    map.setOptions({maxZoom: 18});
    map.fitBounds(bounds);
    map.setOptions({maxZoom: originalMaxZoom});
}



في حالتي ، أردت ببساطة تعيين مستوى التكبير إلى واحد أقل مما اختارتني خرائط google بالنسبة لي أثناء fitBounds. كان الغرض من استخدام fitBounds ، ولكن أيضا ضمان عدم وجود علامات تحت أي أدوات الخريطة ، الخ

يتم إنشاء خريطتي في وقت مبكر ، وبعد ذلك يتوفر عدد من المكونات الديناميكية الأخرى للصفحة لإمكانية إضافة علامات ، مع وضع علامات تلائم بعد كل إضافة.

هذا في الكتلة الأولية حيث يتم إنشاء كائن الخريطة في الأصل ...

var mapZoom = null;

ثم يتم إضافة هذا إلى كل كتلة حيث يتم إضافة علامة ، الحق قبل map.fitBounds يسمى ...

google.maps.event.addListenerOnce(map, 'bounds_changed', function() { 
    if (mapZoom != map.getZoom()) { 
        mapZoom = (map.getZoom() - 1); 
        map.setZoom(mapZoom); 
    } 
});

عند استخدام "bounds_changed" بدون مكان تسجيل الوصول ، يتم تكبير الخريطة مرة واحدة لكل علامة بغض النظر عما إذا كانت مطلوبة أم لا. وبالعكس ، عندما استخدمت "zoom_changed" ، كنت أقوم أحيانًا بوضع علامات ضمن أدوات الخريطة لأن التكبير / التصغير لم يتغير بالفعل. الآن يتم تشغيلها دائمًا ، ولكن التحقق يضمن عدم التكبير إلا مرة واحدة وفقط عند الحاجة.

أتمنى أن يساعدك هذا.




Related