How to fix Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number?

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

i'm trying to port my googlemaps v2 functions to v3.

But somehow i stuck in a strange error and i could not find, what i'm doing wrong.

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

Here my map initialisation:

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

and here the part with my error:

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: the call of drawTraders

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

I was using this example Info Window

I hope someone could help me.

Edit:

Fiddle which is not working

Fiddle which works

回答1:

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

Means you are not passing numbers into the google.maps.LatLng constructor. Per your comment:

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

trader.geo.lat and trader.geo.lon are strings, not numbers. Use parseFloat to convert them to numbers:

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


回答2:

I had the same problem with exactly the same error message. In the end the error was, that I still called the maps v2 javascript. I had to replace:

with

after this, it worked fine. took me a while ;-)



回答3:

I was having the same problem, the fact is that the input of lat and long should be String. Only then did I manage.

for example:

Controller.

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

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

View - function javascript

I convert the double value to string and do a Replace in the ',' to '.' And so everything works normally.



回答4:

Using 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()); 


回答5:

You're probably passing null value if you're loading the coordinates dynamically, set a check before you call the map loader ie: if(mapCords){loadMap}



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!