2013-12-14 5 views
26

Ich versuche, meine googlemaps v2 Funktionen auf v3 zu portieren.So beheben Sie Uncaught InvalidValueError: setPosition: keine LatLng oder LatLngLiteral: in Eigenschaft lat: keine Zahl?

Aber irgendwie steckte ich in einem seltsamen Fehler und ich konnte nicht finden, was ich falsch mache.

Error : Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number %7Bmain,adsense,geometry,zombie%7D.js:25

Hier ist meine Karte Initialisierung:

var map = new google.maps.Map(document.getElementById("map"),{ 
    zoom:4 
    size:new google.maps.Size(580,440), 
    mapTypeControl: true, 
    mapTypeControlOptions: { 
    style:google.maps.MapTypeControlStyle.VERTICAL_BAR, 
    position: google.maps.ControlPosition.BOTTOM_CENTER, 
    }, 
    panControl: true, 
    panControlOptions: { 
    position: google.maps.ControlPosition.TOP_LEFT, 
    }, 
    zoomControl: true, 
    zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.LARGE, 
    position: google.maps.ControlPosition.LEFT_CENTER, 
    }, 
    scaleConrol: true, 
    scaleControlOptions:{ 
    position: google.maps.ControlPosition.TOP_LEFT , 
    }, 
}); 
map.setCenter(new google.maps.LatLng(49.477643, 9.316406)); 

und hier der Teil mit meinem Fehler:

function drawTraders(map, options) { 
var traders_uri = options.traders_uri || ''; 
if ('' == traders_uri) { 
    return false; 
} 

// get the informations 
$.getJSON(traders_uri, function(data) { 
    // look through the information 
$.each(data.traders, function(i, trader) { 
var icon = options.icon_image_uri; 

var markerIcon = new google.maps.MarkerImage(icon, 
    // This marker is 20 pixels wide by 32 pixels tall. 
    new google.maps.Size(25, 25), 
    // The origin for this image is 0,0. 
    new google.maps.Point(0,0), 
    // The anchor for this image is the base of the flagpole at 0,32. 
    new google.maps.Point(0, 32) 
); 

var html = 'test'; 

/*Information from chromium debugger 
trader: Object 
    geo: Object 
     lat: "49.014821" 
     lon: "10.985072" 

*/ 
var myLatlng = new google.maps.LatLng(trader.geo.lat,trader.geo.lon); 

/*here is the error in new google.maps.Marker()*/ 
var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    icon : markerIcon, 
}); 

var infowindow = new google.maps.InfoWindow({ 
    content: html 
}); 
} 

Edit: der Aufruf von drawTraders

drawTraders(map, { 
     traders_uri: "getTraders.php", 
     icon_image_uri: "icon-cms.gif", 
}); 

Ich war mit dieses Beispiel Info Window

Ich hoffe, jemand könnte mir helfen.

Edit:

Fiddle which is not working

Fiddle which works

+0

GSize zu verwenden ist eine Sache v2 . MarkerImage ist ein veraltetes v3-Konstrukt, das durch das anonyme [Symbol] (https://developers.google.com/maps/documentation/javascript/reference#Icon) ersetzt wird. Was sind die Werte von 'trader.geo.lat, trader.geo.lon' – geocodezip

+0

Sorry, ich habe es nicht gesehen, aber nachdem es auf google.maps.Größe behoben wurde funktioniert es immer noch nicht. Die Werte sind im Kommentar. Ich verstehe den Downvote nicht, aber ok – demonking

+0

Sie haben nicht genügend Code gepostet, um das Problem zu replizieren. – geocodezip

Antwort

82

Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number

bedeutet, dass Sie nicht vorbei Zahlen in den google.maps.LatLng Konstruktor. Pro Kommentar:

/*Information from chromium debugger 
trader: Object 
    geo: Object 
     lat: "49.014821" 
     lon: "10.985072" 

*/ 

trader.geo.lat und trader.geo.lon sind Strings, keine Zahlen. Verwenden Sie ParseFloat, um sie in Zahlen zu konvertieren:

var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon)); 
+12

Ich habe es mit parseFloat versucht, aber immer noch den gleichen Fehler. – demonking

+0

"49.014821" ist immer noch numerisch (eine Nummer) in der Programmierung. – Jared

+3

'LatLng()' * akzeptiert Strings in Ordnung *, vorausgesetzt, sie sind wohlgeformt. (Just 'alert (lat + "" + lng + "(Typen:" + (typeof lat) + "," + (typeof lng) + ")") "vor' LatLng (lat, lng) 'hinzugefügt, um dies zu überprüfen .) –

18

Ich hatte das gleiche Problem mit genau der gleichen Fehlermeldung. Am Ende war der Fehler, dass ich noch die Maps v2 Javascript genannt habe. Ich hatte zu ersetzen:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=####################" type="text/javascript"></script> 

mit

<script src="http://maps.googleapis.com/maps/api/js?key=####################&sensor=false" type="text/javascript"></script> 

danach, es funktionierte gut. nahm mich eine Weile ;-)

+0

Die src-Url ist falsch, du musst v = 3 verwenden, da die Funktion in meinem Hauptbeitrag für googlemaps v3 nicht v2;) – demonking

+0

Du hast recht, ich habe die Codeteile umgekehrt. So habe ich den Skript-Import ersetzt. Danke ;-) – CodeCountZero

+0

Oh sorry, mein Fehler, wenn es keine v = 3 Variable gibt, wäre die googlemaps Development Version der Standard, also sei vorsichtig. :) – demonking

3

Ich hatte das gleiche Problem, die Tatsache ist, dass die Eingabe von lat und lang sollte String sein. Nur dann habe ich es geschafft.

zum Beispiel:

-Controller.

ViewBag.Lat = object.Lat.ToString(). Replace (",", ".");

ViewBag.Lng = Objekt.Lng.ToString(). Replace (",", ".");

View - JavaScript-Funktion

<script> 
    function initMap() { 
     var myLatLng = { lat: @ViewBag.Lat, lng: @ViewBag.Lng}; 

     // Create a map object and specify the DOM element for display. 
     var map = new window.google.maps.Map(document.getElementById('map'), 
     { 
      center: myLatLng, 
      scrollwheel: false, 
      zoom: 16 
     }); 

     // Create a marker and set its position. 
     var marker = new window.google.maps.Marker({ 
      map: map, 
      position: myLatLng 
      //title: "Blue" 
     }); 
    } 
</script> 

ich den doppelten Wert in String konvertieren und tun ein Ersetzen in der '' auf '' Und so funktioniert alles normal.

0

Du bist wahrscheinlich null Wert vorbei, wenn Sie die Koordinaten dynamisch sind Laden gesetzt, einen Scheck, bevor Sie die Karte loader dh rufen: if(mapCords){loadMap}

0

angular-google-maps

$scope.bounds = new google.maps.LatLngBounds(); 
for (var i = $scope.markers.length - 1; i >= 0; i--) { 
    $scope.bounds.extend(new google.maps.LatLng($scope.markers[i].coords.latitude, $scope.markers[i].coords.longitude)); 
};  
$scope.control.getGMap().fitBounds($scope.bounds); 
$scope.control.getGMap().setCenter($scope.bounds.getCenter()); 
Verwandte Themen