2 Stimmen

Warum schlägt die VEMap.Find von Bing Maps unbemerkt fehl?

Ich recherchiere gerade über die Verwendung von Bing Maps für eine geplante Anwendung und stoße dabei auf eine Mauer. Die allgemeine Idee ist, dass ich die Standorte der verschiedenen Elemente, die wir innerhalb X Entfernung zu einem Ort haben, zeigen möchte. Der Startpunkt ist die US-Karte, und wir verwenden den Klick des Benutzers, um Längen- und Breitengrad zu erhalten, und damit die nächstgelegene Stadt auszuwählen. Wir werden die Karte dort zentrieren und dann Pushpins für jeden unserer Artikel innerhalb der vorgeschriebenen Entfernung einfügen.

Um eine Demo zu erstellen, habe ich das Folgende geschrieben. Das Problem, auf das ich stoße, ist, dass der Aufruf von landMap.Find in plotZipcode unbemerkt fehlschlägt. Es gibt keine Fehlermeldung und die Konsolenausgabe sowohl vor als auch nach landMap.Find wird wie erwartet angezeigt, aber plotPushpin wird nie ausgeführt.

<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>

Die besonders frustrierende Sache ist, dass, wenn ich Firebug verwenden, um manuell die folgenden ausführen, es verhält sich genau wie erwartet:

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

Jede Einsicht in, warum VEMap.Find ist einfach nichts aus meiner AJAX-Callback tun würde sehr geschätzt werden.

0voto

roblem Punkte 499

Das Thema ist ein Firefox-Thema. Aus irgendeinem Grund wird die JQuery-Funktion "doc ready" nicht gerne mit einem Verweis auf die Funktion zum Laden der Karte ausgeführt. Wenn Sie die mapload-Methode in den Körper onload-Ereignis (html oder reines Javascript - nicht jquery) platzieren, wird es funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X