如何修复Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number?
如何修复Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number?
我正在尝试将我的googlemaps v2函数迁移到v3。
但是不知何故,我陷入了一个奇怪的错误,我找不到我做错了什么。
错误:Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number %7Bmain,adsense,geometry,zombie%7D.js:25
这是我的地图初始化:
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));
下面是出错的部分:
function drawTraders(map, options) { var traders_uri = options.traders_uri || ''; if ('' == traders_uri) { return false; } // 获取信息 $.getJSON(traders_uri, function(data) { // 遍历信息 $.each(data.traders, function(i, trader) { var icon = options.icon_image_uri; var markerIcon = new google.maps.MarkerImage(icon, // 此标记的宽度为20像素,高度为32像素。 new google.maps.Size(25, 25), // 此图像的原点为0,0。 new google.maps.Point(0,0), // 此图像的锚点为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); /*这里是 new google.maps.Marker() 的错误*/ var marker = new google.maps.Marker({ position: myLatlng, map: map, icon : markerIcon, }); var infowindow = new google.maps.InfoWindow({ content: html }); }
编辑:drawTraders的调用
drawTraders(map, { traders_uri: "getTraders.php", icon_image_uri: "icon-cms.gif", });
我使用了这个例子 Info Window
编辑:
我遇到了与完全相同的错误消息相同的问题。最后的错误是,我仍然调用了地图v2的javascript。我必须替换:
<script src="http://maps.google.com/maps?file=api&v=2&key=####################" type="text/javascript"></script>
使用以下代码:
<script src="http://maps.googleapis.com/maps/api/js?key=####################&sensor=false" type="text/javascript"></script>
之后,它正常工作了。花了我一些时间;-)
问题出现的原因是在设置地图的中心点时,经纬度的值不是数字类型。
解决方法是使用parseFloat函数将经纬度的值转换为数字类型。
具体的代码如下:
map = new google.maps.Map(document.getElementById('map'), { zoom: 16, center: { lat: parseFloat(lat), lng: parseFloat(lng) }, mapTypeId: 'terrain', disableDefaultUI: true });
其中,lat和lng分别是经度和纬度的变量,通过parseFloat函数将其转换为数字类型,然后作为center的属性值传入。这样就能解决Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number的问题。
解决方法:将字符串转换为数字使用parseFloat函数。修复代码如下:
var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon));
文章内容如下:
在使用google.maps.LatLng构造函数时,如果不传入数字类型的参数,就会出现Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number的错误。根据你的评论,trader.geo.lat和trader.geo.lon是字符串类型的数据,而不是数字类型。为了解决这个问题,我们需要使用parseFloat函数将它们转换为数字类型。修复后的代码如下:
var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon));