Как исправить Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число?
Я пытаюсь перенести мои функции googlemaps v2 на v3.
Но почему-то я застрял в странной ошибке, и я не мог найти, что я делаю неправильно.
Ошибка: Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число% 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;
}
// 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
});
}
Изменить: вызов drawTraders
drawTraders(map, {
traders_uri: "getTraders.php",
icon_image_uri: "icon-cms.gif",
});
Я использовал этот пример Информационное окно
Я надеюсь, что кто-то может мне помочь.
Изменить:
Скрипт, который не работает
Скрипт, который работает
Ответы
Ответ 1
Uncaught InvalidValueError: setPosition: не LatLng или LatLngLiteral: в свойствах lat: не число
означает, что вы не передаете числа в конструктор google.maps.LatLng. За ваш комментарий:
/*Information from chromium debugger
trader: Object
geo: Object
lat: "49.014821"
lon: "10.985072"
*/
trader.geo.lat и trader.geo.lon - это строки, а не числа. Используйте parseFloat для преобразования их в числа:
var myLatlng = new google.maps.LatLng(parseFloat(trader.geo.lat),parseFloat(trader.geo.lon));
Ответ 2
У меня была такая же проблема с точно таким же сообщением об ошибке. В итоге ошибка заключалась в том, что я все еще называл карты 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>
после этого он работал нормально. взял меня на время; -)
Ответ 3
У меня была такая же проблема, факт в том, что ввод lat и long должен быть String. Только тогда я справился.
например:
контроллер.
ViewBag.Lat = object.Lat.ToString(). Заменить ( ",", "." );
ViewBag.Lng = object.Lng.ToString(). Заменить ( ",", "." );
Просмотр - функция javascript
<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>
Я конвертирую двойное значение в строку и делаю Replace в ',' to '.' И поэтому все работает нормально.
Ответ 4
Вероятно, вы передаете значение null
, если вы динамически загружаете координаты, установите флажок перед вызовом загрузчика карт, то есть: if(mapCords){loadMap}
Ответ 5
Использование 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());