Почему VEMap.Find от Bing Maps молчит? - PullRequest
2 голосов
/ 22 февраля 2010

Я провожу некоторые исследования по использованию Bing Maps для предлагаемого приложения и наткнулся на стену. Общая идея заключается в том, что я хочу показать расположение различных предметов, которые у нас есть на расстоянии X от места. Начальная точка - карта США, и мы используем щелчок пользователя, чтобы получить широту / долготу, и используем его, чтобы выбрать ближайший город. Мы центрируем карту там, а затем загружаем метки для каждого из наших предметов в пределах предписанного расстояния.

В способе создания демо я написал следующее. Проблема, с которой я сталкиваюсь, состоит в том, что вызов landMap.Find в plotZipcode молча завершается неудачей. Там нет сообщения об ошибке и вывод консоли как до, так и после landMap.Find отображается как положено, но plotPushpin никогда не выполняется.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script charset="UTF-8" type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us"></script>
<script type="text/javascript">
    var landMap = null;

    function getLatLong(evt) {
        var latLong = landMap.PixelToLatLong(new VEPixel(evt.mapX, evt.mapY));
        // This looks up the nearest city from the lat/long
        // and returns something like "EAGLE CREEK, IN"
        $.ajax({
            url: '/cfc/bing.cfc',
            data: {
                method: 'findCity',
                Latitude: latLong.Latitude,
                Longitude: latLong.Longitude
            },
            success: plotZipcode
        });
    }

    function plotPushpin(layer, results, places, expectMore, errorMessage) {
        console.log('Executing plotPushpin...');
        if (landMap && places && places.length >= 1) {
            var pushpin = new VEShape(VEShapeType.Pushpin, places[0].LatLong);
            pushpin.SetTitle('Available Repos Near '+places[0].Name);
            landMap.AddShape(pushpin);
        }
    }

    function plotZipcode(data, textStatus, XMLHttpRequest) {
        console.log('Executing plotZipcode...');
        if (landMap && data.length > 0) {
            console.log(data);
            landMap.Clear();
            console.log('Calling VEMap.Find...');
            landMap.Find(null, data, null, null, null, null, null, null, null, null, plotPushpin);
            //landMap.Find(null, data); // This doesn't work either.'
            console.log('Called VEMap.Find!');
        }
    }

    $(document).ready(function() {
        landMap = new VEMap('landLocation');
        landMap.LoadMap();
        landMap.ShowDisambiguationDialog(false);
        landMap.AttachEvent('onclick', getLatLong);
    });
</script>
<div id='landLocation' style="position:absolute; width:600px; height:400px;"></div>

Особенно расстраивает то, что если я использую Firebug для ручного выполнения следующего, он ведет себя точно так, как ожидалось:

landMap.Find(null, "EAGLE CREEK, IN", null, null, null, null, null, null, null, null, plotPushpin);

Буду очень признателен за понимание того, почему VEMap.Find просто ничего не делает из моего обратного вызова AJAX.

1 Ответ

0 голосов
/ 03 сентября 2013

Проблема в Firefox. По какой-то причине функция готовности документа JQuery не любит запускаться со ссылкой на функцию для загрузки карты. Если вы поместите метод mapload в событие onload тела (html или чистый javascript - не jquery), он будет работать.

...