Как предотвратить наложение меток на одну и ту же геолокацию с Bing Maps? - PullRequest
4 голосов
/ 28 марта 2012

Если у вас есть 2 кнопки в «Лондоне» в одной и той же геолокации, есть ли в API что-нибудь, что могло бы их раздвинуть, чтобы они оба были видны?

Я могу найти документацию только по их старому API точек карты, который имел PreventIconCollisions, это то, что я хочу, но не вижу никакой ссылки на это в новом API.

Я использую JavaScript API.

Ответы [ 2 ]

0 голосов
/ 20 августа 2014

Я знаю, что этот вопрос действительно старый, но если кто-то ищет что-то подобное (кластеризация контактов), вот хорошее начало: http://rtsinani.github.io/PinClusterer/

0 голосов
/ 30 января 2013

Так что, если я правильно понимаю, у вас есть аналогичная информация в том же месте, это правильно?

Чтобы отобразить обе информации, у вас будет две опции:

  1. Объединить информацию в текстовом поле, используя соответствующий способ представления информации внутри этого элемента пользовательского интерфейса (например, используя свой собственный информационный блок с вкладками)
  2. Скопируйте точку вручную, когда вы находитесь на определенном уровне увеличения

Нет свойства по умолчанию, чтобы установить это, и было бы очень грязно делать это на многих кнопках, но в основной идее вам нужно будет: обнаружить событие viewchangeend, если вы находитесь на определенном уровне масштабирования более высокий уровень масштабирования), то вы их декластеризируете (я называю это деклютером ближайших кнопок).

// Bind pushpin mouseover.
    Microsoft.Maps.Events.addHandler(pin, 'mouseover', function (e) {
        var currentPin = e.target;
        currentPin.setOptions({ visible: false });
        var currentLocation = currentPin.getLocation().clone();

        var currentPoint = bmGlobals.geo.map.tryLocationToPixel(currentLocation);
        if (currentPin.associatedCluster.length == 2) {
            // Display the first pushpin
            var pinA = createPin(currentPin.associatedCluster[0]);
            var locA = bmGlobals.geo.map.tryPixelToLocation(new Microsoft.Maps.Point(currentPoint.x - pinA.getWidth(), currentPoint.y));
            pinA.setLocation(locA);
            bmGlobals.geo.layerClusteredPin.push(pinA);

            // Display the second pushpin
            var pinB = createPin(currentPin.associatedCluster[1]);
            var locB = bmGlobals.geo.map.tryPixelToLocation(new Microsoft.Maps.Point(currentPoint.x + pinB.getWidth(), currentPoint.y));
            pinB.setLocation(locB);
            bmGlobals.geo.layerClusteredPin.push(pinB);
        }
    });

Я попытаюсь написать модуль карт bing об этом, но на самом деле вам нужно будет получить ваши кластерные кнопки (или вашу собственную кнопку, имеющую два связанных объекта данных), а затем вам нужно будет установить их положение. на основе рендеринга на стороне клиента.

...