Клуб API Карт

Пара пожеланий

Пост в архиве.

 

  1. Есть задача отобразить энное количество объектов на карте, узнав где их центр и выставить максимально большой зум так, чтобы они все отобразились на карте.

 


Вариант гугла:

var bound=new GLatLngBounds();

bound.extend(new GLatLng(Ширина, Долгота)); /// ИТАК ВСЕ ТОЧКИ УКАЗАТЬ

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


в варианте яндекса надо знать координаты юго-западного и северо-восточного углов, которые видимо надо высчитывать самому.


Антиудобно это.


2. Цвет карт. 

Карты желтого цвета, многие сайты не могут себе позволить установить на свой сайт это, ибо эти цвета совершенно не совпадают с цветовой гаммой их сайтов. Гугл мапс вписывается более мягко, ибо его цвета гораздо мягче. Может сделать "примочку" которая будет заменять цвета в картинках либо перекрасивать карту (ногами не бить, но мы отказались ставить карту из-за цветов карты).




9 комментариев
У класса YMaps.GeoObjectCollection (пример реализации можно посмотреть в Руководстве разработчика) есть метод getBounds(), который возвратит координаты области, занимаемой всеми точками входящими в группу (объект класса YMaps.GeoBounds). Метод карты setBounds() принимает объект YMaps.GeoBounds и устанавливает у карты центр и масштаб так, чтобы максимально близко охватить заданные границы. Тем самым в итоге в область видимости попадут все метки, объединенные с помощью объекта класса YMaps.GeoObjectCollection. Если что-то не получится - обращайтесь. Напишу пример.
var gCollection = new YMaps.GeoObjectCollection(); for(var i in myCollection) { var placemark = new YMaps.Placemark(new YMaps.GeoPoint(lng,lat)); gCollection.add(placemark); } map.setBounds(gCollection.getBounds()); //alert(gCollection.getBounds()); map.addOverlay(gCollection); gCollection.getBounds() возвращает null. Почему?? в Руководстве разработчика написано "Если значение не было установлено методом setBounds, getBounds() возвращает null" Разве границы не высчитываются автоматически в случае с GeoObjectCollection??
Тоже столкнулся с такой проблемой. Сделал так:

// Расширяет существующую область
YMaps.GeoBounds.prototype.extend = function(point) {

    var bounds = new YMaps.GeoCollectionBounds([
        this.getLeftBottom(),
        this.getRightTop(),
        point
    ]);

    this._left = bounds.getLeft();
    this._right = bounds.getRight();
    this._top = bounds.getTop();
    this._bottom = bounds.getBottom();
    ;
};

Если области нет ещё, то можно либо создать предварительно "одноточечную" область и использовать extend,

либо сразу:
var bounds = new YMaps.GeoCollectionBounds([
       
.... массив точек ...
   
]);

в итоге получется область охватывающая все точки но с возможностью расширени через метод add
По поводу цвета карты: перекрасить карту в настоящий момент нельзя (тайлы - это картинки размером 256x256px). Спасибо за ваше мнение.
Михаил Королев
28 января 2016, 09:09
п.1 (+1), сам спрашивал аналогичное но без масштаба - сказали подумают. Присоединяюсь к вопросу, и прошу при реализации множемственного запроса к геокодеру - так-же учесть и эту возможность. п.2 - не думаю что на это пойдут... хотя, как знать.. в клубе мобильных я.пробок раз в неделю уже полгода "ночной режим" клянчим.. не всё так просто.
Михаил Королев
28 января 2016, 09:09
пока писал - ответили. уточню, я имел ввиду YML - ибо jscript для моей задачи менее предпочтителен. хоят на сей день - единственное решение.
Ваш вопрос был про "пакетное геокодирование", а в автор этого поста спрашивает по отображению группы точек, чтобы все они попали в область видимости. Вопросы разные, не так ли? )
Михаил Королев
28 января 2016, 09:09
Да, именно так. Я при помощи присоединения к просьбе автора, уточняю и расширяю свою просьбу - сделать возможность ещё и автомасштабирования/центрирования результатов.
А я, наоборот, не стал ставить карту Гугл, мне кажется она более груба. Яндекс карта имеет ряд недостатков, но никак не связанных с дизайном. Основной недостаток: малая детализация (увеличение) со спутника, по крайней мере для моего региона. А так все прекрасно вписывается в дизайн нашего сайта. Можете посмотреть здесь ( http://www.ukrpresent.com.ua/contact_us.php ). Спасибо разработчикам! :)