Почему VEMap.Find в Bing Maps не работает?

Я занимаюсь исследованием использования 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, было бы очень признательно.


person Eric Kolb    schedule 22.02.2010    source источник
comment
Вы указываете свои учетные данные с помощью метода VEMap.SetCredentials()? - msdn.microsoft.com/en-us/library/ee692182.aspx   -  person Nicolas Boonaert    schedule 30.01.2013


Ответы (1)


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

person roblem    schedule 03.09.2013